J'ai posé une question similaire il y a 2 ans.
Cependant, dans mon cas, je prévoyais seulement de copier un seul appareil sur raid0.
J'ai finalement trouvé une solution . À l'époque, vous ne pouviez pas convertir de raid0 en raid10, mais il ressemble à cela depuis le noyau 3.3, vous pouvez maintenant. Donc, cette solution peut fonctionner pour vous à la fin.
Un problème avec cette approche est qu'elle copie le fsuid. Ce qui signifie que vous ne pouvez pas monter à la fois le FS et sa copie sur la même machine. À l'époque, il n'y avait pas d'outil pour changer le fsuid
FS, mais il aurait pu changer maintenant.
L'idée est d'ajouter une couche de copie sur écriture au-dessus du périphérique d'origine afin qu'elle puisse être écrite, mais toute modification est effectuée ailleurs que vous pouvez supprimer plus tard. Cela signifie que vous avez besoin d'espace de stockage supplémentaire (par exemple sur un disque externe).
Montez ensuite ce COW'd FS au lieu de l'original, ajoutez les périphériques pour la copie FS et retirez le périphérique du COW.
Pour la copie sur écriture, vous pouvez utiliser le mappeur de périphériques.
Pour la copie jetable sur la zone d'écriture, j'utilise ici un périphérique en boucle.
Disons que vous voulez cloner /dev/sda
sur /dev/sd[bcde]
:
Créez l'arrière boutique COW:
truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store
Démontez maintenant le FS d'origine s'il est monté et modprobe -r btrfs
pour vous assurer qu'il ne va pas interférer et lui faire oublier son scan de périphérique.
Faites ensuite l'appareil COW:
echo "echo 0 $(blockdev --getsize /dev/sda) snapshot /dev/sda /dev/loop0 N 8 | dmsetup create cowed
Maintenant , /dev/mapper/cowed
est comme ceci /dev/sda
près que rien écrit à elle finira dans /dev/loop0
et /dev/sda
sera intacte.
Maintenant, vous pouvez le monter:
mount /dev/mapper/cowed /mnt
Ajoutez les autres appareils:
btrfs dev add /dev/sd[bcde] /mnt
Et retirez l'ancien:
btrfs dev del /dev/mapper/cowed /mnt
Une fois cette opération terminée, vous souhaiterez peut-être arrêter et débrancher ou effectuer une /dev/sda
lecture seule car, car il a le même fsuid que les autres, il btrfs
pourrait toujours gâcher.
Maintenant, si je comprends bien, en supposant que vous avez un btrfs-prog récent, vous devriez pouvoir faire:
btrfs balance start -d convert=raid10 /mnt
Pour convertir en raid10. En théorie, cela devrait garantir que chaque bloc de données est copié sur au moins 2 disques.
Je vous recommande fortement de faire des tests sur un btrfs factice sur des périphériques en boucle d'abord car tout ce qui est de la mémoire et je me suis peut-être trompé (voir par exemple ma réponse initiale avant ma modification).
Notez que depuis le noyau 3.6, btrfs implémente l'envoi / la réception un peu comme dans zfs. Cela pourrait être une option pour vous.