######################################################################## # 这是一个用于创建磁盘镜像的脚本 # 用法:./create_hdd_image.sh -P MBR/GPT # 要创建一个MBR分区表的磁盘镜像,请这样运行它: ARCH=x86_64 bash create_hdd_image.sh -P MBR # 要创建一个GPT分区表的磁盘镜像,请这样运行它: ARCH=x86_64 bash create_hdd_image.sh -P GPT # 请注意,这个脚本需要root权限 # 请注意,运行这个脚本之前,需要在您的计算机上安装qemu-img和fdisk,以及parted # # 这个脚本会在当前目录下创建一个名为disk-${ARCH}.img的文件,这个文件就是磁盘镜像, # 在完成后,会将这个文件移动到bin目录下 ######################################################################## echo "create_hdd_image.sh: Creating virtual disk image... arch=${ARCH}" # 给变量赋默认值 export ARCH=${ARCH:=x86_64} DISK_NAME=disk-${ARCH}.img format_as_mbr() { echo "Formatting as MBR..." # 使用fdisk把disk.img的分区表设置为MBR格式(下方的空行请勿删除) fdisk ${DISK_NAME} << EOF o n a w EOF } format_as_gpt() { echo "Formatting as GPT..." sudo parted ${DISK_NAME} << 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: -- "$@"` # 创建一至少为256MB磁盘镜像(类型选择raw) qemu-img create -f raw ${DISK_NAME} 2048M #将规范化后的命令行参数分配至位置参数($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_NAME}) \ || 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_NAME} mv ./${DISK_NAME} ../bin/