LXF83:HDD
|
|
|
Содержание |
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-страницы отдельных команд). Однако предоставленная мною информация вполне достаточна для работы с логическими томами, созданными установ- щиком дистрибутива, или для создания своих собственных логических томов, и, как я надеюсь, хотя бы частично избавит вас от проблем раз- метки.