Как клонировать файловую систему btrfs на разные носители, сохраняя данные об обмене снимками


9

Я решил попробовать возможности btrfs raid. Я настроил 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 года назад.

Однако в моем случае я планировал скопировать только одно устройство на raid0.

В конце концов я нашел решение . В то время вы не могли конвертировать из 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

Теперь размонтируйте исходную ФС, если она установлена, и modprobe -r btrfs убедитесь, что она не будет мешать, и заставьте ее забыть сканировать устройство.

Затем сделайте устройство COW'd:

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/sdareadonly, потому что он имеет тот же fsuid, что и другие, btrfsможет все еще испортить его.

Теперь, если я правильно понимаю, предполагая, что у вас есть последняя версия btrfs-prog, вы сможете выполнить:

btrfs balance start -d convert=raid10 /mnt

Конвертировать в raid10. Теоретически это должно гарантировать, что каждый блок данных копируется как минимум на 2 диска.

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

Обратите внимание, что начиная с ядра 3.6, btrfs реализует бит отправки / получения, как в zfs. Это может быть вариантом для вас.


Отличный ответ, спасибо. Я проверю это. Сейчас я экспериментирую с отправкой / получением.
Адам Рычковски

@ Stéphane Chazelas Gmane ссылки мертвы (вероятно, навсегда). Не могли бы вы скорректировать свой ответ?
Джонас Стейн

4

Идея Стефана может быть реализована с помощью встроенных инструментов 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) на новый раздел пустяком. Обратите внимание, что по состоянию на май 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.