Журнал LinuxFormat - перейти на главную

LXF112:LVM

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Новая: == LVM: Виртуальные разделы == : ''Сражаетесь с созданием разделов при установке? Хотели бы файловую систе...)
 
м
Строка 32: Строка 32:
 
Важно, чтобы тип раздела был установлен в 8E (LVM). Будьте осторожны при экспериментах с разделами и томами, не то можно уничтожить
 
Важно, чтобы тип раздела был установлен в 8E (LVM). Будьте осторожны при экспериментах с разделами и томами, не то можно уничтожить
 
ваши данные (все команды даются от имени суперпользователя-root).
 
ваши данные (все команды даются от имени суперпользователя-root).
<pre>#fdisk /dev/sdb
+
<source lang="bash">#fdisk /dev/sdb
 
[… куча ненужных нам строк ...]
 
[… куча ненужных нам строк ...]
 
Command (m for help): n
 
Command (m for help): n
Строка 51: Строка 51:
 
The partition table has been altered!
 
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
 
Calling ioctl() to re-read partition table.
Syncing disks.</pre>
+
Syncing disks.</source>
 
Давайте создадим физический том LVM:
 
Давайте создадим физический том LVM:
<pre>#pvcreate /dev/sdb1
+
<source lang="bash">#pvcreate /dev/sdb1
Physical volume “/dev/sdb1” successfully created</pre>
+
Physical volume “/dev/sdb1” successfully created</source>
 
Теперь можно создать группу томов и назначить ей физический том.
 
Теперь можно создать группу томов и назначить ей физический том.
 
Вы можете дать группе томов любое содержательное имя, но хорошим
 
Вы можете дать группе томов любое содержательное имя, но хорошим
 
решением будет использовать окончание ‘vg’. Это поможет легко идентифицировать файловые системы, находящиеся в ведении LVM.
 
решением будет использовать окончание ‘vg’. Это поможет легко идентифицировать файловые системы, находящиеся в ведении LVM.
<pre>#vgcreate testvg /dev/sdb1
+
<source lang="bash">#vgcreate testvg /dev/sdb1
Volume group “testvg” successfully created</pre>
+
Volume group “testvg” successfully created</source>
 
Чтобы иметь возможность создавать файловые системы, сперва
 
Чтобы иметь возможность создавать файловые системы, сперва
 
нужно создать логический том. Снова, вы можете использовать любое
 
нужно создать логический том. Снова, вы можете использовать любое
 
имя, но я рекомендую добавить ‘lv’ в его конец.
 
имя, но я рекомендую добавить ‘lv’ в его конец.
<pre>#lvcreate -L 20M -n testlv testvg
+
<source lang="bash">#lvcreate -L 20M -n testlv testvg
Logical volume “testlv” created</pre>
+
Logical volume “testlv” created</source>
 
Теперь у вас есть логический том с именем testlv, занимающий
 
Теперь у вас есть логический том с именем testlv, занимающий
 
