Як клонувати файлову систему btrfs у різні носії, зберігаючи обмінні дані знімків


9

Я вирішив спробувати рейд-можливості btrfs. Я встановив btrfs з

sudo mkfs.btrfs -m raid10 -d raid10 /dev/sda9 /dev/sdb9 /dev/sdc9 /dev/sdd9

Тепер я хочу клонувати свій існуючий розділ btrfs (який розташовується поверх linux-raid). не можу використовувати простий cp -a, тому що існує понад 40 резервних копій на основі знімків (які я хочу зберегти), і я просто б переповнив усі сховища, які я можу запасувати кілька разів.

Поки що я бачу два варіанти:

partclone.btrfs -s /path/to/original/fs -o /dev/sda9 -b

і я вважаю, що мені також потрібно було б btrfs balance start /dev/sda9

і

do: поступово копіюйте cp -aстільки, скільки вміщується у сховищі, а потім використовуйте bedupдля дедублірування файлів та циклу.

Що є кращим (тобто найкращим методом) методом? Я б більше віддав перевагу першому; це повинно зайняти набагато менше часу. А може, в будь-якій із цих процедур ховається якась зла «готча» (окрім того, що btrfs є експериментальним, звичайно)


Перше питання просто не викликає сумніву; однак прекрасний інструмент partclone.btrfs, очевидно, він не підтримує файлові системи з кількома пристроями. :-(

Відповіді:


7

Я задав подібне запитання 2 роки тому.

Однак у моєму випадку я лише планував скопіювати один пристрій на рейд0.

Зрештою я знайшов рішення . На той момент ви не могли перетворити з raid0 в raid10, але це виглядає так з ядра 3.3, ви можете зараз. Тож врешті-решт це рішення може працювати для вас.

Проблема такого підходу полягає в тому, що він копіює фусуїд. Це означає, що ви не можете монтувати і FS, і його копію на одній машині. У той час не було інструменту для зміни fsuidFS, але це могло змінитися і зараз.

Ідея полягає в тому, щоб додати оригінал пристрою шар копіювання на запис, щоб він міг бути записаний, але будь-які зміни виконуються десь в іншому місці, які ви зможете відкинути згодом. Це означає, що вам потрібно додаткове місце для зберігання (наприклад, на зовнішньому диску).

Потім встановіть COW'd FS замість оригіналу, додайте пристрої для копіювання FS та вийміть пристрій COW.

Для копіювання під час запису можна використовувати картограф пристрою.

Для одноразової копії в області запису тут я використовую циклічний пристрій.

Припустимо, ви хочете клонувати /dev/sdaна /dev/sd[bcde]:

Створіть запасний магазин COW:

truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store

Тепер відключіть початковий FS, якщо він встановлений, і modprobe -r btrfsпереконайтеся, що він не буде перешкоджати, і забудьте його забути сканування пристрою.

Потім зробіть пристрій COW:

echo "echo 0 $(blockdev --getsize /dev/sda) snapshot /dev/sda /dev/loop0 N 8 | dmsetup create cowed

Зараз /dev/mapper/cowedначебто, /dev/sdaза винятком того, що все, що написано до нього, закінчиться /dev/loop0і /dev/sdaбуде недоторканим.

Тепер ви можете встановити його:

mount /dev/mapper/cowed /mnt

Додайте інші пристрої:

btrfs dev add /dev/sd[bcde] /mnt

І видаліть старий:

btrfs dev del /dev/mapper/cowed /mnt

Коли це закінчиться, ви, можливо, захочете вимкнути та вимкнути вилку з мережі або зробити /dev/sdaповторне повторне читання, тому що він має таку саму фузиду, як і інші, btrfsі все ще може зіпсуватись із цим.

Тепер, якщо я правильно розумію, якщо припустити, що у вас недавній btrfs-prog, ви повинні зробити:

btrfs balance start -d convert=raid10 /mnt

Щоб перейти на рейд10. Теоретично це повинно переконатися, що кожен фрагмент даних копіюється на щонайменше 2 дисках.

Я настійно рекомендую зробити тести на фіктивний btrfs спочатку на петльових пристроях, як все, що є з пам'яті, і я, можливо, помилився (див., Наприклад, мою початкову відповідь перед моєю редагуванням).

Зауважте, що оскільки ядро ​​3.6, btrfs-реалізатори надсилають / отримують трохи, як у zfs. Це може бути для вас варіантом.


Чудова відповідь, дякую. Я тестую це. Зараз я експериментую з надсиланням / отриманням.
Адам Річковський

@ Stéphane Chazelas Посилання гмани мертві (напевно, назавжди). Не могли б ви скорегувати свою відповідь?
Йонас Штейн

4

Ідея Stéphane може бути зроблено з допомогою Btrfs вбудованих інструментів (ось чому це круто) роблять старі Btrfs насіння пристрій з допомогою btrfstune -S 1 /dev/device, додавати пристрої, видалити пристрій насіння, робити btrfs balance start. Насіннєвий пристрій - це пристрій лише для читання, який може бути частиною файлової системи для читання.


1

Я спробував виконати пропозицію @ ignis використовувати посів, але у мене виникли проблеми; система видала помилку при спробі зняти насіннєвий пристрій, і я не зміг цього подолати. Тоді я виявив, що є (зараз - btrfs-progs v3.19-64-g19a806f, можливо, не раніше) команда:

  btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>

що зробив клонування моєї існуючої файлової системи btrfs (яка була в логічному томі LVM) на новий розділ doddle. Зауважте, що станом на травень 2015 року він не працює для RAID5 / 6 профілів - перегляньте головну сторінку для отримання повної інформації.


1
Ніколи не використовуйте btrfs replace startдля резервних цілей !! Це пошкоджує дерево вашого пристрою і робить диск незмінним! Мені неможливо було відновитись після помилок, тому я відновив копію зображення з іншого блокового пристрою за допомогою dd -tool. Використовувати лише btrfs replaceдля остаточної міграції накопичувача.
Кармус

0

Варіант 1 - Копіювання даних та зміна UUID

Переконайтесь, що джерельний розділ відключений та не буде автоматизований.

Використовуйте або dd(повільно, німо) абоpartclone.btrfs -b -s /dev/src -o /dev/target

Використовуйте btrfstune -uдля зміни UUID після копіювання та перед монтажем.

Попередження втрати даних : Do НЕ намагатися (авто) змонтувати або оригінал або копія , поки UUID не змінилося


Варіант 2 - btrfs-clone

Я особисто не пробував btrfs-clone, але це намагається клонувати існуючу файлову систему BTRFS до нової, клонуючи кожен підпункт по порядку.

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