Как сделать скрипт parted для изменения размера раздела на работающей корневой файловой системе?
У меня есть шаблон виртуальной машины, который я использую для создания других виртуальных машин, используя virt-clone / KVM. Шаблон VM составляет 4 ГБ для экономии места. Хранилище для виртуальных машин, которое я создаю из этого, находится на целевых объектах iSCSI или томах LVM (в зависимости от функции), а размеры их файловых систем различаются в зависимости от роли компьютера.
После создания новой виртуальной машины из шаблона мне нужно изменить размер корневого раздела, если я создаю что-то, что потребует более 4 ГБ диска. Это прекрасно работает при интерактивном использовании parted, но не по сценарию. При попытке удалить файловую систему меня спрашивают, хочу ли я продолжить, несмотря на использование '-s'
Вывод ниже показывает неудачную попытку сценария и рабочий интерактивный сеанс для достижения этой цели.
Каков наилучший способ изменить размер моего пост-клона корневого раздела, который можно просто написать по сценарию?
Неудачная попытка скрипта
Раздел после клонирования
# parted /dev/vda p
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 4294MB 4293MB primary ext4 boot
Попытка удаления скрипта
# parted /dev/vda -s rm 1
Warning: Partition /dev/vda1 is being used. Are you sure you want to continue?
#
Раздел после неудачного удаления
# parted /dev/vda p
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 4294MB 4293MB primary ext4 boot
Работает интерактивное изменение размера (с последующей перезагрузкой)
Раздел перед удалением
# parted /dev/vda p
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 4294MB 4293MB primary ext4 boot
Удаление и создание нового раздела, который использует весь диск
# parted /dev/vda
(parted) rm 1
Warning: Partition /dev/vda1 is being used. Are you sure you want to continue?
Yes/No? y
Error: Partition(s) 1 on /dev/vda have been written, but we have been unable to
inform the kernel of the change, probably because it/they are in use. As a
result, the old partition(s) will remain in use. You should reboot now before
making further changes.
Ignore/Cancel? I
(parted) mkpart p ext4 1 -1
(parted)
# parted /dev/vda p
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 10.7GB 10.7GB primary ext4
Изменение размера файловой системы
# resize2fs /dev/vda1
resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/vda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vda1 is now 2621184 blocks long.
# df -kh .
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 9.8G 1.6G 7.9G 17% /
1 ответ
Я понял, как это сделать. Ключом является kpartx, чтобы сделать LVM пригодным для использования, разделившись вне виртуальной машины (так же на хосте гипервизора). Затем вы изменяете размер раздела, затем загружаете гостя и увеличиваете файловую систему.
Поэтому, если у вас есть гость с именем TESTVM, чье хранилище находится в /dev/VMS/VIRT-TESTVM, вы должны сделать следующее на хосте гипервизора:
# kpartx -a /dev/VMS/VIRT-TESTVM
# parted /dev/VMS/VIRT-TESTVM rm 1
# parted /dev/VMS/VIRT-TESTVM mkpart -a optimal p ext4 0% 100%
# kpartx -d /dev/VMS/VIRT-TESTVM
Затем просто запустите машину, войдите и сделайте
# resize2fs /dev/vda1
Перезагрузитесь снова, чтобы быть в безопасности.