######################################################################## # 这是一个用于创建磁盘镜像的脚本 # 用法:./create_hdd_image.sh -P MBR/GPT # 要创建一个MBR分区表的磁盘镜像,请这样运行它: bash create_hdd_image.sh -P MBR # 要创建一个GPT分区表的磁盘镜像,请这样运行它: bash create_hdd_image.sh -P GPT # 请注意,这个脚本需要root权限 # 请注意,运行这个脚本之前,需要在您的计算机上安装qemu-img和fdisk,以及parted # # 这个脚本会在当前目录下创建一个名为disk.img的文件,这个文件就是磁盘镜像, # 在完成后,会将这个文件移动到bin目录下 ######################################################################## format_as_mbr() { echo "Formatting as MBR..." # 使用fdisk把disk.img的分区表设置为MBR格式(下方的空行请勿删除) fdisk disk.img << EOF o n a w EOF } format_as_gpt() { echo "Formatting as GPT..." sudo parted disk.img << EOF mklabel gpt y mkpart p1 FAT32 0 -1 I set 1 boot on print q EOF } echo "Creating virtual disk image..." ARGS=`getopt -o P: -- "$@"` # 创建一至少为64MB磁盘镜像(类型选择raw) qemu-img create -f raw disk.img 64M #将规范化后的命令行参数分配至位置参数($1,$2,...) eval set -- "${ARGS}" #echo formatted parameters=[$@] #根据传入参数进行MBR/GPT分区 case "$1" in -P) if [ $2 == "MBR" ]; then format_as_mbr elif [ $2 == "GPT" ]; then format_as_gpt else echo "Invalid partition type: $2" exit 1 fi ;; --) # 如果没有传入参数-P,则默认为MBR分区 format_as_mbr ;; *) echo "Invalid option: $1" exit 1 ;; esac LOOP_DEVICE=$(sudo losetup -f --show -P disk.img) \ || exit 1 echo ${LOOP_DEVICE}p1 sudo mkfs.vfat -F 32 ${LOOP_DEVICE}p1 sudo losetup -d ${LOOP_DEVICE} echo "Successfully created disk image." mkdir -p ../bin chmod 777 disk.img mv ./disk.img ../bin/