synology btrfs 刪除

一兩天前,我在此 Reddit 子版區塊中詢問如何從快照和 Hyper Backup 檔案中刪除單一檔案。我被告知這在設計上是不可能的。 Hyper Backup 檔案似乎確實無法手動修改,但經過進一步研究,我發現確實可以(甚至相當簡單)使用命令列使用 btfrs 快照來完成此操作。

使用 Synology 的 Snapshots Replication 套件拍攝快照只是 btrfs 檔案系統內建功能的一個非常簡單的介面。您無法從中刪除檔案的唯一原因是 Synology 決定將其快照設為唯讀。以下是如何改變這一點。

一次一張快照
假設您已使用 Synology Snapshot Replicator 建立GMT-xxx在共用資料夾中呼叫的快照MYSHARE。

以管理員身分透過 SSH 連線到您的 NAS,然後輸入sudo -i並提供您的管理員密碼以成為 root。

透過將 btrfs 唯讀屬性設為 false 使快照可讀寫,如下所示:
btrfs property set /volume1/\@sharesnap/MYSHARE/GMT-xxx ro false
是的,這是正確的路徑。如果您轉到 MYSHARE/#snapshot/GMT-xxx, 它將不起作用。

現在,您可以鍵入內容cd /volume1/\@sharesnap/MYSHARE/GMT-xxx以轉到快照,然後像在 Linux 中一樣導航並刪除檔案(使用例如cd和rm)。再次強調,不要造訪 MYSHARE/#snapshot。

完成後,將快照設定回唯讀:
btrfs property set /volume1/\@sharesnap/MYSHARE/GMT-xxx ro true

重要提示:要真正從磁碟中刪除檔案並釋放空間,必須從主資料夾中刪除它們並從所有快照中刪除它們。因此,對包含要刪除的檔案的所有快照重複步驟 2-4。

一次所有快照
如果您有數十個快照和多個文件,這可能會很痛苦,因此以下是如何同時執行相同的操作。特別小心! 輸入錯誤的內容可能會嚴重弄亂您的快照,甚至可能弄亂整個 NAS。

sudo -i如上。

for d in /volume1/\@sharesnap/MYSHARE/GMT*; do btrfs property set "$d" ro false; done

找到您要刪除的檔案。兩個建議:
find /volume1/\@sharesnap/MYSHARE/ -name ‘filename-of-huge-file*’ 如果您知道檔案名稱或
find /volume1/\@sharesnap/MYSHARE/ -size +5G 尋找所有大於 5 GB 的檔案。

當您確定上面的 find 命令產生正確的結果時,請再次運行它們並添加-delete到行末尾以實際刪除檔案。在該行的末尾 – 否則你可以破壞一切!

for d in /volume1/\@sharesnap/MYSHARE/GMT*; do btrfs property set "$d" ro true; done

其他有用的命令
列出所有快照: btrfs subvolume list -st /volume1/

刪除快照: btrfs subvolume delete GMT-xxx

檢查快照是否為唯讀:( btrfs property get /volume1/\@sharesnap/MYSHARE/GMT-xxx
“ro true”表示唯讀,“ro false”表示讀寫)。

————————————–
运行如下命令删除子卷

sudo btrfs subvolume delete –subvolid 263 /mnt/olddata
Delete subvolume (no-commit): ‘/mnt/olddata/@/home’
可以看到是no-commit,因为这时还没提交,具体什么时候提交,不太清楚,可以重启系统让其生效。也可以增加-c参数直接提交。

sudo btrfs subvolume delete -c –subvolid 263 /mnt/olddata

本篇發表於 synology 並標籤為 。將永久鍊結加入書籤。

發表迴響

您的電子郵件位址並不會被公開。 必要欄位標記為 *

*

您可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>