Вся правда о компьютерах
PC WORLD #5/2008    
 
   
 
  
ПОИСК  
 
   
 
    Издательский дом "КОМИЗДАТ"

ComputerWorld Ukraine
Игровой журнал "Шпиль!"
Корпоративные системы
Сети и телекоммуникации
PC World

   
     Мероприятия
• 2008.03.17 — 14-18 апреля. "Творческие встречи ИТ"»

• 2008.03.17 — 25 марта. Семинар "Autodesk Inventor 2008 – удобное и эргономичное решение для р...»

• 2008.03.06 — 12 марта. Cеминар "Новые стандарты в области безопасности, контроля и обмена инф...»

   
 

     
Подписка на новости сайтa






 

LVM в действии

 

Подписаться  на наше издание быстро и дешевле чем где-либо Вы можете прямо сейчас! Подписаться!

 

 

В Linux предусмотрен ряд средств, позволяющих максимально эффективно использовать пространство физических дисков. Особое место среди таких инструментов занимает Logical Volume Manager.


Ага, диск на серваке забился? Еще бы — столько софта и спама через него прокачивать! И в каждом втором письме по трояну... Надо бы их как-то рассортировать, отписать авторам:). А пока и диск расширить не помешает. Ну, дело-то нехитрое — очищаю ненужный раздел, мэйкаю ФС, монтирую туда каталог закачек...


Стоп, а у меня-то LVM стоит! Почему бы и не попробовать — говорят, штука с витаминами.


Как это все у них хорошо получается! — и себе выгода, и людям польза.

 

Ботаника


Как вы, вероятно, уже заметили, виртуализация ресурсов всех мастей — это вообще тренд, не побоюсь этого слова. То виртуальный процессор в системе обнаруживается, то память виртуальная, то виртуальные файловые системы, а то и целая виртуальная машина с собственным BIOS'ом. На самом деле ничего особо нового тут нет — если кому-то повезло работать с оборудованием IBM, например, то там такие вещи происходят уже не первый десяток лет.


Другое дело, что все это наконец-то докатилось до персональных компьютеров и по цене стало доступно рядовому пожирателю ресурсов. И дело тут не только в прогрессе "железа", самая хитрость в том, что рост производительности персоналок был спровоцирован такими приложениями, как игры или MS Office. А теперь вы, воспользовавшись случаем, можете поставить на эту платформу Linux и получить на своем столе Выч. Центр средней руки (по масштабам примерно середины девяностых).

 

В качестве дани справедливости нужно сказать, что MS Windows Server тоже располагает управлением логических (в терминах "Майкрософт" — динамических) томов. Я даже где-то читал, что это самое управление работает там весьма прилично. Но ни вы , ни я не можем дешево и легально воспользоваться Microsoft Windows Server, то пускай этим занимаются сертифицированные люди на ставке в MS, таких немало,— а мы займемся Linux, где нас ждут и где нам нечего скрывать.

 

Хистори

 

Если говорить о LVM под Linux, то существует две различные (качественно различные) версии — Один и Два, соответствующие ядрам 2.4 и 2.6. Существует также кросс-релизный патч, позволяющий собрать 2.4 с новой версией LVM2,— я не вижу в этом никакого смысла, поскольку 2.6 соотносится со всеми предыдущими релизами примерно так же, как небо и земля. И без LVM 2 существует сто пятьдесят поводов перейти на новое ядро. Надеюсь, все вы так и сделали, так что об истории вопроса ничего говорить не будем.


Заметим только, что такая "популярность" (и без кавычек тоже) LVM связана с тем, что установка LVM обозначена по умолчанию в большинстве новых дистрибутивов. Не успевает пользователь вовремя "продуплиться" — как, глядишь, у него уже самая передовая метафайловая система.

 

Обозрение

 

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


По этой же причине каталог /boot находится вне LVM, в отдельном разделе — на ранней стадии, до загрузки ядра, об LVM еще ничего не известно. Впрочем, ничто не мешает в один день получить загрузочный LVM — это вопрос соглашения между создателями (на выбор) BIOS, MBR, grub, ядра и самого LVM. Точно так же ничто не препятствует менеджменту томов на уровне расширения BIOS, так как это сделано с RAID.

 

Важное свойство логических томов — динамическое подключение к ним новых физических устройств и разделов. Отключение является менее тривиальной задачей, поскольку при этом возможна ситуация "оторвали мишке лапу". Хотя, конечно, существует похожий на Partition Manager "шринк" (то есть сжатие), в рамках возможного, одного набора данных — с последующим распределением высвобожденного объема в пользу другого. Если заранее не известно, как нужно распределить дисковую память, можно избежать "шринкования", выделив каждому логическому тому по минимуму памяти, а остальную оставив нераспределенной до лучших времен. Так будет проще.


У "шринка" есть и другое важное применение. Побочным эффектом освобождения заданных разделов и целых дисков является возможность горячей миграции: вы подключаете новый диск, после чего освобождаете и отключаете старый. Конечно, это тоже неявное копирование, но полностью "горячее". Пользователи не заметят перерыва в обслуживании. Также существует создание полных копий логических томов, называемое "слепками" (snapshots). В версии LVM2 в эти образы даже можно производить запись — и новые блоки не затрутся старыми, из оригинала.


Собственно, помимо LVM существуют и другие уровни между "железным железом" и файловой системой. К примеру, современные диски HDD имеют "кривую" геометрию: внешние цилиндры и внутренние имеют разное число секторов на один оборот. Но контроллер диска в этом не признается (иначе пришлось бы переписывать массу старого софта) — а "делает красиво", на лету транслируя адреса, в результате чего всего везде поровну. Кроме того, диск умалчивает и об резервных и "слабых" дорожках. Следующим уровнем является LBA, когда весь диск представляется как одна дорожка, разбитая на сектора от 0 до N и так далее.


Тот же RAID — еще один "фокус" промежуточного уровня, не только транслирующий адреса, но и выполняющий другие операции, в зависимости от уровня самого RAID.


Технология LVM находится где-то в этой компании, чуть повыше софт-RAID. Фактически LVM может выполнять большинство полезных функций RAID, таких как объединение нескольких дисков в один и разделение данных на "полосы",— но это другой протокол и поэтому путать его с софт-RAID’ом не стоит. С точки зрения LVM, RAID (в том числе его софт-вариант) является одним физическим устройством. То есть LVM запускается позже, а потому стоит в списке (стеке) дисковых протоколов выше.


Конкретика


Главный объект LVM — группа томов (VG, Volume Group) — это единый каталог, на "входе" которого физические тома (PV, PhyVolume, соответствующие разделам физических дисков) или выглядящие как таковые псевдодиски (тот же RAID, например). В системе может быть несколько таких групп.

 

Ресурсы группы распределяются единицами распределения, называемыми логическими и физическими экстентами (LE, Logical Extent и PE, PhyExtent), что соответствует кластеру в файловой системе, странице в виртуальной памяти или экстенту в базах данных. Размер экстента — свойство группы томов и является постоянным для всех логических дисков. Относительно логического экстента можно сказать, распределен он данному логическому диску или нет — то есть это "ходячая валюта" LVM.


Физические экстенты по размеру точно такие же, как и логические. Единственное отличие в том, что логические экстенты всегда идут подряд, а на самом деле могут располагаться на нескольких PV. Можно установить два режима трансляции LE в PE. Первый — последовательный, когда сначала нумеруются физические экстенты одного PV, потом другого и т.д. Иногда лучше (производительнее) будут работать "полоски": один экстент берется с одного физического тома, второй со второго и т.д.


В версии LVM1 "полосатый" набор уже не может быть расширен или перестроен. В LVM2 группа может состоять из любой последовательности "полосок" и "последовательностей". Например, 3х200 экстентов, плюс 1х400, плюс 4х100. Конечно, такой "пыжик" будет работать с не предсказуемой заранее скоростью, но, в крайнем случае, не медленнее, чем отдельный диск.

 


Volume Group — это единый каталог физических дисков


