Btrfs

恢復/回滾 btrfs 上的單個文件或文件夾

  • January 1, 2021

我打算將 btrfs 用於 NAS 系統。

現在我想知道是否可以將事物回滾到文件/文件夾級別的快照。我問這個是因為通常一個人只想回滾單個項目,同時保持驅動器其餘部分的狀態。

是否有一些本地方法可以做到這一點,或者如果沒有,如何最好地實現這一點?我閱讀了從 btrfs 快照恢復單個文件而沒有進行完整複製,這似乎是一種方法,但並不那麼方便。不過,這可能是最好的方法。

拍攝快照基本上會創建一個可以在基本卷的目錄結構中訪問的子卷。從那裡,如果一個人擁有適當的權限,就可以瀏覽它並複製文件或文件夾。--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/28c839e8-4d4f-031c-ee3e-3e676e344db3@cobb.uk.net/t/#m16db5d9f29d26f41a8adb4499ffe3e220a85d9b8

外部工具(以 snapper 為例)

使用像 snapper 這樣的外部工具有一些好處,因為它們使處理快照更加方便,並且具有有用的功能。

首先,需要為想要為其創建快照的(子)卷創建一個配置文件:

snapper -c config-name create-config /mnt_point

這將創建一個名為config-name. 請注意,這通常還可以創建基於時間的自動快照以及在某些邏輯之後清理這些快照的規則。請注意,手動創建的快照不會被此類規則刪除。

然後可以使用以下方法手動拍攝快照:

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

whereconfig-name是先前創建的配置的名稱,description-content可以填寫快照的一些描述。

(源自https://wiki.archlinux.org/index.php/Snapper

然後,通過訪問已掛載的快照並複制內容,恢復的工作方式與上述 btrfs 工具部分類似。

此外,根據openSUSE 文件, snapper 提供了一個命令,該命令也可用於撤消對目前卷的更改。請注意,這可能會導致數據不一致。Red Hat 文件還聲明不要將該命令用於根文件系統。

理論上,文件可以通過以下方式恢復:

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

whereSNAPSHOT_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

引用自:https://unix.stackexchange.com/questions/623461