Нет ничего более постоянного, чем временное. Когда я делал тестовую машинку, чтобы настроить на ней почтовый обменник, в дальнейших планах было установить чистую 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 старый диск, оставив на его месте новый.
Источники вдохновения: