LVM — это просто!

    Собственно, хочется просто и доступно рассказать про такую замечательную вещь как Logical Volume Management или Управление Логическими Томами.
    Поскольку уже давно пользуюсь LVM-ом, расскажу что он значит именно для меня, не подглядывая в мануалы и не выдёргивая цитаты из wiki, своими словами, чтобы было понятно именно тем кто ничего о нем не знает. Постараюсь сразу не рассказывать о всяческих «продвинутых» функциях типа страйпов, снапшотов и т.п.

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

    есть 3 уровня абстракции:
    1. PV (Physical Volume) — физические тома (это могут быть разделы или целые «неразбитые» диски)
    2. VG (Volume Group) — группа томов (объединяем физические тома (PV) в группу, создаём единый диск, который будем дальше разбивать так, как нам хочется)
    3. LV (Logical Volume) — логические разделы, собственно раздел нашего нового «единого диска» ака Группы Томов, который мы потом форматируем и используем как обычный раздел, обычного жёсткого диска.
    это пожалуй вся теория. :) теперь практика:
    для работы нужны пакеты lvm2 и возможность работать с привелегиями root поэтому:
    $ sudo bash
    # apt-get install lvm2

    допустим у нас в компе есть жёсткий диск на 40Гб и нам удалось наскрести немного денег и наконец-то купить себе ТЕРАБАЙТНИК! :))) Система уже стоит и работает, и первый диск разбит одним разделом (/dev/sda1 как / ), второй — самый большой, который мы только подключили — вообще не разбит /dev/sdb…
    Предлагаю немножко разгрузить корневой диск, а заодно ускорить (новый диск работает быстрее старого) и «обезопасить» систему с помощью lvm.
    Можно делать на втором диске разделы и добавлять их в группы томов (если нам нужно несколько групп томов),
    а можно вообще не делать на диске разделы и всё устройство сделать физическим разделом (PV)

    root@ws:~# pvcreate /dev/sdb
    Physical volume "/dev/sdb" successfully created

    Создаём группу томов с говорящим названием, например по имени машины «ws», чтобы когда мы перетащим данный диск на другую машину небыло конфликтов с именами групп томов:

    root@ws:~# vgcreate ws /dev/sdb
    Volume group «vg0» successfully created

    желательно внести с корневого раздела такие папки как /usr /var /tmp /home, чтобы не дефрагментировать лишний раз корневой раздел и ни в коем случае его не переполнить, поэтому создаём разделы:

    root@ws:~# lvcreate -n usr -L10G ws # здесь мы создаём раздел с именем «usr», размером 10Gb
    Logical volume «usr» created
    по аналогии делаем то же для /var, /tmp, /home:
    root@ws:~# lvcreate -n var -L10G ws
    root@ws:~# lvcreate -n tmp -L2G ws
    root@ws:~# lvcreate -n home -L500G ws
    у нас ещё осталось немного свободного места в группе томов (например для будущего раздела под бэкап)
    посмотреть сколько именно можно командой:
    root@ws:~# vgdisplay
    информацию по созданным логическим томам
    root@ws:~# lvdisplay
    информацию по физическим томам
    root@ws:~# pvdisplay

    разделы что мы создали появятся в папке /dev/[имя_vg]/, точнее там будут ссылки на файлы,
    lrwxrwxrwx 1 root root 22 2009-08-10 18:35 swap -> /dev/mapper/ws-swap
    lrwxrwxrwx 1 root root 21 2009-08-10 18:35 tmp -> /dev/mapper/ws-tmp
    lrwxrwxrwx 1 root root 21 2009-08-10 18:35 usr -> /dev/mapper/ws-usr
    lrwxrwxrwx 1 root root 21 2009-08-10 18:35 var -> /dev/mapper/ws-var
    и т.д…

    дальше lvm уже почти кончается… форматируем наши разделы в любимые файловые системы:
    root@ws:~# mkfs.ext2 -L tmp /dev/ws/tmp
    root@ws:~# mkfs.ext4 -L usr /dev/ws/usr
    root@ws:~# mkfs.ext4 -L var /dev/ws/var
    root@ws:~# mkfs.ext4 -L home /dev/ws/home

    кстати, не плохо было бы сделать раздел подкачки:
    root@ws:~# lvcreate -n swap -L2G ws
    root@ws:~# mkswap -L swap /dev/ws/swap
    root@ws:~# swapon /dev/ws/swap

    создаём папку и подключая по очереди новообразовавшиеся тома, копируем в них нужное содержимое:
    root@ws:~# mkdir /mnt/target
    root@ws:~# mount /dev/ws/home /mnt/target
    копируем туда всё из папки /home своим любимым файловым менеджером (с сохранением прав доступа), например так ;):
    root@ws:~# cp -a /home/* /mnt/target/
    root@ws:~# umount /mnt/target/
    кстати, для папки temp необходимо только поправить права, копировать туда что-либо необязательно:
    root@ws:~# mount /dev/ws/tmp /mnt/target && chmod -R a+rwx /mnt/target && umount /mnt/target/
    добавляем нужные строчки в /etc/fstab, например такие:
    /dev/mapper/ws-home /home ext4 relatime 0 2
    /dev/mapper/ws-tmp /tmp ext2 noatime 0 2
    /dev/mapper/ws-swap none swap sw 0 0
    и перезагружаемся… (продвинутые господа могут обойтись без перезагрузки ;))

    На вкусное, хочу предложить более продвинутую штуку:
    допустим у нас есть система с разделом на LVM, а жёсткий диск начал сбоить, тогда мы можем без перезагрузки переместить всю систему на другой жёсткий диск/раздел:

    # On-line добавление/удаление жёстких дисков с помощью LVM (пример)

    root@ws:~# pvcreate /dev/sda1 # наш эмулятор сбойного диска
    Physical volume "/dev/sda1" successfully created

    root@ws:~# pvcreate /dev/sdb1 # наш эмулятор спасательного диска
    Physical volume "/dev/sdb1" successfully created

    root@ws:~# vgcreate vg0 /dev/sda1 # создаю группу томов vg0
    Volume group «vg0» successfully created

    root@ws:~# lvcreate -n test -L10G vg0 #создаю раздел для «важной» инфы
    Logical volume «test» created

    root@ws:~# mkfs.ext2 /dev/vg0/test # создаю файловую систему на разделе
    root@ws:~# mount /dev/mapper/vg0-test /mnt/tmp/ #монтирую раздел
    … # заполняю его информацией, открываю на нем несколько файлов и т.п.

    root@ws:~# vgextend vg0 /dev/sdb1 # расширяю нашу групу томов на «спасательный» диск
    Volume group «vg0» successfully extended

    root@work:~# pvmove /dev/sda1 /dev/sdb1 #передвигаю содержимое с «умирающего» диска на «спасательный»
    /dev/sda1: Moved: 0.9%
    /dev/sda1: Moved: 1.8%

    /dev/sda1: Moved: 99.7%
    /dev/sda1: Moved: 100.0%

    root@work:~# vgreduce vg0 /dev/sda1 # убираю «умирающий» диск из группы томов.
    Removed "/dev/sda1" from volume group «vg0»

    Итого:
    Я создал логический раздел, отформатировал его, примонтировал и заполнил нужными данными, затем переместил его с одного устройства на другое, при этом раздел остался примонтирован и данные всё время оставались доступны!
    Подобным образом мне удавалось без перезагрузки перенести всю систему с умирающего диска на рэид-массив. :)

    А это моя любимая ссылка по LVM: xgu.ru/wiki/LVM

    P.S. Прошу простить за опечатки, меня постоянно отвлекали =))

    P.P.S. Ах, да!!! Самое главное и самый большой минус LVM — он не читается grub'ом
    поэтому раздел /boot должен находиться вне LVM на отдельном разделе жёсткого диска,
    иначе система не загрузится.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 74
    • 0
      Хороший материал.
      Как интересно как с поддержкой всего этого дело под виндами?
      • 0
        Вроде максимум что можно добиться — чтение с таких разделов.
        • 0
          А я хотел при помощи такой штуки объеденить три своих харда поставить порой винду и линух, жаль. отя как время подойдет переставлять все, я еще раз почиаю.
          • 0
            *парой *Хотя
            • +1
              Вам в RAID нада тогда уж.
              • 0
                Возьмите LVM, насоздавайте разделов и скормите их винде, установленной под XEN.
                • 0
                  Тонко, посмеялся:)
            • +2
              под win есть «динамические диски» — как мне показалось, практически то же самое… только мышкой и не так понятно :)
              • 0
                Динамические диски. Только аккуратней с ними — если что-нибудь случится с одним из винтов, ни одна утилита Вам не поможет восстановить данные со всех(!) дисков. (Если я не ошибаюсь :)
                • 0
                  Ну это нормальная ситуация в любом подобном решении.
                  • 0
                    Есть unionfs — позволяет объединять логические разделы в один большой, с последовательным заполнением.
                    Т.е. есть 2 диска по 100 Gb — объединяем — первые 100 Gb пишутся на первый диск, следующие — на второй.
                    Прогиб по скорости, НО — если что-то умрет — оно умрет только со своим куском данных.
                    Погуглите.
                    • 0
                      Хотите сказать unionfs работает в windows?
                      P.S. Я не пользуюсь windows, просто интересно, если это действительно так. :)
                      • 0
                        ? Я???
                        Нет, я мало того что не хочу этого говорить, так еще и не скажу!
                        Unionfs работает только в *BSD и Linux, ну может еще куда-то спортировали.
                        какой-такой виндувс…
                    • 0
                      Еще есть такая удобная штука rm.pp.ru/info/mhddfs
                • 0
                  Спасибо, уважаемый!
                  Давно хотел изучить эту тему, а тут Вы. Как раз во время и очень доходчиво. Вам +, а материал в закладки.
                  • 0
                    О как раз пришлось перепродать часть серва, собрал остатки свободного места воедино при помощи LVM и получил 100гб =)
                    • 0
                      «Поздравляю, Шарик, ты балбес!» ©

                      Страйп-массив на сервере — это что-то!
                      • 0
                        а причём тут страйп?
                        • –1
                          Потому что страйп-массив — это логический эквивалент «обрал остатки свободного места воедино».
                    • –2
                      Сравнение Ext3 LVM2 и ZFS: Solaris ZFS and Red Hat Enterprise Linux Ext3 File System Performance White Paper.

                      После такого на LVM не захочется смотреть. (А что делать?)
                      • 0
                        Ждать btrfs или шагов от Oracle по изменению лицензионной политики ZFS.
                        • НЛО прилетело и опубликовало эту надпись здесь
                        • 0
                          Из топика в топик, ну толсто же.
                          • 0
                            Вроде первый раз ссылку запостил, нет?
                          • 0
                            использовать *BSD/*SunOS*? а зачем что-то еще?
                          • 0
                            Вот кстати, а как с производительностью у LVM? Интересует личный опыт.

                            Вроде, кстати, LVM умеет шифровать. Так вот, а при включённом шифровании какова производительность?
                            • 0
                              По поводу производительности, отличий «на глаз» не заметил. По моим тестам тоже всё в районе погрешностей.
                              С шифрованием у меня как-то не срослось, я его попробовал и понял что мне оно не надо — у меня практически нет никакой ценной инфы на локальных машинах…
                              • 0
                                LVM не умеет шифровать. Но для шифрования диска используется вот по какой причине. Для линукса нужно хотя бы 2 раздела: / и swap. Так вот, если шифровать 2 раздела по отдельности, то придётся два раза вводить пароль при загрузке. Можно конечно при каждой загрузке перешифровывать /swap заново сгенерированным ключом, но тогда suspend не получится использовать.

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

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

                                • 0
                                  ыы производительность норм, шифровать lvm не умеет сам, я шифровал разделы отдельно, потом поверх них идет lvm
                                  • 0
                                    собственно да, для шифрования используется luks (по крайней мере в моём случае).
                                  • 0
                                    А 6 HDD тут при чем? Давно уже по меткам модно монтировать, бубунта по дефолту так и делает.
                                    • 0
                                      Да там и по меткам пробовали — не плучается. Винчестеры стартуют вразнобой, система им отдаёт разные устройства /dev. Цитата: "(монтирование по UUID почему-то вообще не срабатывает — будто бы идентификаторы одинаковые)".
                                      • 0
                                        Еще один наводящий вопрос — при чем тут LVM.
                                        • +1
                                          По второй ссылке нет ничего про LVM. Признаю, ошибся.
                                    • 0
                                      6hdd не актуально, ибо lvm основывается на uuid'ах устройств и метадате, потому абсолютно не важно как будут называться блочные устройства.
                                      • 0
                                        Волков боятся — в лес не ходить :)
                                        • +1
                                          Кстати, про восстановление — там винт сломался, если кусочек ФС на винте лежит без дублирование то восстановление вне зависимости от LVM будет тем еще счастьем.
                                          • 0
                                            Невнимательный идиот!
                                            дублирования,
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                          • 0
                                            LVM это не так просто, как glusterfs.
                                            gluster.org/
                                            • 0
                                              Не знаю мне гораздо проще скопировать систему на новый винт с livecd (cp -a на много более юзабельное шаманство ;)). Так и не понял в чем «безопасность» и в чем прикол такой организации на десктопе. в прочем «кто как хочет — так и дрочит» (с) из к/ф «Брат»
                                              • 0
                                                Под «безопасностью» я имел ввиду вынос /tmp и /home на отдельный раздел из корня, чтобы не получилось так что машина не грузится потому, что диск переполнен.
                                              • 0
                                                Можно ли с ним сделать такое:
                                                Создать раздел на 16 гиг, чтобы на нем работала и жила система, и реплицировать этот раздел на флешку 16 гиг, чтобы можно было вытащить его и получить копию минутной например давности?
                                                • 0
                                                  можно с помощью снапшотов.., обычно это делается так:

                                                  # lvcreate -s -n snap_home -L2G /dev/ws/home # в той же группе томов создаётся снапшот нужного раздела.

                                                  # mount /dev/ws/snap_home /mnt/snapshots # полученый раздел прицепляется в папку,

                                                  # tar -cvzf home.tgz /mnt/snapshots # с него забирается инфа (например можно всё сразу залить в архив).

                                                  # umount /dev/ws/snap_home # отцепляем раздел

                                                  # lvremove /dev/ws/snap_home # удаляем за ненадобностью.

                                                  • 0
                                                    А реплицировать «на лету» оно не может, чтобы не делать долгое копирование? Зеркалирование не поможет?
                                                    • 0
                                                      Честно говоря не совсем понимаю, что имеется в виду под «реплицировать «на лету»» и получить копию минутной например давности.
                                                      Если нужен «снимок» в конкретный момент времени — делаем снапшот, если 2 обновляемые в реальном времени копии fs — зеркалирование… можно делать и то и другое при желании.
                                                      Средствами lvm можно делать, как snapshots, так и зеркалирование отдельных lv.
                                                    • 0
                                                      извините,
                                                      снапшот таром?
                                                      • 0
                                                        простите, был неправ. осилил замысел :)
                                                  • +1
                                                    Вон там отличный мануал с картинками

                                                    www.ibm.com/developerworks/ru/library/l-lvm2/index.html
                                                    • 0
                                                      Это всё, конечно, хорошо. Ровно до тех пор, как у вас один из дисков накроется :) Потом будет очень много танцев с бубнами вокруг того, чтобы восстановить данные.
                                                      • +1
                                                        опыт показывает что, если нет мониторинга винтов и устойчивого к сбоям рэида или зеркалирования (можно даже lvm'ом) — танцы с бубном чтобы восстановить данные будут в любом случае. ;)
                                                        • 0
                                                          Ну. Там будут танцы вокруг повреждённого диска. А тут сбой одного диска повреждает вообще весь массив. Это совсем не ice какой-то.
                                                          • 0
                                                            Никаких танцев. Если резервирования не было, то меняешь винт на чистый, запускаешь проверку диска, исчезнувшие данные помечаются в системе как отсутствующие, а все остальное продолжает работать. Результат тот же самый, что и без LVM. Просто тут немного подольше будут сохранившиеся данные возвращаться в онлайн.
                                                          • +2
                                                            Я, как человек с жопой с гораздо более толстым слоем ракушек, могу сказать, что RAID от исполнения танцев тоже не спасает, просто несколько снижает вероятность, зато значительно усложняет исполняемые па. ;(
                                                            • 0
                                                              Как человек собственной жопой прочувствовавший, что уровень рейда не влияет на качество фарша из данных, если того захотел контроллер — поддерживаю!
                                                              Террабайт белого шума из 4-х хардов на 5-ом рейде начисто отучили доверять передачу данных устройствам сложнее шлейфа.
                                                        • +2
                                                          чот поздновато статейка вышла… лет эдак на 8 минимум :)
                                                          вспоминаю молодость на AIX :)
                                                          • 0
                                                            Я побаиваюсь делать ЛВМ на несколько дисков без райда, ведь если умрёт один диск из массива, то с остальных инфу скорее всего уже не вытащишь.

                                                            Хотя у меня около 1.5 лет проработала связка 500+500 физические тома => 1000 логический том
                                                            • –1
                                                              зачем делать лвм на рейде? буквально выходит рейд на рейде ?!
                                                              • 0
                                                                Затем, что если в /var/lib/mysql, к примеру, место кончится, то туда можно налету добавить гуляющий шмат из /home.
                                                                • 0
                                                                  В ZFS-пуле (грубо говоря — это размеченное пространство), например, можно создать отдельную файловую систему (ZFS или UFS). Потом ещё одну, ещё и ещё — сколько нужно. При этом каждая файловая система будет иметь столько свободного места, сколько осталось в пуле.

                                                                  LVM может распределить тома, чтобы в каждом томе было столько же свободного места (виртуально, разумеется), сколько осталось на дисках?
                                                                  • +1
                                                                    Увы, будь это FS — может, и смог бы. А так — нет. На нем нарезаются разделы, которые форматятся уже в нужную фс. А-ля слайсы на разделе, которые потом форматить (раз уж вспомнили о UFS).

                                                                    Меня эта задача, точнее ее решение под линухом, также интересует. Нет, я знаю про ZFS через FUSE. Но это ж не то.
                                                                    • 0
                                                                      Если не критична скорость, можно создать lvm на файлах 'с дырками' (sparce) когда файл на диске занимает ровно столько места, сколько в него записывали, а не сколько выделено с помощью seek.
                                                                      Тормоза будут из-за реализации loop (хотя на сколько я понимаю есть альтернативы) и повышенной фрагментации (два уровня — дырявый файл фрагментируется и фрагментация самой фс).
                                                                  • 0
                                                                    LVM это не RAID, а менеджер логических томов.
                                                                • 0
                                                                  >> GRUB has support for LVM and RAID since version 1.95.
                                                                  grub.enbug.org/LVMandRAID
                                                                  • 0
                                                                    Все здорово, а можно ли с помощью ЛВМ сделать RAID1?
                                                                    • 0
                                                                      да, можно зеркалировать один логический раздел на несколько физических
                                                                      правда я всё же предпочитаю RAID1 + LVM без зеркалирования, мне кажется это проще мониторить.
                                                                    • 0
                                                                      Пересилил лень и решил в общем треде напомнить про unionfs, которая живет под *BSD и есть нативный порт под Linux.
                                                                      Если рассуждать в масштабах проблем автора, то алгоритм такой.
                                                                      Цепляем новенький террабайтник.
                                                                      Форматируем и создаем на нем /home_new
                                                                      Переименовываем /home в /home_old
                                                                      Создаем новый /home
                                                                      Unionfs монитируем на /home /home_old с правами RO и /home_new RW
                                                                      Получаем х+500Gb данных
                                                                      Радостно ждем, когда загнется старый диск.
                                                                      Достаем новый диск (500Gb) из компа и цепляем к ноуту — «Смотри мама, все живо!»
                                                                      • 0
                                                                        «террабайтник» читать как «полу-террабайтник» или предположить, что мы от него только половину отформотировали под /home_new. (*иногда полезно самого себя перечитывать. иногда уже поздно*)
                                                                      • 0
                                                                        P.P.S. Ах, да!!! Самое главное и самый большой минус LVM — он не читается grub'ом
                                                                        поэтому раздел /boot должен находиться вне LVM на отдельном разделе жёсткого диска,
                                                                        иначе система не загрузится.


                                                                        Хочу напомнить, что кроме grub, есть ещё и lilo который может загрузить систему даже если /boot расположен на lvm.
                                                                        • 0
                                                                          root@ws:~# vgcreate ws /dev/sdb
                                                                          Volume group «vg0» successfully created

                                                                          тут небольшой глюк — создана «ws», а не «vg0»
                                                                          • 0
                                                                            Ситуация:
                                                                            Сделал файл, к которому привязано блочное устройство, из которого делается pvcreate, vgcreate, lvcreate, блаблабла, далее mount и ф.с. видна, дальше ей пользуется виртуалка. mount прописан в /etc/fstab/ После перезагрузки блочное устройство пропадает, физ, логические тома -тоже
                                                                            Вопрос: как прописать создание блочного устройства, а затем физического тома, группы, логического тома при загрузке?
                                                                            • 0
                                                                              наверно не туда вопрос. Прописывать pvcreate, vgcreate, lvcreate при загрузке не нужно, один раз выполнил — и если привязать блочн. устр-во к файлу, то все тома и файловые системы на нем уже есть.

                                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.