xref: /DragonOS/tools/create_hdd_image.sh (revision 4fda81ce81939d83b74c8042d6fb4223deff3685)
1########################################################################
2# 这是一个用于创建磁盘镜像的脚本
3# 用法:./create_hdd_image.sh -P MBR/GPT
4# 要创建一个MBR分区表的磁盘镜像,请这样运行它: ARCH=x86_64 bash create_hdd_image.sh -P MBR
5# 要创建一个GPT分区表的磁盘镜像,请这样运行它: ARCH=x86_64 bash create_hdd_image.sh -P GPT
6# 请注意,这个脚本需要root权限
7# 请注意,运行这个脚本之前,需要在您的计算机上安装qemu-img和fdisk,以及parted
8#
9# 这个脚本会在当前目录下创建一个名为disk-${ARCH}.img的文件,这个文件就是磁盘镜像,
10#       在完成后,会将这个文件移动到bin目录下
11########################################################################
12
13echo "create_hdd_image.sh: Creating virtual disk image... arch=${ARCH}"
14
15# 给变量赋默认值
16export ARCH=${ARCH:=x86_64}
17
18DISK_NAME=disk-${ARCH}.img
19
20format_as_mbr() {
21    echo "Formatting as MBR..."
22   # 使用fdisk把disk.img的分区表设置为MBR格式(下方的空行请勿删除)
23fdisk ${DISK_NAME} << EOF
24o
25n
26
27
28
29
30a
31w
32EOF
33
34}
35
36format_as_gpt() {
37    echo "Formatting as GPT..."
38sudo parted ${DISK_NAME}  << EOF
39mklabel gpt
40y
41mkpart
42p1
43FAT32
440
45-1
46I
47set
481
49boot
50on
51print
52q
53EOF
54}
55
56echo "Creating virtual disk image..."
57ARGS=`getopt -o P: -- "$@"`
58# 创建一至少为256MB磁盘镜像(类型选择raw)
59qemu-img create -f raw ${DISK_NAME} 2048M
60#将规范化后的命令行参数分配至位置参数($1,$2,...)
61eval set -- "${ARGS}"
62#echo formatted parameters=[$@]
63#根据传入参数进行MBR/GPT分区
64case "$1" in
65    -P)
66        if [ $2 == "MBR" ];
67        then
68            format_as_mbr
69        elif [ $2 == "GPT" ];
70        then
71            format_as_gpt
72        else
73            echo "Invalid partition type: $2"
74            exit 1
75        fi
76        ;;
77    --)
78        # 如果没有传入参数-P,则默认为MBR分区
79        format_as_mbr
80        ;;
81    *)
82        echo "Invalid option: $1"
83        exit 1
84        ;;
85esac
86
87
88LOOP_DEVICE=$(sudo losetup -f --show -P ${DISK_NAME}) \
89    || exit 1
90echo ${LOOP_DEVICE}p1
91sudo mkfs.vfat -F 32 ${LOOP_DEVICE}p1
92sudo losetup -d ${LOOP_DEVICE}
93
94echo "Successfully created disk image."
95mkdir -p ../bin
96chmod 777 ${DISK_NAME}
97mv ./${DISK_NAME} ../bin/
98