btrfs上の単一のファイルまたはフォルダーを復元/ロールバックします

Dec 08 2020

NASシステムにbtrfsを利用することを計画しています。

ファイル/フォルダーレベルでスナップショットにロールバックできるかどうか疑問に思っています。通常、ドライブの残りの部分の状態を維持しながら、単一のアイテムのみをロールバックしたいので、これを尋ねます。

これを行うためのネイティブな方法はありますか、そうでない場合は、これを最もよく達成する方法はありますか?フルコピーを実行せずにbtrfsスナップショットから単一ファイルを復元するを読みました。これは方法のようですが、それほど便利ではありません。ただし、これを行うには最善の方法かもしれません。

回答

1 clel Jan 02 2021 at 01:13

スナップショットを作成すると、基本的に、ベースボリュームのディレクトリ構造でアクセスできるサブボリュームが作成されます。そこから、適切な権限があれば、それを参照してファイルやフォルダをコピーできます。--reflinkコピーのオプションはそのために必要とされていないようですが、それはより良いので、コピーするときに物事が重複することはありません。

btrfsツールを使用

オプションで、スナップショットのサブボリュームを作成します。

btrfs subvolume create .my_snapshots

スナップショットの作成:

btrfs subvolume snapshot -r /mnt_point /mnt_point/.my_snapshots/snapshot1

-rフラグを使用すると、スナップショットが読み取り専用になります(https://wiki.archlinux.org/index.php/btrfs#Snapshots)。

最初にサブボリュームを作成せず、読み取り専用にしないと、次のようになります。

btrfs subvolume snapshot /mnt_point /mnt_point/snapshot1

復元は、スナップショットからファイルまたはフォルダーをコピーすることで実行できます。

cp /mnt_point/.my_snapshots/snapshot1/sub/dir/file /sub/dir/file

(に由来する https://lore.kernel.org/linux-btrfs/[email protected]/t/#m16db5d9f29d26f41a8adb4499ffe3e220a85d9b8)

外部ツール(例として使用されるスナッパー)

snapperなどの外部ツールを使用すると、スナップショットの処理が少し便利になり、便利な機能が提供されるため、いくつかの利点があります。

最初に、スナップショットを作成する(サブ)ボリュームの構成ファイルを作成する必要があります。

snapper -c config-name create-config /mnt_point

これにより、という名前の構成ファイルが作成されconfig-nameます。これにより、通常、時間ベースの自動スナップショットの作成と、ロジックの後にスナップショットをクリーンアップするためのルールも有効になることに注意してください。手動で作成されたスナップショットは、このようなルールによって削除されないことに注意してください。

スナップショットは、次の方法で手動で作成できます。

snapper -c config-name create --description description-content

ここconfig-nameで、は以前に作成された構成の名前でありdescription-content、スナップショットの説明を入力できます。

(に由来する https://wiki.archlinux.org/index.php/Snapper)

復元は、マウントされたスナップショットにアクセスしてコピーすることで、btrfsツールセクションの上記と同様に機能します。

さらに、snapperは、openSUSEのドキュメントに従って、現在のボリュームの変更を元に戻すためにも使用できるコマンドを提供します。ただし、これによりデータの不整合が発生する可能性があることに注意してください。また、Red Hatのドキュメントには、ルートファイルシステムでそのコマンドを使用しないように記載されています。

理論的には、ファイルは次の方法で復元できます。

 snapper -c config-name -v undochange SNAPSHOT_ID..0 FILENAME

ここで、SNAPSHOT_IDは復元元のスナップショットのID(および..0ファイルがメインボリュームに復元されることを示します)であり、FILENAMEは復元するファイルへのパスです。複数のファイルを指定することもできます。

(に由来する https://doc.opensuse.org/documentation/leap/archive/15.0/reference/html/book.opensuse.reference/cha.snapper.html#proc.snapper.restore.cmdl)

EmmanuelRosa Dec 09 2020 at 17:25

BTRFSスナップショットはサブボリュームレベルで機能します。つまり、サブボリュームは「ロールバック」できますが、個々のファイルは「ロールバック」できません。

サブボリュームはファイルシステム内のディレクトリとして表示されるため、ディレクトリをロールバックできると言えます。

個々のファイルをロールバックするには、提供したリンクに示されているように、reflinkコピーを使用します。ただし、関連するサブボリュームはを介し/etc/fstabて自動的にマウントされるため、不便はありません。