Неделя восстановления: Работа с LVM в режиме Rescue
11.12.2007

LVM (Logical Volume Management) — это абстрактный уровень представления логических разделов жесткого диска. Он используется, когда при установке Fedora вы выбираете разбиение дисков по-умолчанию. LVM позволяет вам увеличивать и уменьшать размеры разделов, расширять существующие разделы за счет новых устройств, переносить разделы с одного устройства на другое, причем все это можно делать при работающей системе. Программа system-config-lvm предоставляет удобный графический интерфейс для выполнения всех этих операций.

Однако, вы не можете увеличивать размер раздела, когда он примонтирован. Это ограничение не только LVM, а практически всех файловых систем, включая ext3. Для того, чтобы увеличить размер корневого раздела, необходимо загрузиться с другого источника, например, в режиме rescue (смотри вчерашнюю статью). Этот режим также нужно использовать при восстановлении данных с очень сильно испорченного диска.

Для создания LVM или изменения размера разделов из режима rescue, загручитесь с установочного диска Fedora, в процессе загрузки ответив Skip на вопрос, надо ли подмонтировать найденные разделы. К сожалению, это будет означать, что ваши группы разделов не будут найдены системой автоматически, и вам нужно будет подключить их вручную.

Команды для управления логическими разделами жесткого диска, такие, как vgdisplay, pvcreate и lvreduce есть не что иное, как просто символические ссылки на единственную программу lvm. Поэтому эти программы не будут работать в rescue-режиме, однако вместо них можно просто использовать lvm с нужными параметрами, например, для вызова vgscan наберите lvm vgscan.

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

sh-3.2# lvm vgscan
Reading all physical volumes. This may take a while...
Found volume group "VolGroup00" using metadata type lvm2
sh-3.2# lvm vgchange -ay
2 logical volume(s) in volume group "VolGroup00" now active

Можно просмотреть информацию о ваших логических дисках, набрав lvm lvs (или lvm lvdisplay для большей информации):

sh-3.2# lvm lvs
LV VG Attr LSize Origin Snap% Move Log Copy%
LogVol00 VolGroup00 -wi-a- 28.66G
LogVol01 VolGroup00 -wi-a- 992.00M

Обратите внимание на что, что имена LV и VG не удобны в использовании, поэтому при установке лучше их сменить на что-то более запоминающееся. В данном случае мы знаем размеры наших разделов, поэтому можем точно сказать, что корневой раздел — это LogVol00 в VolGroup00.

Собрав эту информацию, вы можете осуществить проверку (fsck) файловой системы, уменьшить размер файловой системы, после чего можно уменьшить размер самих логических дисков. Чтобы избежать ошибок, лучше уменьшить файловую систему до размера, заведомо меньшего, чем будет размер раздела, потом уменьшить раздел, после чего растянуть файловую систему на весь раздел:

sh-3.2# e2fsck -f /dev/VolGroup00/LogVol00
e2fsck 1.40.2 (12-Jul-2007)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking refernce counts
Pass 5: Checking group summary information
/dev/VolGroup00/LogVol00: 122967/7514560 files (0.9% non-contiguous), 1113272/7512064 blocks

sh-3.2# resize2fs /dev/VolGroup00/LogVol00 19G
resize2fs 1.40.2 (12-Jul-2007)
Resizing the filesystem on /dev/VolGroup00/LogVol00 to 4980736 (4k) blocks.
The filesystem on /dev/VolGroup00/LogVol00 is now 4980736 blocks long.

sh-3.2# lvm lvresize VolGroup00/LogVol00 --size 20G
WARNING: Reducing active logical volume to 20.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce LogVol00? [y/n]: y
Reducing logical volume LogVol00 to 20.00 GB
Logical volume LogVol00 successfully resized

sh-3.2# resize2fs /dev/VolGroup00/LogVol00
resize2fs 1.40.2 (12-Jul-2007)
Resizing the filesystem on /dev/VolGroup00/LogVol00 to 5242880 (4k) blocks.
The filesystem on /dev/VolGroup00/LogVol00 is now 5242880 blocks long.

Обратите внимание на то, что все операции, следующие за resize2fs, нет необходимости делать из rescue режима — можно загрузиться в обычную систему и делать все там. В ранних версиях Fedora при загрузке в rescue не создаются символические ссылки в /dev/VolumeGroup/LogicalVolume, но вместо них можно обращаться к /dev/mapper/VolumeGroup-LogicalVolume (т.е. например /dev/mapper/VolGroup00-LogVol00 вместо /dev/VolGroup00/LogVol00).