Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

3 года назад
Открыть в
Подбиваю хвосты уходящего года. Есть одиночный гипервизор, где изначально не оптимальным образом распределили дисковое пространство. Точнее, неправильно предсказали потребление разных виртуалок. В итоге через некоторое время сложилась ситуация, когда в одной осталось много лишнего места, а в другой недостаток. Виртуалки на дефолтных разбиениях дисков в Centos 7: корневой раздел под lvm, отдельно /boot и xfs поверх них. Как известно, файловая система xfs не поддерживает уменьшение размера. Мне пришлось переносить систему с сохранением всей структуры дисков, просто уменьшив размер корня. Делал это так. 1️⃣ Добавил в систему новый диск /dev/sdb меньшего размера. Разбил через fdisk также, как текущий sda: sdb1 - /boot, sdb2 - lvm. 2️⃣ Создал новую группу томов и логический раздел под новый корень. # pvcreate /dev/sdb2 # vgcreate vg_root /dev/sdb2 # lvcreate -n lv_root -l +100%FREE /dev/vg_root Создал файловые системы: # mkfs.xfs /dev/vg_root/lv_root # mkfs.xfs /dev/sdb1 3️⃣ Смонтировал новые разделы и скопировал туда данные с текущих: # mount /dev/vg_root/lv_root /mnt # mount /dev/sdb1 /mnt/boot # xfsdump -J - /dev/centos/root | xfsrestore -J - /mnt # xfsdump -J - /dev/sda1 | xfsrestore -J - /mnt/boot /dev/centos/root - текущий корневой логический раздел. 4️⃣ Зашёл в окружение chroot нового корня: # for i in /proc/ /sys/ /dev/ /run/ ; do mount --bind $i /mnt/$i; done # chroot /mnt/ Обновил загрузчик и заменил в текущем раздел centos/root на vg_root/lv_root. # grub2-mkconfig -o /boot/grub2/grub.cfg # mcedit /boot/grub2/grub.cfg Руками сделал автозамену centos/root на vg_root/lv_root. # grub2-install /dev/sdb Также в /etc/fstab надо изменить UUID или имена устройств на новые. Раздел /boot лучше указать по UUID устройства /dev/sdb1, а корень как /dev/vg_root/lv_root. После этого вышел из chroot и перезагрузил систему, отключив старый диск. У меня она не загрузилась, вывалившись в grub rescue. Я не понял, почему. Тем не менее, в grub rescue я указал раздел с /boot и вручную дал команду на загрузку. Система загрузилась. Уже в ней ещё раз сделал: # grub2-install /dev/sdb и после этого система стала нормально перезагружаться. Возможно где-то ошибся, когда с загрузчиком работал. Это не пошаговое руководство, потому что я его не отлаживал. Написал по памяти, когда уже закончил. Рассказал просто саму идею. ❗️Если будете повторять, то потренируйтесь сначала на тестовых виртуалках. Я подобные манипуляции делал много раз, на разных ОС, разделах и файловых системах, начиная ещё с Freebsd (моя самая первая статья на сайте). Идея везде примерно одинаковая, разница в нюансах. Нужно более ли менее понимать, что делать, если система совсем не грузится, если грузится grub, но не загружается ОС, если загружается ОС, но падает в emergency mode. В Linux в плане загрузки всё последовательно и чаще всего понятно, где проблема. Это не Windows, которая если падает при загрузке, то начинается какое-то шаманство, чтобы понять, в чём проблема. #linux