Я задал похожий вопрос 2 года назад.
Однако в моем случае я планировал скопировать только одно устройство на raid0.
В конце концов я нашел решение . В то время вы не могли конвертировать из raid0 в raid10, но, похоже, начиная с ядра 3.3, вы можете это сделать. Таким образом, это решение может работать для вас в конце концов.
Проблема с этим подходом заключается в том, что он копирует фсуид. Это означает, что вы не можете смонтировать как FS, так и ее копию на одном компьютере. В то время не было никакого инструмента для изменения fsuid
FS, но он мог бы измениться сейчас.
Идея состоит в том, чтобы добавить слой копирования при записи поверх исходного устройства, чтобы его можно было записать, но любая модификация выполняется где-то еще, и вы можете отказаться от нее позже. Это означает, что вам нужно дополнительное место для хранения (например, на внешнем диске).
Затем смонтируйте эту 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/sda
readonly, потому что он имеет тот же fsuid, что и другие, btrfs
может все еще испортить его.
Теперь, если я правильно понимаю, предполагая, что у вас есть последняя версия btrfs-prog, вы сможете выполнить:
btrfs balance start -d convert=raid10 /mnt
Конвертировать в raid10. Теоретически это должно гарантировать, что каждый блок данных копируется как минимум на 2 диска.
Я настоятельно рекомендую вам сначала выполнить тесты на фиктивном btrfs на петлевых устройствах, поскольку все это из памяти, и я мог ошибиться (см., Например, мой первоначальный ответ перед редактированием).
Обратите внимание, что начиная с ядра 3.6, btrfs реализует бит отправки / получения, как в zfs. Это может быть вариантом для вас.
Идея Стефана может быть реализована с помощью встроенных инструментов btrfs (вот почему это круто): сделать старое btrfs начальным устройством через
btrfstune -S 1 /dev/device
, добавить устройства, удалить начальное устройство, сделатьbtrfs balance start
. Начальное устройство - это устройство только для чтения, которое может быть частью файловой системы, доступной для записи.источник
Я попытался следовать предложению @ ignis, чтобы использовать посев, но у меня были проблемы с ним; Система выдавала ошибку при попытке удалить начальное устройство, и я не мог преодолеть это. Тогда я обнаружил, что есть (сейчас - btrfs-progs v3.19-64-g19a806f, может быть, не раньше) команда:
что сделало клонирование моей существующей файловой системы btrfs (которая была в логическом томе LVM) на новый раздел пустяком. Обратите внимание, что по состоянию на май 2015 года он не работает для профилей RAID5 / 6 - для получения полной информации обратитесь к странице руководства.
источник
btrfs replace start
целях резервного копирования! Это повреждает дерево вашего устройства и делает диск не монтируемым! Я не смог восстановиться после ошибок, поэтому я восстановил копию образа с другого блочного устройства с помощью dd -tool. Используйте толькоbtrfs replace
для окончательной миграции диска.Вариант 1 - Скопируйте данные и измените UUID
Убедитесь, что исходный раздел отключен и не будет автоматически подключен.
Используйте
dd
(медленно, тупо) илиpartclone.btrfs -b -s /dev/src -o /dev/target
Используйте
btrfstune -u
для изменения UUID после копирования и перед монтированием.Предупреждение потери данных : Do НЕ пытаться (авто) смонтировать либо оригинал или копия , пока UUID не изменилось
Вариант 2 -
btrfs-clone
Я лично не пробовал
btrfs-clone
, но он подразумевает клонирование существующей файловой системы BTRFS в новую, клонирование каждого подобъема по порядку.источник