スナップショットの共有データを保存するためにbtrfsファイルシステムを別のメディアに複製する方法

スナップショットの共有データを保存するためにbtrfsファイルシステムを別のメディアに複製する方法

私は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ドルです。乾杯

関連情報