изменить размер / сжать корневую файловую систему с помощью grub2 (то есть до ее монтирования)

629
Martin Vincent

Контекст:

  • несколько удаленных 32-битных серверов Debian 7
  • доступно только через SSH
  • больше половины дисков пусто
  • 1 раздел диска на сервер
  • небольшое окно обслуживания, не может быть долго
  • файловые системы ext4
  • ПРИМЕЧАНИЕ. Я занимаюсь разработкой своего решения с использованием виртуальной машины VirtualBox, но серверы работают без проблем.

Цель: обновить операционную систему до Debian 9+ неразрушающим способом, поскольку в идеале машина должна оставаться в рабочем состоянии до перезагрузки в новую ОС.


Итак, для каждого сервера я планирую (другие предложения приветствуются) сделать следующее:

  1. Сократите текущие root-файлы deb 7 с помощью resize2fs до размера, немного меньшего 1/2 размера раздела
  2. Сократите раздел, чтобы очистить половину диска
  3. Разбейте освободившееся пространство (/, / home, swap) и установите LVM2
    (создайте VG, LV и т. Д.) И Debian 9

Моя проблема в том, что resize2fs может только сжать ext4 fs, если он отключен. Поэтому идея состоит в том, чтобы использовать образ initrd или initramfs для вызова resize2fs на размонтированном / dev / sda1 во время последовательности загрузки GRUB2.

Я создал свой собственный образ initrd, содержащий статический двоичный файл resize2fs и сценарий оболочки, который его вызывает (и выполняет другие проверки и т. Д.), Но мне кажется, что я наткнулся на препятствие, пытаясь записать правильную запись в файл grub.cfg, чтобы сделать он монтирует мой образ initrd и выполняет сценарий изменения размера на размонтированном / dev / sda1.

Итак, мой вопрос :

Какой пункт меню grub.cfg мне нужно написать, чтобы загрузить мой собственный образ initrd, содержащий мой скрипт /bin/resize.sh, а затем выполнить его (/bin/resize.sh)?

2
То, что я сделал ранее (и, возможно, рискованно?), Настроил временную минимальную файловую систему на виртуальном диске и установил на нее pivot_root, что позволило размонтировать диск без потери доступа по SSH. Использовал его раньше, чтобы полностью изменить тип корневой файловой системы, поэтому сжатие должно работать. Если вы хотите пойти по этому пути, дайте мне знать, и я могу написать это утром. Bob 6 лет назад 0
Кроме того, какой бы метод вы ни использовали, я бы рекомендовал убедиться, что у вас есть резервные копии, которые обновляются и восстанавливаются на случай, если произойдет худшее. Bob 6 лет назад 0
Привет @Bob, действительно, я читал об использовании [техники pivot_root] (http://www.ivarch.com/blogs/oss/2007/01/resize-a-live-root-fs-a-howto.shtml), но Я чувствовал, что это было немного более рискованным и сложным (много шагов), чем просто изменение размера из grub (т.е. перед монтированием каких-либо разделов). Я пытаюсь сделать это относительно простым и также пригодным для сценариев (то есть: автоматическое выполнение, если это возможно). Тем не менее, я определенно был бы заинтересован в получении более подробной информации о выбранном вами пути. Заранее спасибо. Martin Vincent 6 лет назад 0
Ах, я нашел [тот, который я основал на своем] (https://unix.stackexchange.com/a/227318/33227), который является довольно всеобъемлющим руководством (и работает над настройками systemd, в отличие от того, который вы связали). Единственной модификацией, которую я сделал, было создание временного корня с помощью `debootstrap`, а не` cp`запись существующих файлов. Для моих целей было полезно иметь интерактивную оболочку, потому что моя установка состояла из множества шагов, а также для тестирования / проверки перед перезагрузкой. Но, конечно, если вы предпочитаете автоматизировать его с помощью initrd, который одинаково действителен - я не могу помочь с этим напрямую, хотя, извините. Bob 6 лет назад 0
Еще раз спасибо @Bob за ваш ответ. Мне удалось заставить его работать с помощью initrd, выполнив примерно следующие шаги: 1.создать файл образа initrd (разархивировать в ~ / initrd существующий, добавить несколько файлов) и разархивировать с помощью: `debian7-32bits: ~ / initrd # find , | cpio -o -H newc | gzip -9> /boot/initrd.img-3.2.0-5-486-resize2fs `2.создать запись в` / boot / grub / grub.cfg` примерно так: `menuentry" run_once_resize_fs " ` Martin Vincent 6 лет назад 1
Рад слышать это! Я должен помнить об этом в следующий раз, когда захочу удаленно изменить существующую файловую систему. Если бы вы могли ответить на свой вопрос ниже, это было бы здорово :) Bob 6 лет назад 0

0 ответов на вопрос