create_hdd_image.sh 2.0 KB

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