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