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.
L'idée de Stéphane peut être réalisée à l'aide des outils intégrés de btrfs (c'est pourquoi c'est cool): faire des anciens btrfs un périphérique de départ via
btrfstune -S 1 /dev/device
, ajouter des périphériques, supprimer le périphérique de départ, fairebtrfs balance start
. Un périphérique d'amorçage est un périphérique en lecture seule qui peut faire partie d'un système de fichiers accessible en écriture.la source
J'ai essayé de suivre la suggestion de @ ignis d'utiliser l'amorçage mais j'ai eu des problèmes avec cela; le système a lancé une erreur en essayant de retirer le dispositif d'amorçage et je n'ai pas pu surmonter cela. Ensuite, j'ai trouvé qu'il y avait (maintenant - btrfs-progs v3.19-64-g19a806f, peut-être pas plus tôt) la commande:
ce qui a fait du clonage de mon système de fichiers btrfs existant (qui était dans un volume logique LVM) sur une nouvelle partition un jeu d'enfant. Notez qu'en mai 2015, cela ne fonctionne pas pour les profils RAID5 / 6 - consultez la page de manuel pour plus d'informations.
la source
btrfs replace start
à des fins de sauvegarde !! Il corrompt l'arborescence de votre appareil et rend le lecteur démontable! Il était impossible pour moi de récupérer des erreurs, j'ai donc restauré une copie d'image à partir d'un autre périphérique de bloc avec l' outil dd . À utiliser uniquementbtrfs replace
pour la migration finale du lecteur.Option 1 - Copie des données puis modification de l'UUID
Assurez-vous que la partition source n'est pas montée et ne sera pas montée automatiquement.
Utilisez
dd
(lent, stupide) oupartclone.btrfs -b -s /dev/src -o /dev/target
Utilisez
btrfstune -u
pour changer l'UUID après la copie et avant le montage.Avertissement de perte de données : N'essayez PAS de (auto) monter l' original ou la copie jusqu'à ce que l'UUID ait changé
Option 2 -
btrfs-clone
Je n'ai pas personnellement essayé
btrfs-clone
, mais il prétend cloner un système de fichiers BTRFS existant vers un nouveau, en clonant chaque sous-volume dans l'ordre.la source