私は2年前に同様の質問をしました。
ただし、私の場合は、raid0に1つのデバイスをコピーすることのみを計画していました。
私は最終的に解決策を見つけました。当時、raid0からraid10に変換することはできませんでしたが、カーネル3.3以降では可能です。したがって、その解決策は最終的にはうまくいくかもしれません。
そのアプローチの問題は、それがfsuidをコピーすることです。つまり、FSとそのコピーの両方を同じマシンにマウントすることはできません。当時、fsuid
FS を変更するツールはありませんでしたが、現在は変更されている可能性があります。
アイデアは、元のデバイスの上にコピーオンライトレイヤーを追加して書き込みできるようにすることですが、変更は後で破棄できる別の場所で行われます。つまり、追加のストレージスペースが必要になります(たとえば、外付けドライブ上)。
次に、元の代わりにCOWしたFSをマウントし、FSコピー用のデバイスを追加して、COWのデバイスを削除します。
コピーオンライトの場合、デバイスマッパーを使用できます。
書き込み領域の使い捨てコピーには、ここではループデバイスを使用しています。
にクローン/dev/sda
したいとしましょう/dev/sd[bcde]
:
COWバックストアを作成します。
truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store
マウントされている場合は、オリジンFSをアンマウントし、modprobe -r btrfs
干渉しないようにして、デバイススキャンを忘れないようにします。
次に、COWされたデバイスを作成します。
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
読み取り専用にすることをお勧めします。他のファイルと同じfsuidがあるので、btrfs
まだ混乱する可能性があるからです。
さて、私が正しく理解していれば、最近のbtrfs-progがあると仮定すると、次のことができるはずです。
btrfs balance start -d convert=raid10 /mnt
raid10に変換します。理論的には、すべてのデータチャンクが少なくとも2つのディスクにコピーされるようにする必要があります。
最初はループデバイスでダミーのbtrfsをテストすることを強くお勧めします。すべてメモリからのものであり、間違っている可能性があるためです(たとえば、編集前の最初の回答を参照してください)。
カーネル3.6以降、btrfsはzfsのように少し送受信を実装することに注意してください。それはあなたのためのオプションかもしれません。