Categories: Шпаргалки

Как уменьшить корневой раздел XFS на LVM

Каждый, кто сталкивался с задачей уменьшения XFS знает, что нет штатного решения это сделать. Для изменения размера в меньшую сторону нужно сдампить во временный раздел содержимое текущего и поменять точку монтирования. Затем уменьшить исходный раздел, сдампить уже временный раздел в новый исходный, вернуть точку монтирования.

Данные операции проще сделать, если это раздел с данными и есть возможность отмонировать его в процессе работы операционной системы. Однако, при работе с корневым разделом, это сделать сложнее. Рассмотрим, как это делается.

Хочу обратить внимание, что данная операция крайне опасна — любое неверное действие или нюанс в ранней настройке операционной системы приведет к падению системы без возможности загрузки. Перед началом работы стоит обкатать действия на тестовой машине.

Описание процесса

План действий такой:

  1. Создаем временный раздел XFS на новом томе LVM. Переносим корневой раздел на временный том и загружаемся с него.
  2. Уменьшаем исходный том до нужного размера, возвращаем на него данные. Загружаемся с нового раздела.
  3. Удаляем временный том.

В нашем примере будут такие разделы:

lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 9G 0 part
vg-root 253:0 0 8G 0 lvm /
vg-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 8G 0 disk

* в данном примере корневой раздел находится на физическом диске sda и его разделе sda2 .

Мы попробуем уменьшить раздел с 8 Гб до 6. Диск sdb будем использовать как временный.

Подготовка

Для решения нашей задачи нам понадобятся две утилиты — установим их.

а) если используем CentOS / Red Hat :

yum install lvm2 xfsdump

б) если используем Ubuntu / Debian :

apt-get install lvm2 xfsdump

Затем рекомендую сделать резервную копию всех важных данных, которые находятся на компьютере. Также стоит выбрать подходящее время для работы, например, в выходные (чтобы было время настроить компьютер или сервер по новой, в случае неудачи).

1. Загрузка с временного раздела

Подготовим временный раздел для корневого тома:

pvcreate /dev/sdb

vgcreate vg_tmp_root /dev/sdb

lvcreate -n lv_tmp_root -l +100%FREE /dev/vg_tmp_root

* данными командами мы создали группу томов vg_tmp_root и сделали из нее один логический раздел lv_tmp_root .

Создадим файловую систему XFS и смонтируем ее в каталог /mnt:

mkfs.xfs /dev/vg_tmp_root/lv_tmp_root

mount /dev/vg_tmp_root/lv_tmp_root /mnt

Смотрим расположение корневого раздела командой:

lvdisplay


— Logical volume —
LV Path /dev/vg/root
LV Name root
VG Name vg

Находим среди результатов корневой раздел — нам нужен параметр LV Path .

Сдампим содержимое текущего корневого раздела в наш временный:

xfsdump -J — /dev/vg/root | xfsrestore -J — /mnt

* где /dev/vg/root — то, что мы получили в параметре LV Path командой lvdisplay ; /mnt — каталог, в который мы смонтировали наш временный раздел.

Заходим в окружение chroot нашего временного корня:

for i in /proc/ /sys/ /dev/ /run/ /boot/; do mount —bind $i /mnt/$i; done

chroot /mnt/

Запишем новый загрузчик:

grub2-mkconfig -o /boot/grub2/grub.cfg

Обновляем образы загрузки:

cd /boot ; for i in `ls initramfs-*img`; do dracut -v $i `echo $i|sed «s/initramfs-//g; s/.img//g»` —force; done

Открываем конфигурационный файл grub:

vi /boot/grub2/grub.cfg

Меняем все значения, которые задействуют старый том lvm — в моем случае, все совпадения:


… lv=vg/root …

… менялись на:


… lv=vg_tmp_root/lv_tmp_root …

* так как у меня корневой раздел был в группе vg и имел название root (команда lvdisplay), то под замену попадает vg/root . В вашем случае это будет другое значение.

Этот момент крайне важен. Неправильное редактирование приведет к невозможности загрузки.

Выходим из окружения chroot и перезагружаем компьютер:

exit

shutdown -r now

… мы должны загрузиться с временного раздела:

lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 9G 0 part
vg-swap 253:1 0 1G 0 lvm [SWAP]
vg-root 253:2 0 8G 0 lvm
sdb 8:16 0 8G 0 disk
vg_tmp_root-lv_tmp_root 253:0 0 8G 0 lvm /

* как видим, теперь корневой раздел на sdb .

2. Уменьшаем раздел и возвращаем с него загрузку

И так, у нас есть раздел, который нужно уменьшить и который теперь не примонтирован в качестве корня.

Удаляем его логический том:

lvremove /dev/vg/root

* напомню, что /dev/vg/root используется в конкретном случае и данный путь нужно подставить свой.

На запрос:

Do you really want to remove active logical volume vg/root? [y/n]:

… отвечаем утвердительно — y ;

Создаем новый логический том меньшего размера:

lvcreate -n root -L 6G vg

* мы создали новый том LVM со старым именем root в группе томов vg .

На предупреждение:

WARNING: xfs signature detected on /dev/vg/root at offset 0. Wipe it? [y/n]:

… отвечаем утвердительно — y ;

Создаем на нем файловую систему и монтируем его:

mkfs.xfs /dev/vg/root

mount /dev/vg/root /mnt

Возвращаем обратно содержимое корня:

xfsdump -J — /dev/vg_tmp_root/lv_tmp_root | xfsrestore -J — /mnt

Заходим в окружение chroot нашего временного корня:

for i in /proc/ /sys/ /dev/ /run/ /boot/; do mount —bind $i /mnt/$i; done

chroot /mnt/

Запишем новый загрузчик:

grub2-mkconfig -o /boot/grub2/grub.cfg

Обновляем образы загрузки:

cd /boot ; for i in `ls initramfs-*img`; do dracut -v $i `echo $i|sed «s/initramfs-//g; s/.img//g»` —force; done

Открываем конфигурационный файл grub:

vi /boot/grub2/grub.cfg

Проверяем все значения, которые задействуют старый том lvm — в моем случае должны быть:


… lv=vg/root …

* так как у меня корневой раздел в группе vg и имеет название root (команда lvdisplay), то корневой раздел имеет точку монтирования lvm vg/root . В вашем случае это будет другое значение.

Выходим из окружения chroot и перезагружаем компьютер:

exit

shutdown -r now

… мы должны загрузиться с нашего уменьшенного раздела:

lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 9G 0 part
vg-root 253:0 0 6G 0 lvm /
vg-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 8G 0 disk
vg_tmp_root-lv_tmp_root 253:2 0 8G 0 lvm

* как видим, корневой раздел вернулся назад и его размер уменьшен.

3. Удаление временного тома

Для порядка, вернем прежнее состояние без временного тома.

Удаляем том, группу и снимаем lvm-метку с диска, который нами использовался как временный (sdb):

lvremove /dev/vg_tmp_root/lv_tmp_root

Do you really want to remove active logical volume vg_tmp_root/lv_tmp_root? [y/n]: y

vgremove vg_tmp_root

pvremove /dev/sdb

admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

4 дня ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

4 дня ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

4 дня ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

4 дня ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

4 дня ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

4 дня ago