Как отключить жесткий диск от LVM в Linux?

LVM очень хорош. Но бывают ситуации, когда нужно освободить один HDD от LVM и вытащить его из сервера. Вроде простая задача, но все инструкции в интернете не дают полного понимая, как запустить этот процесс и успешно его выполнить.


У меня в LVM находятся разделы 4 HDD-дисков:

  • /dev/sdb1 — на 1.8Tb;
  • /dev/sdc1 — на 1.8Tb;
  • /dev/sde1 — на 3.7Tb;
  • /dev/sdg1 — на 3.7Tb.

Все диски образуют один большой раздел 1.8Tb + 1.8Tb + 3.7Tb + 3.7Tb = 11Tb. Общий виртуальный диск примонтирован к директории /mnt/lvm.

Увидеть какие диски задействованы в LVM можно командой pvs:

sudo pvs
  PV         VG  Fmt  Attr PSize  PFree
  /dev/sdb1  vg1 lvm2 a--  <1.82t      0
  /dev/sdc1  vg1 lvm2 a--  <1.82t      0
  /dev/sdf1  vg1 lvm2 a--  <3.64t      0
  /dev/sdп1  vg1 lvm2 a--  <3.64t      0

Мне нужно забрать из LVM /dev/sdg (3,7Tb) и оставить работоспособную LVM после себя.

Освобождаем место

Для начала нужно удостовериться, что общий размер данных меньше, чем оставшееся место. Если нам нужно освободить от LVM жесткий диск емкостью 3.7Tb, то свободное место lvm-раздела должно быть чуть больше этого значения. К примеру 4Tb ровно.

Отмонтируем раздел

С примонтированным разделом Вы не сможете ничего сделать:

sudo umount /dev/mapper/vg1-lv1

Проверяем диск на ошибки

Это обязательный шаг. Если его не сделать, то последующие команды, Вам об этом скажут и не будут ничего делать.

sudo e2fsck -f /dev/mapper/vg1-lv1
e2fsck 1.44.5 (15-Dec-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/vg1-lv1: 79/732561408 files (1.3% non-contiguous), 1826441394/2930245632 blocks

Изменяем размер файловой системы

Это самый долгий процесс. У меня он занял 20 часов. Команда ниже уменьшает раздел ФС на все доступное дисковое пространство:

sudo resize2fs -p -M /dev/mapper/vg1-lv1
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/mapper/vg1-lv1 to 1812442798 (4k) blocks.
Begin pass 2 (max = 920643536)
Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 89424)
Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/mapper/vg1-lv1 is now 1812442798 (4k) blocks long.

Где:

  • -p — это псевдо-графический прогресс работы. Полоска из тире должна заполниться Х и процесс будет завершен. Это важный параметр, так как процесс может занимать очень продолжительное время.
  • -M — позволяет уменьшить раздел на все свободное пространство.

Данные никуда не исчезнут. Даже если что-то пойдет не так и процесс аварийно завершиться, данные останутся на месте. В этом случае, Вам нужно повторно проверить диск на ошибки и заново запустить процесс.

Уменьшаем раздел

Уменьшаем размер раздела lvm-диска. В итоге наш «освобождаемый» жесткий диск 3.7Tb, нам нужно отрезать немного больше. 4Tb в самый раз:

sudo lvresize -L -4T /dev/mapper/vg1-lv1
  WARNING: Reducing active logical volume to <6.92 TiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv1? [y/n]: y
  Size of logical volume vg1/lv1 changed from <10.92 TiB (357696 extents) to <6.92 TiB (226624 extents).
  Logical volume vg1/lv1 successfully resized.

Система предупреждает, что процесс необратим. Мы смело на это соглашаемся.

На всякий случай привожу команду, которая расширяет раздел на всю доступную файловую систему:

sudo lvextend -l+100%FREE /dev/mapper/vg1-lv1
sudo resize2fs /dev/mapper/vg1-lv1

Она нужна, если Вы случайно отрезали больше.

Изменяем размер файловой системы до раздела

Размер файловой системы и размер раздела теперь не совпадают. Чтобы место не пропадало попусту, изменяем размер файловой системы до размера раздела:

sudo resize2fs -p /dev/mapper/vg1-lv1
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/mapper/vg1-lv1 to 1856503808 (4k) blocks.
The filesystem on /dev/mapper/vg1-lv1 is now 1856503808 (4k) blocks long.

Перемещаем данные с физического диска

Данные lvm-раздела могут храниться на всех дисках, поэтому необходимо перенести данные с раздела диска, который нужно освободить:

sudo pvmove /dev/sdg1
  No data to move for vg1.

В данном примере все данные размещаются на остальных дисках. Освобождаемый диск не используется.

Исключаем диск из LVM

sudo  vgreduce vg1 /dev/sdg1
  Removed "/dev/sdg1" from volume group "vg1"

Стираем метаданные с диска

Чтобы диском пользоваться с максимальной эффективностью, удаляем все таблицы LVM с его поверхности:

sudo pvremove /dev/sdg1
  Labels on physical volume "/dev/sdg1" successfully wiped.

Проверяем результат

Запустив команду pvs мы можем увидеть, что наш LVM существует без /dev/sdg1:

sudo pvs
  PV         VG  Fmt  Attr PSize  PFree
  /dev/sdb1  vg1 lvm2 a--  <1.82t      0
  /dev/sdc1  vg1 lvm2 a--  <1.82t      0
  /dev/sdf1  vg1 lvm2 a--  <3.64t 370.00g

Теги: и

Комментарии




В качестве аватарки используется сервис - gravatar.com



IT-событие
День запуска Ethereum
День запуска Ethereum