VMware, Linux: уменьшение размера диска с логическими томами

Нет ничего более постоянного, чем временное. Когда я делал тестовую машинку, чтобы настроить на ней почтовый обменник, в дальнейших планах было установить чистую Linux (RHEL) на виртуалку и перенести на нее готовую конфигурацию. Однако после того, как мы с помощью VMware Converter успешно сконвертировали в виртуалку машину с сайтом (по сути, потом пришлось только восстановить загрузчик), мы решили продолжить эту практику и поступили так же с почтовым обменником.

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

С уменьшением обычно бывает сложнее, чем с увеличением. Итак, мы имеем большой диск (файл .vmdk), на котором находится группа LVM-разделов VolGroup00. Том, который нужно уменьшить — LogVol00.  Для него 20 Гб кажется разумным размером. Прежде всего добавляем виртуальной машине второй диск (я сделал 22 Гб с учетом места под swap с запасом). Исходный диск мы позднее отключим и удалим, а сейчас неплохо было бы сделать его резервную копию на случай, если что-то пойдет не так.

Дальше нужно с чего-нибудь загрузиться — например, с установочного диска Linux (при загрузке набрать linux rescue). При этом следует отказаться от монтирования файловой системы.

Получив командную строку, смотрим, что у нас есть:

lvm vgscan

Активируем группу томов; без этого ничего не сделать с файловой системой:

lvm vgchange --available y VolGroup00

Проверяем, что получилось (искомое состояние — ACTIVE):

lvm lvscan

Проверяем раздел на наличие ошибок и исправляем их, если таковые имеются:

e2fsck -f /dev/VolGroup00/LogVol00

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

resize2fs /dev/VolGroup00/LogVol00 20G

Проверяем еще раз:

e2fsck -f /dev/VolGroup00/LogVol00

Теперь можно уменьшить размер тома:

lvm lvreduce -L 20G /dev/VolGroup00/LogVol00

Не забываем, что у нас есть еще LogVol01, где находится swap, а расположен он в конце диска. Поэтому придется его удалить и снова создать. Посмотрим, какой у него размер:

lvm lvs

Допустим, у нас 512 Мб. Тогда делаем так:

lvm lvremove /dev/VolGroup00/LogVol01
lvm lvcreate --size 512M --name LogVol01 VolGroup00
mkswap /dev/VolGroup00/LogVol01

Далее уменьшаем физический том:

lvm pvresize /dev/sda2 --setphysicalvolumesize 22G

И немного поработаем с fdisk. Предположим, наши разделы находятся на /dev/hda.

fdisk /dev/hda

Вводим команду p:

Command (m for help): p

Disk /dev/hda: 23.6 GB, 23622320128 bytes
255 heads, 63 sectors/track, 2871 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot    Start      End      Blocks   Id  System
/dev/hda1   *         1       13      104391   83  Linux
/dev/hda2            14     2871    22956885   8e  Linux LVM

Мы видим, что на диске 2871 цилиндр, но в последней строчке вместо 2871 будет другое, большее число. Чтобы исправить это, удалим раздел 2 и создадим его снова: вводим команду d, затем 2. Создаем новый: n, p — основной, 2 — номер, дальше можно два раза нажать Enter, чтобы принять значения по умолчанию: 14 — начало, 2871 (максимальный номер цилиндра, у вас может быть другое число). Устанавливаем тип раздела LVM: t,  2, 8e. Еще раз посмотрим командой p, все ли в порядке. Если да, записываем изменения — w и выходим — q.

Теперь нужно перезагрузиться. Не помешает еще раз проверить том:

lvm vgchange --available y VolGroup00
e2fsck -f /dev/VolGroup00/LogVol00

Осталось все скопировать со старого диска на новый. Если новый диск — /dev/hdc, команда будет выглядеть так:

dd if=/dev/hda of=/dev/hdc

Это длительная операция, прогресс здесь не отображается и нужно потерпеть. Ошибка в конце, связанная с нехваткой места — нормальное явление.

После выключения машины можно удалить в клиенте VMware старый диск, оставив на его месте  новый.

Источники вдохновения:

  1. http://fedorasolved.org/Members/zcat/shrink-lvm-for-new-partition
  2. http://www.linuxquestions.org/questions/linux-newbie-8/lvm-shrinking-root-filesystem-327292/
  3. http://www.linuxquestions.org/questions/fedora-35/lvm-partition-resizing-666683/