GNU/Linux >> Belajar Linux >  >> Linux

Ubah ukuran partisi menjadi maksimal menggunakan parted dalam mode non-interaktif

PETUNJUK:skrip ini kompatibel dengan parted v3+ OOTB, jika Anda memiliki parted 2, Anda perlu mengubah parted resizepart ke parted resize

mari masukkan ini ke dalam skrip, perintah acualy adalah onliner, kami hanya menambahkan lebih banyak lagi untuk memastikan 2 parameter pertama disetel:

#!/bin/bash
set -e

if [[ $# -eq 0 ]] ; then
    echo 'please tell me the device to resize as the first parameter, like /dev/sda'
    exit 1
fi


if [[ $# -eq 1 ]] ; then
    echo 'please tell me the partition number to resize as the second parameter, like 1 in case you mean /dev/sda1 or 4, if you mean /dev/sda2'
    exit 1
fi

DEVICE=$1
PARTNR=$2
APPLY=$3

fdisk -l $DEVICE$PARTNR >> /dev/null 2>&1 || (echo "could not find device $DEVICE$PARTNR - please check the name" && exit 1)

CURRENTSIZEB=`fdisk -l $DEVICE$PARTNR | grep "Disk $DEVICE$PARTNR" | cut -d' ' -f5`
CURRENTSIZE=`expr $CURRENTSIZEB / 1024 / 1024`
# So get the disk-informations of our device in question printf %s\\n 'unit MB print list' | parted | grep "Disk /dev/sda we use printf %s\\n 'unit MB print list' to ensure the units are displayed as MB, since otherwise it will vary by disk size ( MB, G, T ) and there is no better way to do this with parted 3 or 4 yet
# then use the 3rd column of the output (disk size) cut -d' ' -f3 (divided by space)
# and finally cut off the unit 'MB' with blanc using tr -d MB
MAXSIZEMB=`printf %s\\n 'unit MB print list' | parted | grep "Disk ${DEVICE}" | cut -d' ' -f3 | tr -d MB`

echo "[ok] would/will resize to from ${CURRENTSIZE}MB to ${MAXSIZEMB}MB "

if [[ "$APPLY" == "apply" ]] ; then
  echo "[ok] applying resize operation.."
  parted ${DEVICE} resizepart ${PARTNR} ${MAXSIZEMB}
  echo "[done]"
else
  echo "[WARNING]!: Sandbox mode, i did not size!. Use 'apply' as the 3d parameter to apply the changes"
fi

penggunaan

Simpan skrip di atas sebagai resize.sh dan membuatnya dapat dieksekusi

# resize the fourth partition to the maximum size, so /dev/sda4
# this is no the sandbox mode, so no changes are done
./resize.sh /dev/sda 4

# apply those changes
./resize.sh /dev/sda 4 apply

Misalnya, jika Anda memiliki vg vgdata dengan lv 'data' di /dev/sdb1 saat menggunakan LVM, keseluruhan cerita akan terlihat seperti

./resize.sh /dev/sdb 1 apply
pvresize /dev/sdb1
lvextend -r /dev/mapper/vgdata-data -l 100%FREE

Itu saja, volume logis yang diubah ukurannya termasuk sistem file yang diubah ukurannya ( -r ) - semuanya selesai, periksa dengan df -h :)

Penjelasan

Apa yang kami gunakan untuk menemukan ukuran disk adalah

resizepart ${PARTNR} `parted -l | grep ${DEVICE} | cut -d' ' -f3 | tr -d MB

a) Jadi dapatkan informasi disk dari perangkat kami yang dimaksud printf %s\\n 'unit MB print list' | parted | grep "Disk /dev/sda kami menggunakan printf %s\\n 'unit MB print list' untuk memastikan unit ditampilkan sebagai MB, karena jika tidak maka unit akan bervariasi berdasarkan ukuran disk ( MB, G, T ) dan belum ada cara yang lebih baik untuk melakukan ini dengan bagian 3 atau 4

b) kemudian gunakan kolom ke-3 dari output (ukuran disk) cut -d' ' -f3 (dibagi dengan spasi)

c) dan terakhir potong unit 'MB' dengan blanc menggunakan tr -d MB

Tindak lanjut

Saya menerbitkan skrip di https://github.com/EugenMayer/parted-auto-resize jadi jika ada yang ingin meningkatkan fitur, gunakan permintaan tarik di sana (apa pun yang tidak termasuk dalam cakupan pertanyaan ini)


Linux
  1. Partisi drive di Linux dengan GNU Parted

  2. Ubuntu – Amankah Mengubah Ukuran Partisi Di /?

  3. Cara Mengubah Ukuran Partisi LVM Di Dalam Partisi yang Diperpanjang

  1. Cara Menghapus Partisi Disk menggunakan Parted Command

  2. Ubah ukuran langsung dari partisi GPT di Linux

  3. Instal CentOS 7 menggunakan mode teks

  1. Cara Membuat Partisi di Linux untuk Ukuran 2TB menggunakan Parted GPT

  2. Partisi GPT yang dapat ditulis menggunakan parted

  3. fdisk - partisi dalam satu baris