create_hdd_image.sh 2.1 KB

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