Логические тома, в свою очередь, могут быть отформатированы любой из доступных файловых систем. Собственно, в этой части LVM уже ничего не делает — просто в один момент, наступающий на ранней стадии загрузки, все приложения начинают видеть в /dev логические тома LV, Logical Volume(s) так же, как и обычные блочные устройства. Драйвер LVM поддерживает сквозной доступ к блокам этих томов, так что отличить их от физических сложно. Поскольку это происходит до запуска файловых систем, то остальное им и знать не обязательно.

 


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


Практика


Собственно, самое первое (то есть увидеть логический том) очень просто — сейчас они обычно выглядят как /dev/VolGroup00 и так далее. Это корневой элемент набора, доступ к которому жестоко ограничен. Вы, как обычный пользователь, даже не сможете посмотреть его оглавление. Более полную, хотя и примитивную, информацию о группах и логических томах дает команда lvs. Настоящий источник сведений о LVM — команды, заканчивающиеся на *display, такие, как vgdisplay.


Реальные операции, такие, как инициализация, создание группы и распределение между логическими томами, производится набором (около двух дюжин) утилит. Конечно, понадобится еще немало предварительной подготовки, если вы хотите мигрировать с прошлой версии или вообще не располагаете LVM в составе своего ядра.


Перед созданием новой группы или для добавления нового физического ресурса нужно иметь что распределять. Для этого необходимо отметить (отформатировать) в качестве PV диск или раздел. Делается это при помощи утилиты pvcreate — например, "pvcreate /dev/hda1" или даже "pvcreate /dev/hda" (в последнем случае весь диск станет одним разделом PV). Если диск до этого содержал заполненную таблицу разделов в MBR и утилита отказывается маркировать такой диск, можете затереть два сектора MBR и обновить копию в кэше с помощью команд:

 

dd if=/dev/zero of=/dev/hda bs=1k count=1
blockdev — – rereadpt /dev/hda

 

Конечно, если вы не уверены в том, что делаете, то лучше никогда не выполнять эти команды. Лучшего способа потерять все данные на винчестере просто не существует! Впрочем, добрые люди за недорого помогут вам их вернуть — и это правильно: деньги должны переходить от тех, кто не читает man-страницы, к тем, кто их читает!


В качестве опции можете указать -M2 в строке pvcreate — это создаст физический том нового формата, который всем хорош, кроме совместимости со старым LVM1. То же самое делается значением по умолчанию параметром format в /etc/lvm/lvm.conf.


Раньше PV помечался типом раздела 8Eh — но теперь это не обязательно: если вам так приятно, можете сделать это самостоятельно с помощью fdisk, командой t. Только делайте это до выполнения pvcreate, не то придется задавать эту команду заново — fdisk "нежно" запишет новый Boot Record в сектор 0 и тем самым разрушит маркер PV. Версия LVM2 игнорирует тип раздела и для детекции PV ей достаточно найти маркер в первых блоках раздела.


Всё, PV создан — теперь можно присоединять его к новому или существующему набору (группе). Группа создается такой же простой командой vgcreate. Например, "vgcreate имя-группы /dev/hda1/dev/hda3/dev/hdb" создаст группу из трех физических томов в виде двух разделов hda и одного целого винчестера hdb. Тут же можно указать размер экстента, который задается ключем -s (от "size"). По умолчанию этот размер составляет 32 Мб.


Если вы используете LVM1 и DEVFS, то устройства нужно указывать так, как обозначаются физические устройства в DEVFS. К примеру, /dev/ide/host0/bus0/target0/lun0/part1. Это еще один повод не использовать ни LVM1, ни DEVFS.


Кстати, после очередных замечаний, выдвинутых в его адрес, последний куратор разработки DEVFS вообще исчез с Линукс-сцены — и о его судьбе никто ничего не знает. Делайте выводы.

 

Если вы только что создали группу, она не станет тут же запускаться в работу после перезагрузки. Для этого нужно активизировать ее через "vgchange -ay имя-группы". Эта же команда без имени активизирует (вообще-то "-ay" обозначает available-yes, то есть "доступно", так что скорее доступ-изирует) все группы. Сделано так потому, что не все операции и режимы работы вы можете изменить на работающей группе VG. Например, вам придется отключить группу для задания режима динамического расширяемого набора или для ограничения максимального количества логических томов. Соответственно, "vgchange -an имя-группы" и "vgremove" отключает и удаляет заданную группу.


