12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- ########################################################################
- # 这是一个用于创建磁盘镜像的脚本
- # 用法:./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/
|