20 МБ (параметр -L). Он доступен через /dev/testvg/testlv (поняли,
 
20 МБ (параметр -L). Он доступен через /dev/testvg/testlv (поняли,
Строка 70: Строка 70:
 
помните, что не все файловые системы поддерживают расширение
 
помните, что не все файловые системы поддерживают расширение
 
или уменьшение, поэтому мы выберем ext3.
 
или уменьшение, поэтому мы выберем ext3.
<pre>#mkfs.ext3 /dev/testvg/testlv
+
<source lang="bash">#mkfs.ext3 /dev/testvg/testlv
[... куча удаленного ненужного текста …]</pre>
+
[... куча удаленного ненужного текста …]</source>
 
Чтобы пользоваться файловой системой, смонтируем ее где-нибудь: например, в точке монтирования /mnt/test.
 
Чтобы пользоваться файловой системой, смонтируем ее где-нибудь: например, в точке монтирования /mnt/test.
<pre>#mkdir /mnt/test
+
<source lang="bash">#mkdir /mnt/test
#mount /dev/testvg/testlv /mnt/test</pre>
+
#mount /dev/testvg/testlv /mnt/test</source>
 
Так файловая система смонтирована временно. После перезагрузки она исчезнет, и вам придется монтировать ее снова. Если вы хотите
 
Так файловая система смонтирована временно. После перезагрузки она исчезнет, и вам придется монтировать ее снова. Если вы хотите
 
всегда иметь ее под рукой всегда, добавьте соответствующую строку
 
всегда иметь ее под рукой всегда, добавьте соответствующую строку
Строка 91: Строка 91:
 
логического тома (LV size): его значение отражает размер файловой
 
логического тома (LV size): его значение отражает размер файловой
 
системы. Можете попробовать эти команды друг за другом:
 
системы. Можете попробовать эти команды друг за другом:
<pre>#pvdisplay /dev/sdb1
+
<source lang="bash">#pvdisplay /dev/sdb1
 
#vgdisplay testvg
 
#vgdisplay testvg
#lvdisplay /dev/testvg/testlv</pre>
+
#lvdisplay /dev/testvg/testlv</source>
 
А что у нас с файловой системой?
 
А что у нас с файловой системой?
<pre>#df -h /mnt/test
+
<source lang="bash">#df -h /mnt/test
 
Filesystem
 
Filesystem
 
Size Used Avail Use% Mounted on
 
Size Used Avail Use% Mounted on
 
/dev/mapper/testvg-testlv
 
/dev/mapper/testvg-testlv
20M 1.2M 18M 7% /mnt/test</pre>
+
20M 1.2M 18M 7% /mnt/test</source>
 
Вы заметили, что тут неверно? Мы создали и смонтировали файловую систему с /dev/testvg/testlv, а обнаружили, что она смонтирована с /dev/mapper/testvg-testlv. Все так и должно быть. Это нормально
 
Вы заметили, что тут неверно? Мы создали и смонтировали файловую систему с /dev/testvg/testlv, а обнаружили, что она смонтирована с /dev/mapper/testvg-testlv. Все так и должно быть. Это нормально
 
для LVM2, так как для обращения к ядру он использует device-mapper.
 
для LVM2, так как для обращения к ядру он использует device-mapper.
Строка 110: Строка 110:
 
  #cp /usr/bin/* /mnt/test/
 
  #cp /usr/bin/* /mnt/test/
 
Ой-ей!!! Если вы следуете этому учебнику слово в слово, вы должны увидеть следующее:
 
Ой-ей!!! Если вы следуете этому учебнику слово в слово, вы должны увидеть следующее:
<pre>cp: cannot create regular file `/mnt/test/zjsdecode’: No space left on device
+
<source lang="bash">cp: cannot create regular file `/mnt/test/zjsdecode’: No space left on device
cp: cannot create regular file `/mnt/test/zsoelim’: No space left on device</prepre>
+
cp: cannot create regular file `/mnt/test/zsoelim’: No space left on device</source>
 
Что же произошло? Проверим-ка свободное место в файловой
 
Что же произошло? Проверим-ка свободное место в файловой
 
системе:
 
системе:
<pre>#df -h /mnt/test
+
<source lang="bash">#df -h /mnt/test
 
Filesystem
 
Filesystem
 
Size Used Avail Use% Mounted on
 
Size Used Avail Use% Mounted on
 
/dev/mapper/testvg-testlv
 
/dev/mapper/testvg-testlv
20M 20M 0 100% /mnt/test</pre>
+
20M 20M 0 100% /mnt/test</source>
 
Как видите, мы использовали все свободное пространство. Если бы
 
Как видите, мы использовали все свободное пространство. Если бы
 
эта файловая система была создана на дисковом разделе, единственным способом все исправить было бы удаление каких-нибудь данных
 
эта файловая система была создана на дисковом разделе, единственным способом все исправить было бы удаление каких-нибудь данных
 
или переразбиение диска, но LVM способен расширить логический том
 
или переразбиение диска, но LVM способен расширить логический том
 
и файловую систему. Начнем с логического тома:
 
и файловую систему. Начнем с логического тома:
<pre>#lvdisplay /dev/testvg/testlv | grep Size
+
<source lang="bash">#lvdisplay /dev/testvg/testlv | grep Size
 
LV Size
 
LV Size
 
20.00 MB
 
20.00 MB
Строка 131: Строка 131:
 
#lvdisplay /dev/testvg/testlv | grep Size
 
#lvdisplay /dev/testvg/testlv | grep Size
 
LV Size
 
LV Size
100.00 MB</pre>
+
100.00 MB</source>
 
Файловую систему ext3 вы можете расширить «на лету», без
 
Файловую систему ext3 вы можете расширить «на лету», без
 
останова.
 
останова.
<pre>#resize2fs /dev/testvg/testlv
+
<source lang="bash">#resize2fs /dev/testvg/testlv
 
resize2fs 1.40.8 (13-Mar-2008)
 
resize2fs 1.40.8 (13-Mar-2008)
 
Filesystem at /dev/testvg/testlv is mounted on /mnt/test; on-line
 
Filesystem at /dev/testvg/testlv is mounted on /mnt/test; on-line
Строка 146: Строка 146:
 
Size Used Avail Use% Mounted on
 
Size Used Avail Use% Mounted on
 
/dev/mapper/testvg-testlv
 
/dev/mapper/testvg-testlv
98M 20M 74M 22% /mnt/test</pre>
+
98M 20M 74M 22% /mnt/test</source>
 
Глядя на вывод df выше, я счел, что файловая система великовата,
 
Глядя на вывод df выше, я счел, что файловая система великовата,
 
и решил ее чуть-чуть уменьшить. При этом следует знать, что LVM распределяет место в «экстентах»; размер экстента показывается в выводе vgdisplay как поле ‘PE size’, и по умолчанию он равен 4 МБ. Размер
 
и решил ее чуть-чуть уменьшить. При этом следует знать, что LVM распределяет место в «экстентах»; размер экстента показывается в выводе vgdisplay как поле ‘PE size’, и по умолчанию он равен 4 МБ. Размер
Строка 152: Строка 152:
 
такого не умеет, поэтому придется сперва отмонтировать файловую
 
такого не умеет, поэтому придется сперва отмонтировать файловую
 
систему и запустить проверку (fsck).
 
систему и запустить проверку (fsck).
<pre>#umount /mnt/test
+
<source lang="bash">#umount /mnt/test
 
#e2fsck -f /dev/testvg/testlv
 
#e2fsck -f /dev/testvg/testlv
 
[... удаленные всякие ненужные строки ...]
 
[... удаленные всякие ненужные строки ...]
/dev/testvg/testlv: 426/22256 files (1.2% non-contiguous), 22964/102400 blocks</pre>
+
/dev/testvg/testlv: 426/22256 files (1.2% non-contiguous), 22964/102400 blocks</source>
 
Проверка убеждает, что файловая система в порядке, и дает возможность ее уменьшения с минимальным риском.
 
Проверка убеждает, что файловая система в порядке, и дает возможность ее уменьшения с минимальным риском.
<pre>#resize2fs /dev/testvg/testlv 50M
+
<source lang="bash">#resize2fs /dev/testvg/testlv 50M
 
resize2fs 1.40.8 (13-Mar-2008)
 
resize2fs 1.40.8 (13-Mar-2008)
 
Resizing the filesystem on /dev/testvg/testlv to 51200 (1k) blocks.
 
Resizing the filesystem on /dev/testvg/testlv to 51200 (1k) blocks.
The filesystem on /dev/testvg/testlv is now 51200 blocks long.</pre>
+
The filesystem on /dev/testvg/testlv is now 51200 blocks long.</source>
 
Немного математики. Пятьдесят не делится на четыре без остатка.
 
Немного математики. Пятьдесят не делится на четыре без остатка.
 
Если мы попытаемся уменьшить размер логического тома до 50 МБ,
 
Если мы попытаемся уменьшить размер логического тома до 50 МБ,
 
он станет 48 МБ или 52 МБ. К счастью, lvreduce хватает ума выбрать
 
он станет 48 МБ или 52 МБ. К счастью, lvreduce хватает ума выбрать
 
большее значение.
 
большее значение.
<pre>#lvreduce -L 50M /dev/testvg/testlv
+
<source lang="bash">#lvreduce -L 50M /dev/testvg/testlv
 
Rounding up size to full physical extent 52.00 MB
 
Rounding up size to full physical extent 52.00 MB
 
WARNING: Reducing active logical volume to 52.00 MB
 
WARNING: Reducing active logical volume to 52.00 MB
Строка 171: Строка 171:
 
Do you really want to reduce testlv? [y/n]: y
 
Do you really want to reduce testlv? [y/n]: y
 
Reducing logical volume testlv to 52.00 MB
 
Reducing logical volume testlv to 52.00 MB
Logical volume testlv successfully resized</pre>
+
Logical volume testlv successfully resized</source>
 
Последним шагом будет еще одно изменение размера файловой
 
Последним шагом будет еще одно изменение размера файловой
 
системы, для использования всего доступного пространства.
 
системы, для использования всего доступного пространства.
<pre>#resize2fs /dev/testvg/testlv
+
<source lang="bash">#resize2fs /dev/testvg/testlv
 
resize2fs 1.40.8 (13-Mar-2008)
 
resize2fs 1.40.8 (13-Mar-2008)
 
Resizing the filesystem on /dev/testvg/testlv to 53248 (1k) blocks.
 
Resizing the filesystem on /dev/testvg/testlv to 53248 (1k) blocks.
The filesystem on /dev/testvg/testlv is now 53248 blocks long.</pre>
+
The filesystem on /dev/testvg/testlv is now 53248 blocks long.</source>
 
Теперь можно заново смонтировать файловую систему и проверить, что она имеет корректный размер.
 
Теперь можно заново смонтировать файловую систему и проверить, что она имеет корректный размер.
<pre>#mount /dev/testvg/testlv /mnt/test/
+
<source lang="bash">#mount /dev/testvg/testlv /mnt/test/
 
#df -h /mnt/test
 
#df -h /mnt/test
 
Filesystem
 
Filesystem
 
Size Used Avail Use% Mounted on
 
Size Used Avail Use% Mounted on
 
/dev/mapper/testvg-testlv
 
/dev/mapper/testvg-testlv
51M 20M 30M 40% /mnt/test</pre>
+
51M 20M 30M 40% /mnt/test</source>
 
Пожалуйста, помните про размер экстента при изменении размера
 
Пожалуйста, помните про размер экстента при изменении размера
 
логических томов и проверяйте, что размер нового тома такой же или
 
логических томов и проверяйте, что размер нового тома такой же или
Строка 232: Строка 232:
 
новый логический том с параметром -s (снимок) и смонтируем его, как
 
новый логический том с параметром -s (снимок) и смонтируем его, как
 
если бы он был обычной файловой системой.
 
если бы он был обычной файловой системой.
<pre>#lvcreate -s -L50M -n testlvsnap /dev/testvg/testlv
+
<source lang="bash">#lvcreate -s -L50M -n testlvsnap /dev/testvg/testlv
 
Rounding up size to full physical extent 52.00 MB
 
Rounding up size to full physical extent 52.00 MB
 
Logical volume “testlvsnap” created
 
Logical volume “testlvsnap” created
Строка 242: Строка 242:
 
51M 20M 30M 40% /mnt/test
 
51M 20M 30M 40% /mnt/test
 
/dev/mapper/testvg-testlvsnap
 
/dev/mapper/testvg-testlvsnap
51M 20M 30M 40% /mnt/snap</pre>
+
51M 20M 30M 40% /mnt/snap</source>
 
Они оба выглядят одинаково. Вы можете перепроверить это, запустив следующие команды (их вывод мы удалили, так как он слишком
 
Они оба выглядят одинаково. Вы можете перепроверить это, запустив следующие команды (их вывод мы удалили, так как он слишком
 
длинный):
 
длинный):
<pre>#diff /mnt/test /mnt/snap/
+
<source lang="bash">#diff /mnt/test /mnt/snap/
 
#ls -l /mnt/test
 
#ls -l /mnt/test
#ls -l /mnt/snap</pre>
+
#ls -l /mnt/snap</source>
 
Теперь можно убедиться, что LVM и вправду умеет удалять и создавать любые файлы в нашем снимке.
 
Теперь можно убедиться, что LVM и вправду умеет удалять и создавать любые файлы в нашем снимке.
<pre>#rm -rf /mnt/snap/* (БУДЬТЕ ОСТОРОЖНЫ С ЭТОЙ КОМАНДОЙ!)
+
<source lang="bash">#rm -rf /mnt/snap/* (БУДЬТЕ ОСТОРОЖНЫ С ЭТОЙ КОМАНДОЙ!)
 
#touch /mnt/snap/SNAP_TEST
 
#touch /mnt/snap/SNAP_TEST
 
#touch /mnt/test/ORIG_TEST
 
#touch /mnt/test/ORIG_TEST
 
#ls -l /mnt/test
 
#ls -l /mnt/test
#ls -l /mnt/snap</pre>
+
#ls -l /mnt/snap</source>
 
Если снимок больше не нужен, его можно удалить тем же способом, что и логический раздел.
 
Если снимок больше не нужен, его можно удалить тем же способом, что и логический раздел.
<pre>#umount /mnt/snap
+
<source lang="bash">#umount /mnt/snap
 
#lvremove /dev/testvg/testlvsnap
 
#lvremove /dev/testvg/testlvsnap
 
Do you really want to remove active logical volume “testlvsnap”?
 
Do you really want to remove active logical volume “testlvsnap”?
 
[y/n]: y
 
[y/n]: y
Logical volume “testlvsnap” successfully removed</pre>
+
Logical volume “testlvsnap” successfully removed</source>
  
 
==== Одним махом ====
 
==== Одним махом ====
Строка 278: Строка 278:
 
другом он диске или на том же самом). Создайте раздел и установите
 
другом он диске или на том же самом). Создайте раздел и установите
 
