В основному я хочу перемістити / скопіювати кілька логічних томів (lv) у нову групу томів (vg). Нова група томів розміщена на новому наборі фізичних томів. Хтось знає, як це зробити безпечно, не пошкоджуючи дані всередині цих логічних томів ??
В основному я хочу перемістити / скопіювати кілька логічних томів (lv) у нову групу томів (vg). Нова група томів розміщена на новому наборі фізичних томів. Хтось знає, як це зробити безпечно, не пошкоджуючи дані всередині цих логічних томів ??
Відповіді:
vgmerge дозволяє об'єднати два VG. Ви також можете використовувати pvmove для переміщення даних у VG, а vgsplit, якщо ви хочете повернутися до декількох VG.
Немає причини спершу скопіювати його у файл .img, просто спочатку зробіть lvcreate, а потім скопіюйте безпосередньо:
lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
dd if=/dev/volume-group/snapshot-name of=/dev/new-volume-group/new-logical-volume
Гаразд, я зміг вирішити ситуацію по-своєму. Ось такі кроки:
1) Зробіть знімок логічного тома націлювання.
lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
Примітка. Розмір знімка може бути таким же великим або маленьким, як ви хочете. Важливо мати достатньо місця для зйомки змін протягом періоду зйомки.
2) Створіть копію зображення вмісту знімка за допомогою dd
dd if=/dev/volume-group/snapshot-name of=/tmp/backup.img
3) Створіть новий логічний об'єм достатнього розміру в цільовій (новій) групі томів.
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
4) Запишіть дані в новий логічний том із резервної копії зображення, використовуючи dd
dd if=/tmp/backup.img of=/dev/new-volume-group/new-logical-volume
5) видаліть знімок та резервну копію зображення за допомогою lvremove
та rm
відповідно.
Це все, люди ... Сподіваюся, це комусь допомагає :)
Станом на 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 on / 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
Потім розділіть дзеркало. Новий LV тепер 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.
На сьогодні всі 4 відповіді пропускають, що точний розмір гучності часто не відомий. lvdisplay
показує лише значення, округлені до двох знаків після коми, і man lvdisplay
лише вказує на інші команди за доступними параметрами. Далі вибирається MiB, що є достатньо точним з розміром блоку LVM за замовчуванням у 4 MiB:
lvdisplay --units m
MiB також блок за замовчуванням --size
в lvcreate
. Якщо ви сумніваєтеся, двічі перевірте правильність розміру lvdisplay
після створення цільового обсягу. Потім продовжуйте, як і в інших відповідях, щоб зробити копію. Крім того, я рекомендую підтвердити копію , наприклад, за допомогою cmp
.
Ось чому використовується знімок і що він захищає та не захищає:
Знімок зроблений таким чином, що всі дані копіюються так, як це було в момент створення знімка. Діяльність над томом джерела під час копіювання не відображатиметься в копії.
Знімок також захищає вихідний об'єм від помилок людини в dd
командному рядку. Якщо ви випадково напишіть на знімок, тільки дані знімка будуть пошкоджені, і ви можете просто видалити знімок і почати спочатку.
Цільовий обсяг не захищений під час процесів копіювання. Якщо інший адміністратор (або автоматичний процес, наприклад os-prober of dracut
) змонтує неповний об'єм, він може викрутити речі. (Навіть кріплення, доступне лише для читання, все ще може записувати записи журналу до тома.)
Я запропоную своє:
umount /somedir/
lvdisplay /dev/vgsource/lv0 --units b
lvcreate -L 12345b -n lv0 vgtarget
dd if=/dev/vgsource/lv0 of=/dev/vgtarget/lv0 bs=1024K conv=noerror,sync status=progress
mount /dev/vgtarget/lv0 /somedir/
якщо все добре, видаліть джерело
lvremove vgsource/lv0
Якщо вам потрібно скопіювати логічний том з VG A в інший VG B, я знайшов цікавий варіант, використовуючи partclone
. Знімок, який потім скопіювати з DD, - хороший метод, але може бути повільним, якщо ваші файлові системи не заповнені. Це рішення дуже швидко, оскільки воно копіює лише використані блоки.
lvcreate --snapshot --size 1G /dev/sourcevg/lv --name lv-backup
--size
тут скільки записи може статися до того , як знімок буде відключений
lvcreate --size <new_lv_size> /dev/destvg --name newlv
new_lv_size
повинен бути принаймні розміром джерела LV
partclone.<fs_type> --dev-to-dev --source /dev/sourcevg/lv-backup --output /dev/destvg/newlv
fs_type
може бути ext4
, fat32
, btrfs
, xfs
, ... будь-FS підтримується partclone
lvremove /dev/sourcevg/lv-backup