create_hdd_image.sh 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. echo "create_hdd_image.sh: Creating virtual disk image... arch=${ARCH}"
  13. # 给变量赋默认值
  14. export ARCH=${ARCH:=x86_64}
  15. DISK_NAME=disk-${ARCH}.img
  16. format_as_mbr() {
  17. echo "Formatting as MBR..."
  18. # 使用fdisk把disk.img的分区表设置为MBR格式(下方的空行请勿删除)
  19. fdisk ${DISK_NAME} << EOF
  20. o
  21. n
  22. a
  23. w
  24. EOF
  25. }
  26. format_as_gpt() {
  27. echo "Formatting as GPT..."
  28. sudo parted ${DISK_NAME} << EOF
  29. mklabel gpt
  30. y
  31. mkpart
  32. p1
  33. FAT32
  34. 0
  35. -1
  36. I
  37. set
  38. 1
  39. boot
  40. on
  41. print
  42. q
  43. EOF
  44. }
  45. echo "Creating virtual disk image..."
  46. ARGS=`getopt -o P: -- "$@"`
  47. # 创建一至少为256MB磁盘镜像(类型选择raw)
  48. qemu-img create -f raw ${DISK_NAME} 2048M
  49. #将规范化后的命令行参数分配至位置参数($1,$2,...)
  50. eval set -- "${ARGS}"
  51. #echo formatted parameters=[$@]
  52. #根据传入参数进行MBR/GPT分区
  53. case "$1" in
  54. -P)
  55. if [ $2 == "MBR" ];
  56. then
  57. format_as_mbr
  58. elif [ $2 == "GPT" ];
  59. then
  60. format_as_gpt
  61. else
  62. echo "Invalid partition type: $2"
  63. exit 1
  64. fi
  65. ;;
  66. --)
  67. # 如果没有传入参数-P,则默认为MBR分区
  68. format_as_mbr
  69. ;;
  70. *)
  71. echo "Invalid option: $1"
  72. exit 1
  73. ;;
  74. esac
  75. LOOP_DEVICE=$(sudo losetup -f --show -P ${DISK_NAME}) \
  76. || exit 1
  77. echo ${LOOP_DEVICE}p1
  78. sudo mkfs.vfat -F 32 ${LOOP_DEVICE}p1
  79. sudo losetup -d ${LOOP_DEVICE}
  80. echo "Successfully created disk image."
  81. mkdir -p ../bin
  82. chmod 777 ${DISK_NAME}
  83. mv ./${DISK_NAME} ../bin/