1######################################################################## 2# 这是一个用于创建磁盘镜像的脚本 3# 用法:./create_hdd_image.sh -P MBR/GPT 4# 要创建一个MBR分区表的磁盘镜像,请这样运行它: ARCH=x86_64 bash create_hdd_image.sh -P MBR 5# 要创建一个GPT分区表的磁盘镜像,请这样运行它: ARCH=x86_64 bash create_hdd_image.sh -P GPT 6# 请注意,这个脚本需要root权限 7# 请注意,运行这个脚本之前,需要在您的计算机上安装qemu-img和fdisk,以及parted 8# 9# 这个脚本会在当前目录下创建一个名为disk-${ARCH}.img的文件,这个文件就是磁盘镜像, 10# 在完成后,会将这个文件移动到bin目录下 11######################################################################## 12 13echo "create_hdd_image.sh: Creating virtual disk image... arch=${ARCH}" 14 15# 给变量赋默认值 16export ARCH=${ARCH:=x86_64} 17 18DISK_NAME=disk-${ARCH}.img 19 20format_as_mbr() { 21 echo "Formatting as MBR..." 22 # 使用fdisk把disk.img的分区表设置为MBR格式(下方的空行请勿删除) 23fdisk ${DISK_NAME} << EOF 24o 25n 26 27 28 29 30a 31w 32EOF 33 34} 35 36format_as_gpt() { 37 echo "Formatting as GPT..." 38sudo parted ${DISK_NAME} << EOF 39mklabel gpt 40y 41mkpart 42p1 43FAT32 440 45-1 46I 47set 481 49boot 50on 51print 52q 53EOF 54} 55 56echo "Creating virtual disk image..." 57ARGS=`getopt -o P: -- "$@"` 58# 创建一至少为256MB磁盘镜像(类型选择raw) 59qemu-img create -f raw ${DISK_NAME} 2048M 60#将规范化后的命令行参数分配至位置参数($1,$2,...) 61eval set -- "${ARGS}" 62#echo formatted parameters=[$@] 63#根据传入参数进行MBR/GPT分区 64case "$1" in 65 -P) 66 if [ $2 == "MBR" ]; 67 then 68 format_as_mbr 69 elif [ $2 == "GPT" ]; 70 then 71 format_as_gpt 72 else 73 echo "Invalid partition type: $2" 74 exit 1 75 fi 76 ;; 77 --) 78 # 如果没有传入参数-P,则默认为MBR分区 79 format_as_mbr 80 ;; 81 *) 82 echo "Invalid option: $1" 83 exit 1 84 ;; 85esac 86 87 88LOOP_DEVICE=$(sudo losetup -f --show -P ${DISK_NAME}) \ 89 || exit 1 90echo ${LOOP_DEVICE}p1 91sudo mkfs.vfat -F 32 ${LOOP_DEVICE}p1 92sudo losetup -d ${LOOP_DEVICE} 93 94echo "Successfully created disk image." 95mkdir -p ../bin 96chmod 777 ${DISK_NAME} 97mv ./${DISK_NAME} ../bin/ 98