完全コピーを実行せずにbtrfsスナップショットから個々のファイルを復元します。

完全コピーを実行せずにbtrfsスナップショットから個々のファイルを復元します。

背景

次のコマンドを使用して、btrfsファイルシステムで一連の時間ごとのスナップショットを維持します。BTRBK。サブボリュームとスナップショットは次のように保存されます(わかりやすくするために名前を減らしました)。

/@vol               (subvolume)
/btrbk/@vol.00      (snapshots of /@vol, one per hour)
/btrbk/@vol.01      ...
/home/user/vol      (mountpoint for /@vol)

/home/user/volこれで削除しないファイルを削除しました。問題ありません。最新のスナップショットから簡単に復元できます。

# cd /home/user/vol
# cp -a --reflink=always /btrbk/@vol.01/all_ipv4_numbers.txt ./
cp: failed to clone './all_ipv4_numbers.txt' from '/btrbk/@vol.01/all_ipv4_numbers.txt': Invalid cross-device link

ファイルを「再接続」できないようです。しかし、私は2つのファイルのコピーで終わりたくありません。理想的には、最新のスナップショットと今後の次のスナップショットの間に何も起こらなかったように見せたいと思います。

(はい、実際のバックアップもありますが、スナップショットが利用可能な限りスナップショットから復元する方がはるかに便利です!)

質問

復元方法単一ファイルすべての良い参照と魔法を維持しながら、btrfsスナップショットからbtrfsがすべてのスナップショットで同じデータであることを確認できますか?

答え1

5.18より前のLinuxカーネル(具体的にはコミット9f5710bcp --reflink)、ソースとターゲットが同じマウントポイントにある場合にのみ使用できます。この目的のために、同じファイルシステムを複数のディレクトリにマウントすることは含まれません。 Linux 5.18以降にアップグレードするか、btrfsファイルシステムの「ルート」ボリュームをどこかにマウントしてから、そのディレクトリの下のスナップショットサブボリュームcp --reflinkと@volの間の作業を実行します。

関連情報