- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF83:HDD
Материал из Linuxformat.
Содержание |
LVM. Заводим виртуальные разделы
Долой тиранию фиксированных разделов диска – Нейл Ботвик покажет, как достичь гибкости при помощи управления логическими томами (Logical Volume Management).
Как управлять разделами? Спросите 10 пользователей Linux о лучшем способе разбиения жесткого диска – итогом будет не меньше 11 разных ответов. Вдобавок все ответы, вероятно, правильные: у каждого метода свои достоинства, все зависит от ваших намерений по использованию системы. Проблемы возникают намного позже, когда реальность расходится с планами и вы замечаете нехватку свободного места в одном разделе и ненужный избыток – в другом.
Размеры разделов можно изменить при помощи утилиты QtParted, но она (и инструменты, ею используемые) ограничивается отодвиганием конца раздела. Вы можете усечь раздел, чтобы высвободить место для нового раздела, или увеличить раздел, включив следующее за ним пустое пространство. Если надо расширить раздел /usr, вклинившийся между разделами root и home, то вам не повезло: придется произвести резервирование данных, удалить и вновь создать разделы, а потом восстановить данные из резервной копии.
К счастью, решение существует – это менеджер логических томов (LVM), представляющий собой программный слой между разделами и накопителями. Ваши разделы становятся виртуальными, а не прикованными к фиксированному положению на диске. Сегодня я покажу вам, как использовать LVM для создания раздела (далее называемого логическим томом), изменения его размера или удаления без проблем и забот о физическом размещении. Можно даже добавлять и удалять целые диски, не затрагивая вашу файловую систему.
Работаем со слоями
LVM поставляется в большинстве дистрибутивов – или как часть стандартного набора программ, или в программном репозитарии (пакет обычно называется lvm2). Там содержатся все используемые инструменты, но учтите, ядро тоже должно поддерживать LVM. Многие дистрибутивы опять-таки предоставляют подходящее ядро, но если вы делаете все самостоятельно, то вам необходимо включить следующие опции:
CONFIG_MD=y CONFIG_BLK_DEV_DM=y
Их можно найти в инструменте конфигурирования ядра: Device Drivers > Multi-Device Support (RAID и LVM) > Device Mapper Support
Имеется две версии Управления Логическими Томами: изначальная – LVM и последняя – LVM2. LVM2 в основном имеет обратную совместимость с LVM, но когда на этом уроке я говорю о LVM, то подразумеваю LVM2.
LVM предоставляет логические тома трех уровней: физические тома, группы томов и собственно логические тома. В самом низу находятся физические тома – это разделы жесткого диска, на которых хранятся данные (/dev/hda1, /dev/sdb3 и т.п.). Можно также создать физический том, охватывающий весь диск, в этом случае вам не нужно вначале разбивать этот диск на разделы. Один или несколько физических томов объединяются в группы – второй уровень. Вы можете рассматривать группу томов как виртуальный жесткий диск, который может иметь разделы более чем на одном физическом носителе. И, наконец, поверх групп томов создаются логические тома.
Все группы томов разбиваются на один или несколько логических томов, точно так же, как физический жесткий диск разбивается на один или несколько разделов. Основное отличие в том, что все становится более гибким – от размера виртуальных дисков и разделов до соглашений по именованию, которые вы используете. Здорово? Давайте начнем с низшего уровня: создадим несколько физических томов.
На дне
Небольшое предупреждение: начиная с этого момента, все приводимые команды требуют прав суперпользователя (см. врезку Требуются права root вверху). Поехали. Итак, физические тома создаются при помощи pvcreate; man-страница содержит множество опций, но обычно требуется указать только имя используемых раздела(-ов) или диска(-ов). Вот хорошие примеры этой команды:
- pvcreate /dev/hda5
- pvcreate /dev/md0
- pvcreate /dev/sda7 /dev/sdb
Первая из них создает физический том на отдельном разделе; вторая делает то же самое на RAID-разделе. Третий пример создает физические тома в разделе первого диска и на всем втором диске. Если вы хотите создать физический том во весь диск, то последний при этом не должен содержать никаких разделов: если они есть, то pvcreate откажется работать с ним.
Разделы можно удалить при помощи любого инструмента разметки диска, например cfdisk, или командой
dd if=/dev/zero of=/dev/sdb bs=512 count=1
Обязательно убедитесь, что вы работаете с нужным диском – очень трудно будет восстановить данные, если вы удалите таблицу разделов не того диска.
Работа с группами
Вообще-то наш друг pvcreate только подготавливает устройство для использования LVM – теперь вам необходимо создать одну или несколько групп томов. Для стандартного настольного ПК обычно вполне достаточно одной группы. Для масштабных или специализированных применений, например, серверов с интенсивной нагрузкой, может понадобиться больше. Но сам процесс одинаков, вне зависимости от количества созданных вами групп:
vgcreate myvg /dev/hda5 /dev/sdb
Здесь создается отдельная группа томов с именем myvg, состоящая из раздела на hda и целого sdb (в предположении, что они были подготовлены pvcreate). Кстати, вы можете спокойно проигнорировать любые ошибки, связанные с CD или DVD-приводами: это LVM сканирует ваши диски и выдает ошибку для любого устройства, содержащего диски только для чтения или без дисков.
Хотя общепринято давать группам томов нумерованные имена (vg00, vg01...), вы можете называть их по-своему. Например, если раздел вашей операционной системы размещается в одной группе, а сами вы работаете с другой, вы можете назвать их System и Work соответственно. Другая причина для использования своих собственных имен – избежание конфликтов: вдруг вам потребуется подсоединить другое устройство с группой томов под именем vg00, чтобы извлечь данные – возникнет путаница.
Чтобы проверить, создана ли группа томов, выполните
vgdisplay myvg
Выведется информация о вашей группе томов. Запустите ее без аргументов, чтобы увидеть параметры всех групп.
Наконец-то логические тома
Теперь к третьему слою; команда создания логических томов лишь немного длиннее, чем команда для создания группы томов. Вот она:
lvcreate --name myvol --size 5G myvg
Опция --name, как пояснил бы вам Шерлок Холмс, дает имя тому. Она не обязательна, но если ее опустить, том получит имя вида “volNN” – значимое имя, безусловно, лучше. Аргумент --size задает размер тома (ну, это же элементарно) и указывается он в мегабайтах, или по вашему выбору K, M, G или T (килобайты, мегабайты, гигабайты или терабайты, дорогой мой Ватсон). Вы должны указать или --size, или --extents. Extent (непрерывная область на диске) – это наименьшая единица данных в группе, аналогичная блоку физического диска. Размер по умолчанию – 4 МБ.
Ваш новый том находится в /dev/volumegroup/volumename, и команда
mke2fs -j /dev/myvg/myvol
создаст на новом томе файловую систему ext3.
Повтором команды lvcreate вы можете добавлять логические тома, пока хватает свободного места на диске, но при этом следует помнить несколько моментов. Как вы скоро увидите, LVM чрезвычайно упрощает изменение размера логических томов, а вот изменение размера раздела проходит гладко только при его увеличении. Уменьшение размера раздела в лучшем случае рискованно, а для некоторых файловых систем невозможно (это зависит от распознания вашей файловой системы программой разметки – если у вас очень экзотическая файловая система или старая версия GParted, вряд ли это сработает).
Поэтому задавайте размер ваших логических томов в точности таким, как надо –завышать его, исходя из соображений «а вдруг потом потребуется больше», бессмысленно. По тем же причинам, хотя под группу томов и можно грохнуть все свободное место, крайности в этом нет – разве что при подлинной необходимости. Неиспользованное пространство можно приписать к любому логическому тому в любой момент. Однако не увлекайтесь таким подходом: большинство файловых систем при заполнении «под завязку» вынуждены фрагментировать файлы. Наилучшая производительность достигается при заполнении на 75–80%. Рассчитайте размер каждого тома и добавьте к нему еще 30%, чтобы дать файловой системе некоторое пространство для толкотни.
Добавляем пространства
Пока мы создавали одни логические тома, которые, похоже, не имеют особых преимуществ по сравнению с традиционными физическими. Но это только начало. Если вы решите, что вам нужно побольше места на myvol, нужно сделать всего лишь
lvresize --size +2G /dev/myvg/myvol
Это увеличит размер логического тома на 2 ГБ. Начало /dev/ не обязательно, но означает, что вы можете использовать завершение по клавише TAB в командной оболочке, чтобы убедиться, что имя верное.
Должен отметить, что эта команда изменяет размер только тома, а не его файловой системы. Увеличение размера тома, содержащего смонтированную файловую систему, вполне безопасно, но если вы хотите уменьшить размер тома, то прежде уменьшите размер файловой системы по крайней мере на ту же величину. При увеличении размера сначала увеличиваем размер тома, а затем файловой системы. Некоторые файловые системы позволяют увеличить их без размонтирования (а вот XFS разрешает изменение размера только в смонтированном состоянии). Попробуйте специализированные инструменты изменения размера файловых систем (например, resize2fs, resize_reiserfs, xfs_growfs etc) или графический инструмент вроде QtParted.
Подразумевается, что у вас хватает свободного пространства в вашей группе томов. LVM не может наколдовать пространство из ниоткуда, но он может облегчить добавление дополнительного диска в ваш компьютер, добавив затем его пространство к имеющейся группе(ам) томов. Например,
pvcreate /dev/hdb vgextend myvg /dev/hdb
добавит весь /dev/hdb к существующей группе томов myvg (столь же просто вы можете создать раздел на диске и добавить его в группу томов). Мы можем использовать это пространство для создания дополнительных логических томов или для увеличения размера существующих. Использование LVM означает, что одну файловую систему можно разместить на сколь угодно большом количестве физических разделов и дисков, обеспечивающих требуемую память.
Уменьшение разделов
А как насчет перемещения и удаления элементов LVM? Для начала, логические тома могут быть удалены командой
lvremove myvg/myvol
Перед этим вы должны размонтировать раздел, иначе lvremove откажется выполнить ваш запрос. Удаленное пространство возвращается в группу томов.
Аналогично, vgremove удаляет группу томов целиком, но только после удаления всех ее логических томов командой lvremove.
Из группы томов можно также удалять отдельные физические тома. Это требует некоторой осторожности, так как перед удалением нужно убедиться, что на этом томе или диске не содержится данных из принадлежащих группе томов. Но это также означает, что вы в основном можете перенести систему на диск большего размера практически без простоя, кроме вызванного физическим переподключением дисков (или даже и без этого, если вы используете диски с «горячим» подключением). Я добавил «в основном», потому что любым не-LVM разделом потребуется заниматься отдельно. Дистрибутивы вроде Fedora Core размещают /boot на отдельном разделе, а все остальное на LVM. Поскольку в процессе работы системы /boot не требуется, то скопировать его достаточно легко.
Чтобы скопировать остатки системы, скажем с hda5 на hdb5, создайте физический том и добавьте его в группу томов, как описано выше. Теперь вам нужно убедиться, что все данные этой группы томов размещены на новом диске. Во-первых, удостоверьтесь, что места достаточно:
pvdisplay /dev/hda5 /dev/hdb5
Убедитесь, что свободный физический размер (Free PE) нового диска больше, чем занимаемый физический размер старого (Allocated PE). Если это так, то перенесите данные командой
pvmove /dev/hda5 /dev/hdb5
заменив, естественно, имена устройств в соответствии с вашей системой.
pvmove может перетаскивать данные довольно долго, но не пугайтесь: его действия не помешают вам работать за компьютером. Если событие вроде отключения питания или краха системы прервет процесс, запустите потом pvmove без параметров, и процесс продолжится с момента остановки. Используя pvdisplay, проверьте, что на старом диске нет занятого места, после чего удалите его из группы:
vgreduce myvg /dev/hda5 pvremove /dev/hda5
Первая команды удаляет раздел из группы томов (вы можете в этом убедиться при помощи vgdisplay). Вторая просто удаляет у раздела метку LVM.
Для перемещения данных отдельного логического тома следует выполнить:
pvmove --name myvg/myvol /dev/hda5 /dev/hdb5
Имя тома-назначения не обязательно; если вы его опустите, pvmove перенесет данные в свободные физические области текущей группы томов. Это весьма полезно, если у вас несколько физических томов, а удалить надо только один.
Команда pvmove /dev/hdaN очистит раздел N, переместив данные в свободные области группы, которой он принадлежит.
Прекрасные снимки
Создание резервной копии работающей файловой системы не обходится без проблем. Резервирование – процесс не мгновенный, поэтому всегда существует вероятность, что файловая система за это время изменится. Особенно это касается резервирования /var, где файлы в каталогах типа /var/log или /var/lib могут изменяться ежеминутно (зачастую так и происходит). К счастью, LVM предоставляет измученным сисадминам опцию моментальных снимков логических томов. Взгляните сюда:
lvcreate --size 1G --snapshot --name mybackup myvg/myvol
Этот код создает новый логический том с именем mybackup, который является снимком нашего тома myvol. Содержимое /dev/myvg/myvol в момент выполнения команды lvcreate теперь располагается в /dev/myvg/mybackup. Оба тома находятся в одной группе томов, поэтому перед созданием резервной копии в группе должно быть обеспечено свободное место. Вам не потребуется полный размер исходного тома, поскольку в снимке хранятся только изменения, сделанные с момента его выполнения. Мы обошлись 1 ГБ, хотя размер myvg/myvol – 7 ГБ. В документации LVM рекомендован размер 15–20% от исходного, но он зависит от того, насколько быстро меняются данные и как долго вам нужно хранить снимок. Если снимку не хватит места, он будет испорчен, так что отведите ему побольше.
Когда снимок станет не нужен, вы сможете удалить его так же, как и любой другой том, а освободившееся пространство возвратится группе томов. Сколько места снимок фактически использовал, можно выяснить при помощи lvdisplay. Вот грубый пример резервирования рабочего раздела на ленту при помощи снимков:
lvcreate --size 500M --snapshot --name var-backup /dev/ myvg/var mount /dev/myvg/var-backup /mnt/tmp tar c /mnt/tmp >/dev/tape umount /mnt/tmp lvremove /dev/myvg/var-backup
Ваша собственная процедура резервирования, надеюсь, будет более элегантна, но эта наглядно иллюстрирует идею: снимок создается, используется для резервирования вместо работающей файловой системы, затем удаляется, а пространство возвращается группе томов. Что бы ни вносилось в var/log или var/lib/mysql, пока tar-архив пишется на ленту, оно будет проигнорировано – будут резервированы только файлы, имеющиеся в момент выполнения lvcreate.
Когда имена конфликтуют
Следует знать, что добавляя после загрузки диск, содержащий LVM-разделы, например USB-диск, вы должны сообщить системе, что они появились. Команды
vgscan vgchange -a y
запускают сканирование групп томов и делают все найденные логические тома доступными.
Если новая группа томов имеет то же имя, что и существующая (совпадение имен томов внутри различных групп роли не играет), возникнет ошибка – это может случиться при подключении диска с другого компьютера. Решение – переименовать одну из групп:
vgrename oldvolgroup newvolgroup
Это довольно неудобно, поскольку дополнительный диск переименовать нельзя – конфликт имен с ходу прекратит распознавание. Нельзя также переименовать группу томов на вашем главном диске(-ах) при наличии смонтированной файловой системы. В любом случае, перед изменением потребуется отредактировать /etc/fstab, чтобы суметь после переименования заново смонтировать логические тома. Обычно наилегчайший способ –использовать для изменения имен LiveCD, в котором ничего не смонтировано. Если вы дали группам томов осмысленные имена вместо vgXX, то шансы конфликтов значительно снижаются, спасая вас от возможных огорчений в будущем.
После присоединения нового диска и выполнения vgscan/vgchange, вы сможете просмотреть логические тома при помощи lvdisplay и смонтировать как любую другую файловую систему.
Более мощные опции
Я описал основные опции, используемые для создания и управления физическими томами, группами томов и логическими томами. Существует еще много других опций для настройки производительности под ваши нужды (более подробно см. man lvm и man-страницы отдельных команд). Однако предоставленная мною информация вполне достаточна для работы с логическими томами, созданными установщиком дистрибутива, или для создания своих собственных логических томов, и, как я надеюсь, хотя бы частично избавит вас от проблем разметки.