Filesystems

批量刪除 ZFS 上的大目錄而不遞歸遍歷它

  • May 30, 2021

我想刪除zfs數據集子目錄的內容。這是大量的數據。對於池“nas”,路徑是/nas/dataset/certainFolder

$ du -h -d 1 certainFolder/
1.2T    certainFolder/

而不是我必須等待,rm -rf certainFolder/我不能只銷毀該目錄的句柄,以便它可以覆蓋(即使我選擇重新創建它,也可以使用相同的目錄名稱)?

因此,例如對文件系統內部結構了解不多zfs,特別是它如何記錄其文件,我想知道我是否能夠直接訪問該日誌/映射,例如,然後刪除正確的條目,以便不再顯示該目錄。該空間目錄也必須從某種審計中刪除。

是否有捷徑可尋?即使在ext3 fs 上,或者這已經是遞歸刪除命令必須首先執行的操作,即竊取和編輯期刊?

我只是希望做一些類似的事情,kill thisDir它只是刪除某種 ID,並且 poof 目錄不再顯示在ls -la. 數據顯然仍然存在於驅動器上,但空間現在將被重用(覆蓋),因為 ZFS 就那麼酷嗎?

我的意思是我認為zfs真的很酷,我們該怎麼做呢?理想嗎?搓手:-)

我的特定案例(除了我對 的喜愛zfs)是備份存檔的管理。數據通過 SMB 上的 win box 上的 freefilesync (AWESOME PROG) 推送到 zfs 到 zfs 池。rm -rf /nas/dataset/certainFolder當通過一個術語刪除時putty,它會停止,該術語現在顯然無法使用很長時間。我當然必須打開另一個終端,才能繼續。這已經過時了,加上監視 rm -rf 沒有樂趣,它可能需要幾個小時。

也許我應該將命令設置為僅釋放句柄,例如&,然後列印到標準輸出,這可能會很好。 更現實zfs destroy nas/dataset; zfs create -p -o compression=on nas/dataset的是,在@Gilles 的回復產生想法後幾秒鐘內重新創建數據集。

在任何體面的文件系統中都不可避免地跟踪釋放的塊,ZFS也不例外然而,在 ZFS 下有一種簡單的方法可以通過“延遲”底層清理來實現幾乎瞬時的目錄刪除。它在技術上與 Gilles 的建議非常相似,但本質上是可靠的,不需要額外的程式碼。

如果您在刪除目錄之前創建文件系統的快照,則目錄刪除將非常快,因為不需要在其下探索/釋放任何內容,所有內容仍被快照引用。然後您可以在後台銷毀快照,以便逐步恢復空間。

d=yourPoolName/BackupRootDir/hostNameYourPc/somesubdir
zfs snapshot ${d}@quickdelete && { 
   rm -rf /${d}/certainFolder
   zfs destroy ${d}@quickdelete & 
}

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