mkswap-qemu.sh

QEMU-IMG based mkswap - Roy Keene, 04/19/2017 06:45 PM

Download (993 Bytes)

 
1
#! /usr/bin/env bash
2

    
3
set -e
4

    
5
output="$1"
6
size="$2"
7

    
8
if [ -z "${output}" -o -z "${size}" ]; then
9
	echo "Usage: mkswap-qemu <output> <sizeInMB> <mkswapArgs>..." >&2
10

    
11
	exit 1
12
fi
13

    
14
if [ $[${size} / 1] != "${size}" ] 2>/dev/null; then
15
	echo "Invalid size specified: ${size}" >&2
16

    
17
	exit 1
18
fi
19

    
20
shift; shift
21
mkswap_args=("$@")
22

    
23
tmpfile1=''
24
tmpfile2=''
25

    
26
function cleanup() {
27
	rm -f "${tmpfile1}" "${tmpfile2}"
28
}
29

    
30
trap cleanup EXIT
31

    
32
tmpfile1="$(mktemp)"
33
tmpfile2="$(mktemp)"
34
pagesize="$(getconf PAGESIZE)"
35

    
36
dd if=/dev/zero of="${tmpfile1}" bs=$[1024*1024] seek=$[${size} - 1] count=1 2>/dev/null
37

    
38
mkswap "${mkswap_args[@]}" "${tmpfile1}"
39

    
40
dd if="${tmpfile1}" bs="${pagesize}" count=1 of="${tmpfile2}" 2>/dev/null
41

    
42
case "${output}" in
43
	rbd:*)
44
		output_format='raw'
45
		;;
46
	*.qcow2)
47
		output_format='qcow2'
48
		;;
49
	*)
50
		# Default: raw
51
		output_format='raw'
52
		;;
53
esac
54

    
55
qemu-img convert -O "${output_format}" -f raw "${tmpfile2}" "${output}"
56
qemu-img resize -f "${output_format}" "${output}" "${size}M"
57

    
58
exit 0