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


9

私は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も、マルチデバイスファイルシステムをサポートしていないことは明らかです。:-(

回答:


7

私は2年前に同様の質問をしました。

ただし、私の場合は、raid0に1つのデバイスをコピーすることのみを計画していました。

私は最終的に解決策を見つけまし。当時、raid0からraid10に変換することはできませんでしたが、カーネル3.3以降では可能です。したがって、その解決策は最終的にはうまくいくかもしれません。

そのアプローチの問題は、それがfsuidをコピーすることです。つまり、FSとそのコピーの両方を同じマシンにマウントすることはできません。当時、fsuidFS を変更するツールはありませんでしたが、現在は変更されている可能性があります。

アイデアは、元のデバイスの上にコピーオンライトレイヤーを追加して書き込みできるようにすることですが、変更は後で破棄できる別の場所で行われます。つまり、追加のストレージスペースが必要になります(たとえば、外付けドライブ上)。

次に、元の代わりに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のように少し送受信を実装することに注意してください。それはあなたのためのオプションかもしれません。


すばらしい回答、ありがとうございます。私はそれをテストします。今、私は送受信を実験しています。
アダムRyczkowski 2013

@StéphaneChazelas gmaneリンクは(おそらく永遠に)死んでいます。答えを調整していただけませんか?
ジョナススタイン

4

Stephaneのアイデアは、btrfs組み込みツールを介して実行できます(これがクールな理由です)。古いbtrfs をを介してシードデバイスにbtrfstune -S 1 /dev/deviceデバイスを追加し、シードデバイスを削除しますbtrfs balance start。シードデバイスは、読み取り専用デバイスであり、読み取り/書き込み可能なファイルシステムの一部である場合があります。


1

@ignisの提案に従ってシーディングを使用しようとしましたが、問題がありました。シードデバイスを削除しようとしたときにシステムがエラーをスローし、これを克服できませんでした。次に、(現在-btrfs-progs v3.19-64-g19a806f、おそらく以前ではない)コマンドがあることがわかりました:

  btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>

これにより、既存のbtrfsファイルシステム(LVM論理ボリューム内にあった)を新しいパーティションに複製することが楽になりました。2015年5月現在、RAID5 / 6プロファイルでは機能しないことに注意してください。詳細については、manページを確認してください。


1
btrfs replace startバックアップ目的には絶対に使用しないでください!! デバイスツリーが破損し、ドライブがマウントできなくなります。エラーから回復することは不可能だったので、dd -toolを使用して別のブロックデバイスからイメージコピーを復元しました。btrfs replace最終的なドライブの移行にのみ使用します。
Karmus

0

オプション1-データをコピーしてからUUIDを変更する

ソースパーティションがマウント解除されており、自動マウントされないことを確認します。

使用するかdd(遅い、ダム)またはpartclone.btrfs -b -s /dev/src -o /dev/target

btrfstune -uコピー後、マウント前にUUIDを変更するために使用します。

データ損失の警告はDOは、NOTマウント(自動)にしてみてくださいどちらか元またはコピーUUIDが変更されるまで、


オプション2- btrfs-clone

私は個人的には試していませんbtrfs-cloneが、既存のBTRFSファイルシステムを新しいものに複製し、各サブボリュームを順番に複製することを目的としています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.