#!/bin/bash
logical=512 # queue/logical_block_size
physical=4096 # queue/physical_block_size
min=4096 # queue/optimal_io_size
opt=4096 # queue/minimum_io_size
boot_disk=${1:-wily-server-cloudimg-amd64-disk1.raw}
TEMP_D=""
fail() { echo "$@" 1>&2; exit 1; }
cleanup() {
[ ! -d "$TEMP_D" ] || rm -Rf "$TEMP_D"
}
TEMP_D="$(mktemp -d)" || exit
trap cleanup EXIT
seed_img="${TEMP_D}/seed.img"
disk_img="${TEMP_D}/disk.img"
ud_file="$TEMP_D/user-data"
if [ ! -f "${boot_disk}" ]; then
fmt=qcow2
out=$(qemu-img create -f raw "$disk_img" 1G 2>&1) ||
fail "failed: $out"
else
fullpath=$(readlink -f "$boot_disk") || fail "failed readlink $boot_disk"
out=$(qemu-img create -f qcow2 -b "$fullpath" "$disk_img" 2>&1) ||
fail "failed: $out"
fmt=qcow2
fi
extra_img="${TEMP_D}/extra.img"
out=$(qemu-img create -f raw "$extra_img" 8G 2>&1) ||
fail "failed: $out"
cat > "$ud_file" <<"EOF"
#!/bin/sh
pre=/sys/class/block/vda
echo =========================================
for f in size queue/logical_block_size queue/physical_block_size \
queue/optimal_io_size queue/minimum_io_size; do
read val < "$pre/$f"
echo "${f}: $val"
done
sfdisk --list /dev/sda
echo =========================================
read cmdline < /proc/cmdline
if [ "${cmdline#*stop}" != "${cmdline}" ]; then
/sbin/poweroff
fi
echo "ubuntu:ubuntu" | chpasswd
EOF
cloud-localds $seed_img $ud_file || fail
disk_args=( )
opts="${physical:+physical_block_size=$physical,}${logical:+logical_block_size=${logical},}${min:+min_io_size=$min,}${opt:+opt_io_size=${opt},}"
index=1
for disk in "${disk_img}" "${seed_img}" "${extra_img}"; do
fmt=$(qemu-img info "$disk" | awk '$0 ~ /file format:/ { print $3 }')
disk_args=( "${disk_args[@]}"
-drive "file=${disk},if=none,id=disk_img_${index},format=$fmt"
-device virtio-blk-pci,bootindex=$index,scsi=off,drive=disk_img_${index},id=virtio-disk-${index},${opts}
)
index=$(($index+1))
done
cmd=(
qemu-system-x86_64 -enable-kvm
"${disk_args[@]}"
-device virtio-net-pci,netdev=net00 -netdev type=user,id=net00
# -kernel cirros-d150923-x86_64-kernel
# -initrd cirros-d150923-x86_64-initramfs
# -append "rdroot=1 console=ttyS0"
-m 768
-echr 0x05
# -nographic
)
echo "${cmd[@]}"
"${cmd[@]}"
#qemu-system-x86_64 \
#-drive file=disk.img,if=none,id=drive-virtio-disk,format=raw,cache=none,aio=native,werror=stop,rerror=stop,media=disk,snapshot=off,bus=1,unit=1 \
#-device virtio-blk-pci,scsi=off,drive=drive-virtio-disk,id=virtio-disk,bus=pci.0,addr=0x7,bootindex=1,physical_block_size=512,logical_block_size=512,multifunction=on,scsi=on,event_idx=on,indirect_desc=on,vectors=32,x-data-plane=off,ioeventfd=on,serial=fuxc,discard_granularity=1,min_io_size=4096,opt_io_size=4096