私は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
マルチデバイスファイルシステムをサポートしていません。 :-(
答え1
私は尋ねたエマルジョン2年前。
しかし、私の場合は、1つのデバイスだけをraid0にコピーします。
結局は知りました。離れた。当時はraid0からraid10に変換できませんでしたが、今ではカーネル3.3から変換できます。したがって、このソリューションはついにあなたに役立ちます。
このアプローチの1つの問題は、fsuidをコピーすることです。これは、FSとそのコピーを同じコンピュータにインストールできないことを意味します。fsuid
当時、FSのプロパティを変更するツールはありませんでしたが、今は変更されている可能性があります。
アイデアは、記録できるようにRAWデバイスに書き込み時にコピーレイヤーを追加することです。ただし、編集は他の場所で行われているため、後で削除できます。これは、追加のストレージスペース(外付けドライブなど)が必要であることを意味します。
次に、元のファイルシステムの代わりに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と同様に送受信を実装します。これはあなたのためのオプションかもしれません。
答え2
Stephaneのアイデアは、btrfs組み込みツールを使用して行うことができます(これがまさに素晴らしい理由です)。古いbtrfs種子デバイスでbtrfstune -S 1 /dev/device
デバイスを追加、シードデバイスを削除、実行しますbtrfs balance start
。シードデバイスは読み取り専用デバイスであり、読み取り/書き込みファイルシステムの一部にすることができます。
答え3
@ignisが提案したようにシードを試してみましたが、問題が発生しました。シードデバイスを取り外そうとすると、システムでエラーが発生し、問題を克服できませんでした。それから(現在はbtrfs-progs v3.19-64-g19a806f、以前はそうではありません)コマンドがあることがわかりました。
btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>
これにより、既存のbtrfsファイルシステム(LVM論理ボリューム上)を新しいパーティションに非常に簡単に複製できます。 2015年5月現在、RAID 5/6プロファイルでは機能しません。完全な情報についてはマニュアルページをご覧ください。
答え4
ここに0.02ドルを追加するだけです。私はこれが古いスレッドであることを知っています。 BTRFSファイルシステムの使用中に回復不能なエラーが発生したため、昨夜btrfs-cloneを試みました。 btrfs-cloneはbtrfsスナップショットと転送機能を使用します。ファイルシステムにエラーがあると、スナップショットは機能しません。私はまた、エラーも正常に複製するという点で、ddと少し似て動作するpartclone.btrfsを試しました。これは私が作業している仮想マシンなので、新しいボリュームに部分的にレプリケートしようとしました。私が知っている限り、btrfsは少し脆弱でよく修復されません。チェックサムエラーが発生し始めると、スナップショットの動作が停止し、チェックサムエラーを回復できません。また、現在サブボリュームとしてリンクされている別のボリュームのデータスナップショットを撮ることはできません。今、新しい仮想マシンを構築しています。汚染されていない新しいボリュームを新しい仮想マシンに接続できます。
もう一度申し上げますが、私は0.02ドルです。乾杯