newdisk-automator.sh 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/bin/sh
  2. DEVICE=$1
  3. SWAP_SIZE=$2
  4. CONDOR_SIZE=$3
  5. TEMP_SIZE=$4
  6. VM_SIZE=$5
  7. NOTEX_E=1
  8. NOTBLK_E=2
  9. ISMOUNT_E=3
  10. ISSWAP_E=4
  11. LVMUSED_E=5
  12. LVMPV_E=5
  13. # checking if the disk is used
  14. if [ ! -e ${DEVICE} ] ; then
  15. printf "$0: error: ${DEVICE} does not exist.\n" >&2
  16. exit ${NOTEX_E}
  17. fi
  18. if [ ! -b ${DEVICE} ] ; then
  19. printf "$0: error: ${DEVICE} is not a block file.\n" >&2
  20. exit ${NOTBLK_E}
  21. fi
  22. if grep --quiet "${DEVICE}" /proc/mounts ; then
  23. printf "$0: error: ${DEVICE} is mounted. Unmount it first.\n" >&2
  24. exit ${ISMOUNT_E}
  25. fi
  26. if grep --quiet "${DEVICE}" /proc/swaps ; then
  27. printf "$0: error: ${DEVICE} is used as swap. Swapoff it first.\n" >&2
  28. exit ${ISSWAP_E}
  29. fi
  30. if pvs | grep --quiet "${DEVICE}" ; then
  31. if [ $(lvs --noheadings --select vg_name="$(pvs --noheadings --select pv_name=~"${DEVICE}" -o vg_name)" --select lv_device_open!=0 | wc -l) -ne 0 ] ; then
  32. printf "$0: error: ${DEVICE} is part of a used lvm volume.\n" >&2
  33. exit ${LVMUSED_E}
  34. fi
  35. if [ $(vgs --noheadings --select pv_name=~"${DEVICE}" -o pv_count | uniq) -gt $(vgs --noheadings --select pv_name=~"${DEVICE}" | wc -l) ] ; then
  36. printf "$0: error: ${DEVICE} is part of a lvm volume group shared with others physical volumes.\n" >&2
  37. exit ${LVMPV_E}
  38. fi
  39. # removing lvm
  40. vgremove -f $(vgs --noheadings --select pv_name=~"${DEVICE}" -o vg_name)
  41. pvremove $(pvs --noheadings --select pv_name=~"${DEVICE}" -o pv_name)
  42. fi
  43. echo "SFDISK ----------------------------------------------------"
  44. # partitioning the disk
  45. sfdisk "${DEVICE}" <<-sfdisk-script-end
  46. # Create a new partition table on the specified disk, and create a new Linux LVM partition
  47. #
  48. # partition table info
  49. label: gpt
  50. #
  51. # partitions info
  52. #start size type bootable
  53. , ,31 ,
  54. sfdisk-script-end
  55. # LVM
  56. echo "PVCREATE --------------------------------------------------"
  57. pvcreate "${DEVICE}1"
  58. echo "VGCREATE --------------------------------------------------"
  59. vgcreate localDisk "${DEVICE}1"
  60. if [ "${SWAP_SIZE}" != 0 ] ; then
  61. echo "LVCREATE SWAP --------------------------------------------------"
  62. lvcreate -W n -C y -L "${SWAP_SIZE}G" localDisk -n swap
  63. echo "MKSWAP --------------------------------------------------"
  64. mkswap /dev/localDisk/swap
  65. fi
  66. if [ "${CONDOR_SIZE}" != 0 ] ; then
  67. echo "LVCREATE CONDOR --------------------------------------------------"
  68. lvcreate -W n -L "${CONDOR_SIZE}G" localDisk -n condor
  69. echo "MKFS CONDOR --------------------------------------------------"
  70. mkfs.ext4 /dev/localDisk/condor
  71. fi
  72. if [ "${TEMP_SIZE}" != 0 ] ; then
  73. echo "LVCREATE TEMP --------------------------------------------------"
  74. lvcreate -W n -L "${TEMP_SIZE}G" localDisk -n tempdir
  75. echo "MKFS TEMP --------------------------------------------------"
  76. mkfs.ext4 /dev/localDisk/tempdir
  77. fi
  78. if [ "${VM_SIZE}" != 0 ] ; then
  79. echo "LVCREATE CALCOLO --------------------------------------------------"
  80. lvcreate -W n -L "${VM_SIZE}G" localDisk -n calcolo
  81. fi