btrfsの個々のファイルまたはフォルダの復元/ロールバック

btrfsの個々のファイルまたはフォルダの復元/ロールバック

NASシステムにbtrfsを使用する予定です。

これで、ファイル/フォルダレベルでコンテンツをスナップショットにロールバックすることが可能かどうか疑問に思います。通常、ドライブの残りの状態を維持しながら単一の項目だけをロールバックしたいので、この質問をします。

これを行うための基本的な方法はありますか?それ以外の場合、これを達成するための最善の方法は何ですか?私は読んだ完全コピーを実行せずにbtrfsスナップショットから個々のファイルを復元します。このような方法のようですが、それほど便利ではありません。しかし、これはおそらく最善のアプローチです。

答え1

スナップショットを撮ると、デフォルトでプライマリボリュームのディレクトリ構造内からアクセスできるサブボリュームが作成されます。適切な権限がある場合は、ここでそのファイルを参照してファイルまたはフォルダをコピーできます。--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/[Eメール保護]/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には、現在のボリュームの変更を元に戻すために使用できるコマンドもあります。オープン水税文書。ただし、これによりデータが一貫していない可能性があることに注意してください。しかも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)

答え2

BTRFSスナップショットはサブボリュームレベルで機能します。これは、サブボリュームを「ロールバック」できますが、個々のファイルは「ロールバック」できないことを意味します。

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

単一のファイルをロールバックするために、提供したリンクに表示されている参照リンクのコピーを使用しました。しかし、関連するサブボリュームを自動的にマウントしておいた/etc/fstabので、不便はありませんでした。

答え3

ターミナルから出発

BTRFSデフォルトのスナップショットを使用しているとします。

/.snapshot/@timestamp_folder/subfolderスナップショットでファイルの場所を見つけます。次に、次のコマンドを実行し、個々のファイルを新しい場所に「コピー/同期」します。

sudo rsync myfile.txt /shares/backups/restored/restored.txt

フォルダでも機能することができます(まだテストされていません)。

関連情報