Для тех, кто с lvm пришёл на vinum
В LVM есть такие понятия как:
LV - логический том. Городится на vg.
VG - группа томов. Городится на pv.
PV - физический том. Является проекцией.
В vinum используются такие понятия как:
volume - том.
plex - сплетение.
subdisk - поддиск. представляет часть реального раздела жёсткого диска или весь диск.
drive - раздел реального диска, в котором размещаются subdisk'и.
LV и volume похожи и представляют собой конечный том размеченный под файловую систему, которую мы потом будем монтировать и нагружать файлами.
PV и drive похожи и представляют собой физический том на реальном диске, за той лишь разницей, что в linux PV может быть на всё блочное устройство, т.е. диск.
В vinum subdisk - сущности для выделения блока из drive и запихивания его в plex. Их может быть в plex несколько.
А в LVM используется такая сущность как extent (если не ошибаюсь) блоки по 4МБ, на которые делится PV. По сути они аналогичны subdisk в vinum. Но т.к. в LVM в обычных ситуациях оператор не заморачивается с extent'ами, LVM сам их распределяет, какой extent на PV, какому LV предоставить в пользование.
А вот посерединке как раз и заплетается это всё по разном.
В LVM VG включает в себя несколько PV, и все exten'ы объединяет в единое пространство, из которого потом оператор создаёт LV (логические тома). VG содержит с одной стороны пачку PV'шек, с другой стороны пачку LV'шек, которые для себя насоздавал оператор.
В Vinum же plex включают в себя множество subdisk, что в LVM у нас extent'ы. А вот по отношению к volume plex ведёт себя не так, как VG и в этом большая трудность для понимания. Plex не может относиться к нескольким volume, он всегда цепляется только к одному volume. Но у volume может быть несколько plex'ов. И относиться к plex'ам, как к VG категорически не следует. Plex имеет разные типы организации subdisk'ов: concat, stripe, raid5 - от выбора которых зависит его дальнейшие возможности расширения и использования. Так чтобы зеркалировать данные хранимые на реальных дисках, необходимо к volume подцепить два plex'а, на которые он будет писать параллельно. В то время, как в LVM VG по прежнему останется один и там всё адресуется к PV, т.е. в случае зеркала мы из LV пишем на два разных PV одновременно.
И теперь к моему случаю. Я не понимал, как мне на рабочей системе не останавливая volume переместить его с одного реального раздела на другой.
В LVM это делается командой pvmove <pv> и LVM вытесняет с него все данные освобождая все extent'ы, по завершению этой команды освободившийся диск можно утилизировать, например присоединить к другому VG. При этом оператор не видит, что там творится. Но если заглянуть под капот, то фактически LVM зеркалирует extent'ы с этого pv на другие pv, а когда все 100 % этого pv зеркалировалось, то с него данные удаляются. И вот если это понимать, то становится понятно, что нужно хотеть от vinum.
Исходное. Допустим мы имеем volume data, к которому прицеплен plex с организацией concat...
Вот тут я выматерюсь! Сидишь, смотришь на этот concat и думаешь, что как-то через него должно всё решаться, или плексу нужно что-то сказать, или subdisk подвигать с помощью команды move. Так вот ХРЕН! Это ни разу не интуитивно.
... продолжим. К нашему plex прицеплен subdisk, который берёт весь реальный раздел реального диска. Этот реальный диск с реальным разделом мы решили освободить.
Для этого присоединяем новый диск, делаем на нём реальный раздел с типом freebsd-vinum, и создаём новый plex с организацией concat, который присоединяем к нашему volume data, и к этому новому plex присоединяем новый subdisk, который берёт целый реальный раздел нового диска. Таким образом у нас получилось к volume data подсоединено два plex'а:
- один старый в статусе up
- другой новый в статусе down
Командуем нашему volume'у data:
Они синхронизирует plex'ы. Надеюсь здесь не нужно объяснять, что такое зеркало, и почему plex'ы должны быть одинаковые по объёму?..
После того, как синхронизация прошла отсоединяем наш старый plex:
и удаляем его со всеми subdisk'ами:
Выдераем старый диск, и выбрасываем.
Прошу прощения, что много воды и мало команд по существу. Но команды по созданию томов vinum вы в документации легко прочтёте. А вот понимать, как с этим зверем обращаться, эти документации не пишут. Что очень сильно печалит.
Вот не помню на счёт LVM, лень перечитывать, может ли он на живом работающем логическом томе сделать расслоение (stripe). Но vinum со своими plex'ами позволяет с организации concat, пересесть на stripe и даже на raid5. Вообще когда разобрался vinum куда логичней и проще и понятней мне показался.
Правда LVM не даёт себе в ногу выстрелить и там похерить данные неосторожным движением очень сложно. А вот в vinum на тестовой машине, я ломал систему так, что машина перезагружалось. Причём один раз это было потому что я plex отключил от volume и потом в этот plex добавил subdisk - всё - перезагруз! Правда потом собрал конфиг по памяти запустил, сделал на volume fsck и том живой, данные на месте. В общем, после этих экспериментов, как-то сыкатно на него сажать важные данные. Рассыпется, и что с ним делать? Собирать по крохам?