Я задал похожий вопрос 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. Это может быть вариантом для вас.