題 如何重命名BTRFS子卷?


我有一個BTRFS文件系統,其中包含一組子卷。到現在為止還挺好。不幸的是,我需要更改子卷的名稱 btrfs 程序不允許我重命名子卷。使用Google進行搜索已經取得了一些成果,有人說我可以 mv,另一個說我可以 snapshot 新名稱並刪除舊的子卷。在我崩潰我的分區並且必須從備份重新加載它(它非常大)之前,我的問題是:

  • 目前重命名子卷的最佳方法是什麼?
  • 是否可以 mv 它,還是會使一些內部結構無效?
  • 是製作新的快照並刪除舊的子卷的方式,還是有一些缺點?

我知道一切仍然是實驗性的,但就我的目的而言,它一直運作良好(到目前為止,我每天都有增量備份)。


21
2018-03-23 15:44


起源


很高興聽到btrfs對你有用。到目前為止,它對我來說也很有效。沒問題。 - MountainX


答案:


只是 mv 它。這是推薦的方式 Ubuntu社區文檔

為了進一步說明為什麼這是正確的方法,這裡引用了btrfs系統管理員指南:

快照

快照只是一個共享其數據(和元數據)的子卷   與其他一些子體積一樣,使用btrfs的COW功能。一旦   [可寫]快照,快照之間沒有區別   原始子捲和新快照子卷。回滾   到快照,卸載修改後的原始子卷,然後掛載   快照取而代之。此時,原始子體積可能是   刪除,如果希望。由於快照是子卷,因此快照   快照也是可能的。


12
2018-04-21 23:26





沒有什麼重要的事情需要注意。 命名:

btrfs Subvolume - 獨立數據容器 inside 文件系統。它表示為 目錄 現有的FS。如果您創建新的子卷,它將為空,準備在文件系統內使用邏輯數據塊。在數據應在邏輯上分開的情況下使用非常方便,例如不同子卷上的不同VM或不同客戶端。這允許 very fast 刪除 所有 只有subvolume delete命令的邏輯數據塊。

btrfs快照 - 副本 existing 在當前快照完成的所有數據的子卷。可用作恢復設置或更改的操作備份,例如製作子卷快照,進行更改(VM或數據),測試一切是否正常,在一些寬限期後刪除快照。 需要注意的重要事項:快照只能是只讀的(-r 因此可以用作FS變化的增量塊,並可能轉移到絕對另一個BTRFS!

目前(2016-12-30)BTRFS限制:

在子卷之間複製或移動數據,例如 mv dir1/dataset1 dir_subvolume1/ 產生所有真實的io以將數據複製到另一個子體積,並且在移動的情況下,從原始子體移除。 和 非常 通過引用並因此使用BTRFS的COW功能有效地複制大量數據:

cp -a --reflink=always dir1/dataset1 dir_subvolume1/

如果需要:

rm -rf dir1/dataset1

只讀子卷快照可以重命名(隨之移動) mv)在現有目錄級別,但無法重命名/移動到不同的子目錄級別。例如 mv /btrfs/subvol_snap1 /btrfs/.snaphots 是不可能的,產生的解釋錯誤不多: mv: cannot move 'subvol_snap1' to '.snapshots/subvol_snap1': Read-only file system。 為了能夠移動這樣的快照,您需要創建現有隻讀快照的新只讀快照到新的首選位置,然後刪除舊的快照:

btrfs sub snap -r /btrfs/subvol_snap1 /btrfs/.snaphots/subvol_snap1
btrfs sub del /btrfs/subvol_snap1

只是為了更輕鬆的生活:

btrfs sub list /btrfs

我希望這會為所有新的btrfs粉絲節省大量時間:)


6
2017-12-30 11:27





如果要將根卷重命名為嵌套子卷,則需要對其進行快照,然後執行 find $ROOT_VOL -xdev -delete 刪除根卷的先前內容。反向操作(將子卷重命名為根卷)似乎不可能。


4
2017-09-11 16:26