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
23w
24EOF
25
26}
27
28format_as_gpt() {
29    echo "Formatting as GPT..."
30sudo parted disk.img  << EOF
31mklabel gpt
32y
33mkpart
34p1
35FAT32
360
37-1
38I
39set
401
41boot
42on
43print
44q
45EOF
46}
47
48echo "Creating virtual disk image..."
49ARGS=`getopt -o P: -- "$@"`
50# 创建一至少为64MB磁盘镜像(类型选择raw)
51qemu-img create -f raw disk.img 64M
52#将规范化后的命令行参数分配至位置参数($1,$2,...)
53eval set -- "${ARGS}"
54#echo formatted parameters=[$@]
55#根据传入参数进行MBR/GPT分区
56case "$1" in
57    -P)
58        if [ $2 == "MBR" ];
59        then
60            format_as_mbr
61        elif [ $2 == "GPT" ];
62        then
63            format_as_gpt
64        else
65            echo "Invalid partition type: $2"
66            exit 1
67        fi
68        ;;
69    --)
70        # 如果没有传入参数-P,则默认为MBR分区
71        format_as_mbr
72        ;;
73    *)
74        echo "Invalid option: $1"
75        exit 1
76        ;;
77esac
78
79LOOP_DEVICE=$(sudo losetup -f --show -P disk.img) \
80    || exit 1
81echo ${LOOP_DEVICE}p1
82sudo mkfs.vfat -F 32 ${LOOP_DEVICE}p1
83sudo losetup -d ${LOOP_DEVICE}
84
85echo "Successfully created disk image."
86mkdir -p ../bin
87chmod 777 disk.img
88mv ./disk.img ../bin/
89