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