Почему вам нужен LVM в Линуксе

Как я поменял свое мнение об этой технологии с полного отрицания до фанатизма

Если вы не знаете, что такое LVM, то вот отличная цитата:

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

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

Помню, когда я последний раз читал про LVM, он мне сильно не понравился. Что за идиотский дополнительный слой, подумал я?

Меня раздражали две вещи. Первая - запутаннные названия. Там есть LV, VG, PV и еще куча каких-то других непонятных терминов, в которых я путался. Вторая - глупейшие и усложненные названия блочных устройств вроде /dev/mapper/vg0/lv1. Зачем эти дополнительные сложности, если можно просто набрать /dev/sda1 и не заморачиваться?

Так бы я и остался плохого мнения об этой технологии, если бы не случай.

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

Вот ссылка: единственная нормальная документация по LVM.

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

Что же конкретно мне понравилось в ЛВМе?

Три вещи. Это возможность менять размеры дисков. Более понятные имена дисков. И возможность мигрировать данные с диска на диск без остановки системы. Давайте подробнее остановимся на каждом из этих пунктов.

Возможность менять размеры разделов диска

На работе у меня стоит компьютер, на который я сам устанавливал Xubuntu 18.04. При установке я выбрал ручное разбитие диска и совершил фатальную ошибку - создал маленький раздел для корневой системы. Всего 20 гигабайт:

dima@dima-work:~$ df -hm|grep /dev/sd
/dev/sda1          18645 17473       202  99% /
/dev/sda5          85880 62514     18962  77% /home

Со временем, корневой раздел заполнился файлами работающих контейнеров докера (/var/lib/docker) и теперь я страдаю. Не могу поставить обновления, например. Или мне приходится постоянно лезть и что-то удалять.

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

Более понятные имена разделов

То, что изначально казалось мне излишней сложностью, теперь стало преимуществом. Весь секрет в человеческом именовании группы и самих логических разделов. Разделы можно называть понятными именами вместо sda1 и sdb2.

Например, если группу назвать local, а логические разделы назвать в соответствии с их функцией, то можно создать такую структуру:

/dev/local/root
/dev/local/home
/dev/local/swap
Красивые имена разделов на диске в LVM

Совсем другое дело. Гораздо понятнее, чем /dev/sda1 и гораздо лучше, чем в примерах из интернета вроде /dev/vg0/lv1

Возможность на лету переносить разделы с диска на диск

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

С технологией LVM я спокоен, что если у меня достаточно места на одном из дисков, я просто могу мигрировать данные на него, заменить второй (например на ssd) и потом мигрировать обратно.

На скрине выше видно два физических раздела /dev/sda3 и /dev/sdb1, объединенных в группу localc (немного опечатался). И все логические разделы лежат на первом диске. Второй можно легко заменить.

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

Советы

Объединяйте все винты в одну группу, а ее уже делите на логические разделы как вам нужно.

Потому что перебросить данные с одного физического винта на другой, если они в одной группе - легко. А вот перемещение экстентов между группами - уже сложно. Вообще не представляю, зачем на одной машине держать несколько групп. Даже не могу придумать кейса, где это было бы полезно.

Не делайте большие разделы сразу, потому что расширить их легко, а сжать - сложно. Добавляйте место по мере необходимости в те разделы, где оно необходимо. Ведь часто не знаешь заранее, какая папка в системе распухнет. Имейте запас свободного места, которое можно перераспределить.

Разбивайте диск вручную, оставляйте бут-раздел.

И прочитайте документацию.