его тип в 8E, как мы делали ранее.
 
его тип в 8E, как мы делали ранее.
<pre>#pvcreate /dev/sdc1
+
<source lang="bash">#pvcreate /dev/sdc1
 
Physical volume “/dev/sdc1” successfully created
 
Physical volume “/dev/sdc1” successfully created
 
#vgextend testvg /dev/sdc1
 
#vgextend testvg /dev/sdc1
Volume group “testvg” successfully extended</pre>
+
Volume group “testvg” successfully extended</source>
 
Нашей группе томов теперь отведено два физических тома (sdb1
 
Нашей группе томов теперь отведено два физических тома (sdb1
 
и sdc1). Так вы можете расширить существующую группу томов (и ее
 
и sdc1). Так вы можете расширить существующую группу томов (и ее
Строка 287: Строка 287:
 
размер одного диска. Далее нам нужно переместить данные на новый
 
размер одного диска. Далее нам нужно переместить данные на новый
 
том и удалить старый диск:
 
том и удалить старый диск:
<pre>#pvmove /dev/sdb1 /dev/sdc1
+
<source lang="bash">#pvmove /dev/sdb1 /dev/sdc1
 
/dev/sdb1: Moved: 100.0%
 
/dev/sdb1: Moved: 100.0%
 
#vgreduce testvg /dev/sdb1
 
#vgreduce testvg /dev/sdb1
Removed “/dev/sdb1” from volume group “testvg”</pre>
+
Removed “/dev/sdb1” from volume group “testvg”</source>
 
Pvmove физически перемещает все данные с одного тома на другой. На нашей крошечной файловой системе это займет несколько
 
Pvmove физически перемещает все данные с одного тома на другой. На нашей крошечной файловой системе это займет несколько
 
секунд, но на большой системе (особенно если она постоянно используется) может потребоваться несколько часов.
 
секунд, но на большой системе (особенно если она постоянно используется) может потребоваться несколько часов.

Версия 10:36, 5 октября 2009

Содержание

LVM: Виртуальные разделы

Сражаетесь с созданием разделов при установке? Хотели бы файловую систему с гибко изменяемым размером или более чем на один диск? Спросите Роба Добози.

Представьте, что у вас есть волшебный нож, которым можно нарезать хлеб на ломтики и намазать их маслом. Вроде ничего магического, а? Теперь представьте, что этот нож позволяет снова слепить ломтики воедино или сделать их тоньше, не затрагивая масло на них. Примерно это и умеет делать технология LVM (Logical Volume Manager, Менеджер логических томов). Буханка хлеба – это ваш диск, ломтики – разделы на нем, масло – файловые системы с их содержимым, а LVM – тот самый волшебный нож.

LVM добавляет логический слой между физическим диском (им может быть реальный винчестер, RAID-массив или что-нибудь другое) и файловой системой. Этот логический слой (или том) затем может динамически изменять свой размер (если это поддерживается файловой системой), прозрачно перемещать файловую систему в другое физическое место, создавать снимки файловой системы, доступные для чтения-записи, или размазывать ваши данные между несколькими физическими накопителями.

Я работал в виртуальной машине, но вы можете взять реальную систему с несколькими неиспользуемыми разделами (не менее 100 МБ). Эквивалент дискового раздела LVM зовется логическим томом (volume), и файловая система обычно создается на нем. Логические тома объединяются в логические группы (volume group). Для создания группы тома нужен физический том (обычно созданный на дисковом разделе). Итак, это была теория, а теперь давайте взглянем, как создавать и использовать тома.

LXF 112 62 1.png

Часть 1 Базовые операции

Сперва надо идентифицировать и настроить существующие разделы. Важно, чтобы тип раздела был установлен в 8E (LVM). Будьте осторожны при экспериментах с разделами и томами, не то можно уничтожить ваши данные (все команды даются от имени суперпользователя-root).

#fdisk /dev/sdb
[… куча ненужных нам строк ...]
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-65270, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-65270, default 65270):
Using default value 65270
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

Давайте создадим физический том LVM:

#pvcreate /dev/sdb1
Physical volume “/dev/sdb1” successfully created

Теперь можно создать группу томов и назначить ей физический том. Вы можете дать группе томов любое содержательное имя, но хорошим решением будет использовать окончание ‘vg’. Это поможет легко идентифицировать файловые системы, находящиеся в ведении LVM.

#vgcreate testvg /dev/sdb1
Volume group “testvg” successfully created

Чтобы иметь возможность создавать файловые системы, сперва нужно создать логический том. Снова, вы можете использовать любое имя, но я рекомендую добавить ‘lv’ в его конец.

#lvcreate -L 20M -n testlv testvg
Logical volume “testlv” created

Теперь у вас есть логический том с именем testlv, занимающий 20 МБ (параметр -L). Он доступен через /dev/testvg/testlv (поняли, зачем нужно было ‘vg’ в конце имени группы томов?). Наконец, создадим файловую систему – допускается любой ее тип, но, пожалуйста, помните, что не все файловые системы поддерживают расширение или уменьшение, поэтому мы выберем ext3.

#mkfs.ext3 /dev/testvg/testlv
[... куча удаленного ненужного текста …]

Чтобы пользоваться файловой системой, смонтируем ее где-нибудь: например, в точке монтирования /mnt/test.

#mkdir /mnt/test
#mount /dev/testvg/testlv /mnt/test

Так файловая система смонтирована временно. После перезагрузки она исчезнет, и вам придется монтировать ее снова. Если вы хотите всегда иметь ее под рукой всегда, добавьте соответствующую строку в /etc/fstab.

Ищем информацию

Перед тем как тестировать, что мы понаделали, припомним и опробуем пару команд, которые могут предоставить информацию об всех компонентах LVM. Сперва мы создавали разделы и физические тома; о них расскажет pvdisplay. Как и все команды LVM, вызванная без параметров, она выведет сведения обо всех физических томах системы. Второй шла группа томов – vgdisplay позволит увидеть атрибуты указанных групп томов (или всех групп, при запуске без параметров). Обычно самой интересной частью информации, выдаваемой vgdisplay, является размер группы томов, PE size (размер физического экстента [диапазоны (обычно несколько мегабайт) физического диска, подобные кластерам, – прим. пер.]), полное, занятое и свободное число экстентов или МБ (Total PE, Alloc PE и Free PE). Последним объектом LVM является логический том. Команда, выводящая данные о нем, называется lvdisplay. Также интереснейшей информацией может быть размер логического тома (LV size): его значение отражает размер файловой системы. Можете попробовать эти команды друг за другом:

#pvdisplay /dev/sdb1
#vgdisplay testvg
#lvdisplay /dev/testvg/testlv

А что у нас с файловой системой?

#df -h /mnt/test
Filesystem
Size Used Avail Use% Mounted on
/dev/mapper/testvg-testlv
20M 1.2M 18M 7% /mnt/test

Вы заметили, что тут неверно? Мы создали и смонтировали файловую систему с /dev/testvg/testlv, а обнаружили, что она смонтирована с /dev/mapper/testvg-testlv. Все так и должно быть. Это нормально для LVM2, так как для обращения к ядру он использует device-mapper. Это второй способ узнать, что интересующее вас устройство, на самом деле, том LVM (первый способ заключается в соглашении об именовании, использованном при создании группы томов и самих томов).

Тестируем и изменяем размер

Ну вот, все создано; давайте проверим, работают ли тома, скопировав что-нибудь в файловую систему.

#cp /usr/bin/* /mnt/test/

Ой-ей!!! Если вы следуете этому учебнику слово в слово, вы должны увидеть следующее:

cp: cannot create regular file `/mnt/test/zjsdecode’: No space left on device
cp: cannot create regular file `/mnt/test/zsoelim’: No space left on device

Что же произошло? Проверим-ка свободное место в файловой системе:

#df -h /mnt/test
Filesystem
Size Used Avail Use% Mounted on
/dev/mapper/testvg-testlv
20M 20M 0 100% /mnt/test

Как видите, мы использовали все свободное пространство. Если бы эта файловая система была создана на дисковом разделе, единственным способом все исправить было бы удаление каких-нибудь данных или переразбиение диска, но LVM способен расширить логический том и файловую систему. Начнем с логического тома:

#lvdisplay /dev/testvg/testlv | grep Size
LV Size
20.00 MB
#lvextend -L100M /dev/testvg/testlv
Extending logical volume testlv to 100.00 MB
Logical volume testlv successfully resized
#lvdisplay /dev/testvg/testlv | grep Size
LV Size
100.00 MB

Файловую систему ext3 вы можете расширить «на лету», без останова.

#resize2fs /dev/testvg/testlv
resize2fs 1.40.8 (13-Mar-2008)
Filesystem at /dev/testvg/testlv is mounted on /mnt/test; on-line
resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/testvg/testlv to 102400 (1k)
blocks.
The filesystem on /dev/testvg/testlv is now 102400 blocks long.
#df -h /mnt/test
Filesystem
Size Used Avail Use% Mounted on
/dev/mapper/testvg-testlv
98M 20M 74M 22% /mnt/test

Глядя на вывод df выше, я счел, что файловая система великовата, и решил ее чуть-чуть уменьшить. При этом следует знать, что LVM распределяет место в «экстентах»; размер экстента показывается в выводе vgdisplay как поле ‘PE size’, и по умолчанию он равен 4 МБ. Размер логического тома уменьшается кратно экстенту. Первый шаг – уменьшение размера файловой системы. Увы, в реальном времени ext3 такого не умеет, поэтому придется сперва отмонтировать файловую систему и запустить проверку (fsck).

#umount /mnt/test
#e2fsck -f /dev/testvg/testlv
[... удаленные всякие ненужные строки ...]
/dev/testvg/testlv: 426/22256 files (1.2% non-contiguous), 22964/102400 blocks

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

#resize2fs /dev/testvg/testlv 50M
resize2fs 1.40.8 (13-Mar-2008)
Resizing the filesystem on /dev/testvg/testlv to 51200 (1k) blocks.
The filesystem on /dev/testvg/testlv is now 51200 blocks long.

Немного математики. Пятьдесят не делится на четыре без остатка. Если мы попытаемся уменьшить размер логического тома до 50 МБ, он станет 48 МБ или 52 МБ. К счастью, lvreduce хватает ума выбрать большее значение.

#lvreduce -L 50M /dev/testvg/testlv
Rounding up size to full physical extent 52.00 MB
WARNING: Reducing active logical volume to 52.00 MB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testlv? [y/n]: y
Reducing logical volume testlv to 52.00 MB
Logical volume testlv successfully resized

Последним шагом будет еще одно изменение размера файловой системы, для использования всего доступного пространства.

#resize2fs /dev/testvg/testlv
resize2fs 1.40.8 (13-Mar-2008)
Resizing the filesystem on /dev/testvg/testlv to 53248 (1k) blocks.
The filesystem on /dev/testvg/testlv is now 53248 blocks long.

Теперь можно заново смонтировать файловую систему и проверить, что она имеет корректный размер.

#mount /dev/testvg/testlv /mnt/test/
#df -h /mnt/test
Filesystem
Size Used Avail Use% Mounted on
/dev/mapper/testvg-testlv
51M 20M 30M 40% /mnt/test

Пожалуйста, помните про размер экстента при изменении размера логических томов и проверяйте, что размер нового тома такой же или больше, чем размер файловой системы.

Часть 2 Операции посложнее

(thumbnail)
Это system-config-lvm. Имя не самое затейливое, но действия ему соответствуют, и выполняются хорошо.

LVM позволяет создать копию логического тома для определенного момента времени (ее называют снимком). Так и слышу ваш стон: «А это еще зачем?» Хорошо, представим, что у вас есть база данных (или другое приложение), и вы хотите сделать полноценную резервную копию. Для этого придется завершить работу или, как минимум, приостановить ее. Однако создание резервной копии требует времени – и система долго будет недоступна. А вот с LVM можно остановить вашу базу данных, сделать снимок ее файловой системы и запустить ее снова, что займет пару секунд. К состоянию, зафиксированному снимком, можно вернуться.

Другой пример касается виртуализации. Пусть вы хотите протестировать нечто на вашей виртуальной машине, но боитесь, что она от этого сломается. Решение очень простое: создайте снимок файловой системы, на которой расположен образ диска вашей виртуальной машины. Теперь можете запустить виртуальную машину из этого снимка, выполнить ваш тест, и если что-то пойдет не так, просто удалить снимок. Данные на момент создания снимка в вашей исходной файловой системе уцелеют. Хитро! [даже слишком: возможность делать снимки состояния гостевой ОС есть в большинстве виртуальных машин, например, VirtualBox, – прим. ред.] Итак, что надо сделать? Сперва убедимся, что в группе томов достаточно места (см. vgdisplay ранее). Если да, то просто создадим новый логический том с параметром -s (снимок) и смонтируем его, как если бы он был обычной файловой системой.

#lvcreate -s -L50M -n testlvsnap /dev/testvg/testlv
Rounding up size to full physical extent 52.00 MB
Logical volume “testlvsnap” created
#mkdir /mnt/snap
#mount /dev/testvg/testlvsnap /mnt/snap
#df -h /mnt/test /mnt/snap
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/testvg-testlv
51M 20M 30M 40% /mnt/test
/dev/mapper/testvg-testlvsnap
51M 20M 30M 40% /mnt/snap

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

#diff /mnt/test /mnt/snap/
#ls -l /mnt/test
#ls -l /mnt/snap

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

#rm -rf /mnt/snap/* (БУДЬТЕ ОСТОРОЖНЫ С ЭТОЙ КОМАНДОЙ!)
#touch /mnt/snap/SNAP_TEST
#touch /mnt/test/ORIG_TEST
#ls -l /mnt/test
#ls -l /mnt/snap

Если снимок больше не нужен, его можно удалить тем же способом, что и логический раздел.

#umount /mnt/snap
#lvremove /dev/testvg/testlvsnap
Do you really want to remove active logical volume “testlvsnap”?
[y/n]: y
Logical volume “testlvsnap” successfully removed

Одним махом

Если вы интересуетесь, как работает механизм снимков, то все несложно. При создании снимка LVM ничего не копирует: в группе томов просто отводится требуемое место и затем начинается отслеживание изменений. И оригинал, и снимок вначале указывают на те же блоки данных. Если какие-то из них модифицируются, LVM создаст копию измененных данных и сохранит их отдельно. Эта техника называется копированием-при-записи, так что снимки создаются моментально, вне зависимости от размера файловой системы.

Другая дополнительная возможность LVM – прозрачный перенос данных между физическими томами. Он экономит время при замене жесткого диска. Без LVM пришлось бы загружаться с CD и использовать его для копирования файловых систем – а с LVM можно просто добавить новый диск (или его раздел) в имеющуюся группу томов и велеть LVM переместить все на него. Чтобы проделать следующее упражнение, вы должны иметь доступ к другому разделу (неважно, на другом он диске или на том же самом). Создайте раздел и установите его тип в 8E, как мы делали ранее.

#pvcreate /dev/sdc1
Physical volume “/dev/sdc1” successfully created
#vgextend testvg /dev/sdc1
Volume group “testvg” successfully extended

Нашей группе томов теперь отведено два физических тома (sdb1 и sdc1). Так вы можете расширить существующую группу томов (и ее тома). Это также и способ создания файловых систем, превышающих размер одного диска. Далее нам нужно переместить данные на новый том и удалить старый диск:

#pvmove /dev/sdb1 /dev/sdc1
/dev/sdb1: Moved: 100.0%
#vgreduce testvg /dev/sdb1
Removed “/dev/sdb1” from volume group “testvg”

Pvmove физически перемещает все данные с одного тома на другой. На нашей крошечной файловой системе это займет несколько секунд, но на большой системе (особенно если она постоянно используется) может потребоваться несколько часов.

Часть 3 Установка или конвертирование в LVM

Ну что, убедились, что, после нарезания хлеба, LVM – самая отличная штука? Захотелось перевести свою систему на управляемые тома LVM? Не бойтесь, это довольно просто. Fedora и CentOS практически идентичны, и обе будут использовать LVM, если вы выберете стандартную установку. OpenSUSE позволит выбрать между установкой на обычный раздел и установкой на основе LVM, Ubuntu Server также имеет снабженную описанием установку с использованием LVM. Единственным дистрибутивом, из мной протестированных, который не поддерживает установку на LVM, является Ubuntu Desktop. К счастью, есть обходной путь. Подробности ищите здесь: http://www.debuntu.org/how-to-install-ubuntuover-lvm-filesystem.

А что делать, если вы желаете использовать LVM на существующих файловых системах, но не хотите переустанавливать систему? К сожалению, нет магического инструмента, умеющего преобразовывать разделы в логические тома. Вы можете сделать это, но файловая система должна иметь по крайней мере 50% свободного места. (Альтернатива – использовать запасной диск или другой раздел, где места достаточно.) Прежде чем менять разделы и файловые системы, пожалуйста, позаботьтесь о резервных копиях ваших ценных данных.

Во-первых, создайте новый раздел, используя свободное место на диске. Наилучший инструмент для этого – GParted. Теперь установите тип раздела в LVM (с помощью fdisk или cfdisk), создайте физический том, группу томов и логический том, а затем и файловую систему. Используйте что-нибудь подходящее, типа dd, cpio, dump/restore или tar, для копирования данных в новую файловую систему. Сделав это, измените тип исходного раздела на LVM, создайте на нем физический том и добавьте его в группу томов. Теперь можете расширить логический том до требуемого размера.

Если вы намерены конвертировать в LVM вашу корневую файловую систему, загрузитесь с любого LiveCD/DVD и выполните все действия оттуда. Следует также знать, что на логическом томе нельзя размещать /boot, иначе вы вообще не сможете загрузить вашу систему. Причина здесь в том, что загрузчики (в частности, Grub) не понимают LVM и не могут найти ядро для загрузки.

И более того

Мы рассмотрели часть основных и чуть-чуть расширенных возможностей менеджера логических томов. LVM, однако, умеет больше, особенно если у вас не один диск. Например, если назначить два физических тома на группу томов, LVM употребит все доступное пространство на первом томе, а затем перейдет на второй. Хотя, возможно, было бы быстрее читать и писать на два диска параллельно – поэтому можно велеть LVM размещать порции данных на нескольких физических томов по принципу RAID0. LVM не предусматривает избыточности данных, как RAID1 или 5, но физические тома можно организовать на основе устройств Linux Software RAID (md): создать несколько md-устройств, а затем объединить их в один или более логических томов.

Я также обошел вниманием некоторые функции, типа поддержки кластеризации, и команды, такие как vgscan, vgchange и vgs. Если вы хотите узнать о них больше, взгляните на документ LVM HOWTO на http://www.tldp.org/HOWTO/LVM-HOWTO. Местами он немного устарел, но все еще является прекрасным источником информации.

Персональные инструменты
купить
подписаться
Яндекс.Метрика