私はbtrfs raid機能を試してみることにしました。私はbtrfsを設定しました
Sudo mkfs.btrfs -m raid10 -d raid10 /dev/sda9 /dev/sdb9 /dev/sdc9 /dev/sdd9
次に、既存のbtrfsパーティション(linux-raidの上にある)のクローンを作成します。単純なcp -a
を使用することはできません。40を超えるスナップショットベースのバックアップ(保持したい)があり、複数回使用できるすべてのストレージを単純にいっぱいにしてしまうためです。
これまでのところ、2つのオプションがあります。
partclone.btrfs -s /path/to/original/fs -o /dev/sda9 -b
私もbtrfs balance start /dev/sda9
が必要になると思います
そして
実行:ストレージに収まる範囲でcp -a
を使用して増分コピーし、次に bedup
を使用してファイルの重複を排除し、ループします。
推奨される(つまり、ベストプラクティス)方法は何ですか?私は最初のものをはるかに好みます。それははるかに少ない時間がかかるはずです。または、おそらくこの手順のいずれかに潜んでいるいくつかの邪悪な「落とし穴」があります(もちろん、btrfsが実験的であるという事実に加えて)
最初の質問は問題外です。 partclone.btrfs
がどんなに素晴らしいツールであっても、マルチデバイスファイルシステムをサポートしていないことは明らかです。 :-(
私は尋ねた 同様の質問 2年前。
ただし、私の場合は、raid0に1つのデバイスをコピーすることだけを計画していました。
私は最終的に a solution を見つけました。当時、raid0からraid10に変換することはできませんでしたが、カーネル3.3以降ではそのように見えます。したがって、その解決策は最終的にはうまくいくかもしれません。
そのアプローチの問題は、それがfsuidをコピーすることです。つまり、FSとそのコピーの両方を同じマシンにマウントすることはできません。その当時、FSのfsuid
を変更するツールはありませんでしたが、今は変わったかもしれません。
アイデアは、元のデバイスの上にコピーオンライトレイヤーを追加して書き込みできるようにすることですが、変更は後で破棄できる別の場所で行われます。つまり、追加のストレージスペースが必要になります(たとえば、外付けドライブ上)。
次に、そのCOWをマウントしますFSオリジナルの代わりに、FSコピー用のデバイスを追加して、COWのデバイスを削除します。
コピーオンライトの場合は、デバイスマッパーを使用できます。
書き込み領域の使い捨てコピーには、ここではループデバイスを使用しています。
/dev/sda
を/dev/sd[bcde]
に複製するとします。
COWバックストアを作成します。
truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store
次に、Originをアンマウントします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のように少し送受信を実装することに注意してください。それはあなたのためのオプションかもしれません。
Stephaneのアイデアは、btrfs組み込みツールを介して実行できます(これがクールな理由です)。古いbtrfsを シードデバイスbtrfstune -S 1 /dev/device
、デバイスを追加、シードデバイスを削除、実行btrfs balance start
。シードデバイスは、読み取り/書き込み可能なファイルシステムの一部である読み取り専用デバイスです。
@ignisの提案に従ってシードを使用しようとしましたが、問題がありました。シードデバイスを削除しようとしたときにシステムがエラーをスローし、これを克服できませんでした。次に、(現在-btrfs-progs v3.19-64-g19a806f、おそらく以前ではない)コマンドがあることがわかりました:
btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>
これにより、既存のbtrfsファイルシステム(LVM論理ボリューム内にあった)を新しいパーティションに複製することが楽になりました。 2015年5月現在、RAID5/6プロファイルでは機能しないことに注意してください。詳細については、manページを確認してください。
ソースパーティションがマウント解除されており、自動マウントされないことを確認します。
dd
(遅い、ダム)またはpartclone.btrfs -b -s /dev/src -o /dev/target
を使用します
btrfstune -u
を使用して、コピー後およびマウント前にUUIDを変更します。
データ損失の警告: Do[〜#〜] not [〜#〜] UUIDが変更されるまで(自動)マウントどちらかオリジナルまたはコピーを試みます
btrfs-clone
私は個人的には試していません btrfs-clone
ですが、既存のBTRFSファイルシステムを新しいものに複製し、各サブボリュームを順番に複製することを目的としています。