Чи існує простий спосіб переміщення / копіювання логічного тома з однієї групи томів в іншу? (LVM2)


15

Я переставляю купу дисків на своєму сервері вдома, і опиняюся в положенні бажати перенести купу логічних томів LVM в іншу групу томів. Чи є простий спосіб це зробити? Я бачив згадку про cplvкоманду, але це, здається, або старе, або не те, що коли-небудь було доступне для Linux.

Відповіді:


20

Якщо ви можете домовитись, щоб логічний том був у окремому підмножині фізичних томів від решти групи вихідних томів (це lvconvert sourcevg/sourcelv /dev/pv1 ...може допомогти), ви можете використовувати vgsplitдля розділення lv на новий vg та vgmergeоб'єднання нового vg у цільовий vg.

Хоча LVM має дзеркальну функцію, ви не можете (розумно) використовувати його для копіювання між групами гучності, оскільки обидві ніжки дзеркала повинні жити на одному vg, і асоціація не може бути розірвана .

Ви можете скопіювати том LVM в інший, як ви скопіювали будь-який том в інший: створіть цільовий lv відповідного розміру, а потім скопіюйте вміст dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M. Якщо об'єм джерела активний, ви можете використовувати LVM, щоб зробити послідовну копію: спочатку зробіть знімок з lv-джерелом lvcreate -s, а потім скопіюйте знімок.


1
Блискучий Gilles .... vgsplit / vgmerge, ймовірно, буде просто чудово: після цього я можу використовувати pvmove для переміщення фізичних розширень на новий диск, а потім видалення старого тома з VG.
jkp

Сором, зрештою, це не спрацювало для мене внаслідок різної міри. Якщо це не проблема для вас, хоча я пропоную цей метод був би найпростішим.
jkp

Після dd(якщо ви не поспішаєте скидати старі томи), не забудьте змінити UUID нових файлових систем: tune2fs -U random / dev / targetvg / targetlv
midenok

2
pvmove -n lvol1 /dev/sdb1 /dev/sdc1

pvmove може переміщувати дані між фізичними томами: Посібник адміністратора LVM


10
Але не між групами томів.
MattBianco

Повторюся: це не працює для двох окремих
томових

Спочатку vgextendvg1 з новим pv, потім pvmoveваш lv до нового pv, vgsplitтимчасовим vg, який ви vgmergeв vg2. Потім pvmoveзнову lv до vg2 оригінального pv, vgreducevg2, щоб прочитати проміжний pv. Або щоб уникнути проміжної копії, ви можете спочатку об'єднати vg1 у vg2, pvmovelv1 і vgsplitзнову vg1 з vg2. Це повинно відповісти на заперечення @ MattBianco і @kissgyorgy і еквівалентно рішенню @Gilles , але замінюючи знімок і низькорівневих ddнаpvmove
marcz

1

Станом на LVM в Debian ділянці (9.0), а саме 2.02.168-2, це можливо зробити копію логічного тому по групах томів , використовуючи комбінацію vgmerge, lvconvertі vgsplit. Оскільки переміщення - це комбінація копії та видалення, це також буде працювати для переміщення.

Крім того, ви можете використовувати pvmoveпросто переміщення гучності.

Повний автономний приклад сеансу з використанням циклічних пристроїв і lvconvertдалі.

Короткий зміст: ми створюємо групу томів vg1з логічним томом lv1, а vg2також lv2і робимо копію lv1в vg2.

Створення файлів.

truncate pv1 --size 100MB
truncate pv2 --size 100MB

Налаштування циклічних пристроїв на файли.

losetup /dev/loop1 pv1
losetup /dev/loop2 pv2

Створіть фізичні обсяги на петльових пристроях (ініціалізуйте петлеві пристрої для використання LVM).

pvcreate /dev/loop1 /dev/loop2

Створення груп томів vg1і vg2на /dev/loop1і /dev/loop2 відповідно.

vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2

Створення логічних томів lv1і lv2на vg1і vg2відповідно.

lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2

Створення файлових систем ext4 на lv1та lv2.

mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2

За бажанням напишіть щось, lv1щоб потім можна було перевірити, чи копія була створена правильно. Зробити vg1неактивним.

vgchange -a n vg1

Запустіть команду злиття в тестовому режимі. Це зливається lv1в lv2.

vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1

І тоді по-справжньому.

vgmerge -A y -l -v vg2 vg1

Потім створіть із lv1використання дзеркальну пару RAID 1 lvconvert. <> Аргумент каже , lvconvertщоб зробити дзеркальну копію lv1_copyна /dev/loop2.

lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2

Потім розділіть дзеркало. Новий НН зараз lv1_copy.

lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1

Зробити vg2неактивним.

vgchange -a n vg2

Потім (тестовий режим)

vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1

Насправді

vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1

Отриманий результат:

lvs
[...]
lv1        vg1       -wi-a-----  12.00m
lv1_copy   vg2       -wi-a-----  12.00m
lv2        vg2       -wi-a-----  12.00m

ПРИМІТКИ:

1) Більшість цих команд потрібно запустити як root.

2) Якщо в двох групах томів є дублювання імен логічних томів, vgmergeвідмовитися продовжувати.

3) При злитті:

Logical volumes in `vg1` must be inactive

І на розкол:

Logical volume `vg2/lv1` must be inactive.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.