Последней операцией, которую мы рассмотрим, будет добавление в группу нового ресурса — думаю, это самая полезная операция. По крайней мере, для меня на сегодня самая актуальная. Этим целям служит команда "vgextend имя-группы имя-инициализированного-устройства". В моем случае это выглядело, как "vgextend VolGroup00 /dev/hda1" (хэх, ну вы поняли — после покупки компа винда там прожила недолго).


Посмотреть судьбу PV можно с помощью команды pvdisplay — выданная без параметров, она выводит данные по всем PV во всех группах. В частности, показывает количество оставшихся свободных PE и другие интересные вещи. Для просмотра всех PV, даже вне групп, служит pvscan.

 


В современных дистрибутивах Linux есть и встроенные графические
менеджеры управления LVM


Как распределить новый "кислород" между логическими дисками, в общем случае посоветовать нельзя. Я, например, в качестве неотложной помощи сразу нескольким каталогам подкинул два новых гигоса в корень:

 

lvextend -L +2g /dev/VolGroup00/LogVol00 /dev/hda1

 

В принципе, не было никаких причин задавать PV, откуда брать эти экстенты — ведь, поскольку диск (в виде остальных PV) заполнен, то взять их из какого-нибудь другого места просто проблематично. Секундное жужжание — и "... sucsessfully resized". Бинго! Остальное пусть полежит в группе — когда-нибудь пригодится.


Еще один шаг


Да уж: мы легко изменили размер логического диска, и на этом работа LVM, собственно, заканчивается — так что не зря мы кричали "ура!". Мы можем выдать команду lvdisplay — и убедиться, что размер нашего тома увеличился соответственно. Однако, опросив df, новых объемов не увидим — размер дисков остался прежним, и мы снова получим переполнение диска в ближайший момент.


Причина проста: файловая система ext2/3-FS не исследует истинный размер блочного устройства при монтировании. Впрочем, другие файловые системы тоже не склонны это делать. Тот же FAT явно содержит размер раздела в блоках в загрузочной записи, и, кроме того, резервирует только определенное количество элементов FAT. Другие системы тоже в различной форме содержат размер тома — явно (как часть "лейбла") или неявно (в виде длины списка распределяемых кластеров).


В отличие от того же FAT, Linux не требует "чуда" в виде Partition Magic или подобных утилит. Вполне штатная процедура etx2online выполняет "ресайз" файловой системы. Раньше этим занималась resize2fs, но для этого нужно было отмонтировать устройство — какое уж тут горячее подключение... Для использования ext2online ядро должно быть собрано с соответствующим патчем, что верно для всех последних дистрибутивов.


Другие файловые системы, такие как reiserfs, xfs и jfs, также поддерживают динамическое изменение размера, хотя иногда для этого нужно указать новый размер будущей системы.

 

Остальные команды легко обнаружить методом рекурсивного поиска, начиная с man lvm. Большинство интересующих вас команд по умолчанию расположены в /usr/sbin, так что даже просмотр списка файлов уже объясняет многое. Например, легко догадаться, что делают lvdisplay, pvscan или vgreduce.


Резюме


Конечно, если у вас стоят мощные массивы дисков и вы каждую неделю добавляете еще пару-тройку новых, то выгода от LVM в таком случае будет просто огромной. Алгоритм "скопировал и перемонтировал" для целых массивов выглядит устрашающе. Но даже и на рабочей станции вы периодически, раза два в год, можете испытывать напряги со схемой разбивки диска. Теперь же у вас есть цивилизованный способ решения этих проблем. И называется он LVM.


              2006.06.23       Автор: Арсений Чеботарев


   Обсудить статью в форуме>>
    Читайте также на эту тему:
   
     
     
     
     
  Последний номер | Архив | Секретная комната | Рекламодателям | Подписка | Контакты