2013-02-05 23 views
0

我正在個人項目中定期(每月一小時)遍歷我的硬盤並碎片(用零覆蓋)磁盤上當前未分配給任何inode的任何塊。什麼是遍歷硬盤並確定給定塊當前是否正在使用的最有效方式?

C在給定項目的低級特性的情況下似乎是最合乎邏輯的語言,但我不確定如何最好地在文件系統中找到未使用的塊。我在S.O.上找到了一些問題。和其他地方類似於這一點,但沒有看到最好的方式任何共識,有效有效找到這些未使用的塊。

df已經提出了任何問題,甚至遠程類似於此,但我不相信它有必要的決議,指定確切的塊偏移,除非我失去了一些東西。我應該看看另一個實用工具或其他方向嗎?

無論我開發什麼解決方案,都需要至少能夠處理ext3文件系統,最好還能處理ext4

+0

首先,您需要決定要支持哪些文件系統。 – NPE

+0

爲了討論起見,我們說'ext3'和'ext4'。我會相應地修改這個問題。 – Dan

+0

難道你不能簡單地創建一個足夠大的臨時文件,然後刪除它? –

回答

1

的Linux目前支持十多個不同的文件系統,因此答案將取決於你選擇哪一個上。

然而,他們都應該有找到空閒塊,否則創建新文件或擴展當前的文件將是一個有點慢的一個簡單的方法。

例如,ext2有,在每個塊組,包含一個頭,除其他外,空閒列表該塊組的開始。即使在那裏有很多額外的東西,我不相信這在ext4已經改變。

你可能會好得多遍歷空閒塊在那些塊頭,而不是花中的任意塊,並試圖如果它使用或免費弄清楚。

2

除了編寫您自己的實現來讀取和解析磁盤文件系統數據(您要支持的文件系統的高度特定的數據)之外,您沒有任何一般解決方案可以找出正在使用的塊。磁盤上的數據如何在文件系統的代碼之外經常是沒有記錄的,並且在記錄時文檔通常與實際實現相比是過時的。

最好的辦法是讀取你想支持的文件系統的fsck的實現,因爲它或多或少地對你感興趣的內容做了些什麼,但是要警告的是,在那裏的許多fsck實現並不總是檢查所有屬於文件系統的數據。您可能有備用超級塊和某些fsck不檢查的元數據(或者只檢查主超級塊是否損壞)。

如果你真的想這樣做,你說什麼,你想要做的不只是瞭解文件系統最好的辦法是轉儲文件系統像一個正常的備份,擦除磁盤並還原備份。我非常懷疑其他任何事情都是安全的,特別是考慮到你的磁盤擦除應用程序可能會破壞你的文件系統,而且你的內核更新也會中斷。

相關問題