2011-04-12 16 views
2

當前我的數據被組織在一個具有緩存目錄的卷中(所有文件都是首先創建或傳輸的)。之後,捲上有合適的目錄,其子目錄中包含硬鏈接到緩存中文件的文件。 這樣做是爲了使相同的inode(文件)可以在多個目錄中多次硬鏈接。鏈接計數爲2時,是否有辦法徹底刪除inode?

現在,當試圖清理卷時,我會循環遍歷目錄(而不是緩存),並根據特定標準取消鏈接文件(基本上將緩存條目的inode計數減1)。有沒有辦法讓我直接刪除緩存條目,當我刪除最後一個硬鏈接(即從2減少到1)。這樣我就不必手動解析整個緩存目錄來清除它的任何inode,它的鏈接數僅爲1.

我已經通過取消鏈接/刪除功能,並且找不到任何具體的使用。是否有一些內部處理這個問題的清除算法,然後我可以嘗試實現這一點。

對此的任何幫助將不勝感激。期待及時回覆。

回答

1

不,沒有什麼能夠做到你想要的東西。

斷開硬鏈接並注意鏈接計數爲1時刪除操作可能很有用,因爲此時inode應該位於頁面緩存中;這當然取決於知道緩存目錄中文件的名稱。

+0

這看起來很有趣,因爲這樣可以避免緩存文件上的單獨統計(評估其鏈接數已降至1)。鑑於我知道緩存項名稱在解除硬鏈接的位置,我怎樣才能從頁面緩存中派生關於緩存條目的信息(本質上是它的計數)。 非常感謝您對此的所有幫助。 – Nishank 2011-04-13 04:00:17

2

我看到了this和其他一些地方,它們會告訴你如何從shell中刪除所有硬連接(在每個文件中使用find -samefile和call remove)。你可以通過系統調用它,儘管有些人可能會皺起眉頭)。