簡體   English   中英

遍歷硬盤並確定當前是否正在使用給定塊的最有效方法是什么?

[英]What is the most efficient way to traverse a hard disk and determine whether a given block is currently in use?

我正在一個個人項目中,定期(每月一次)遍歷我的硬盤並切碎(用零覆蓋)磁盤上當前未分配給任何inode的所有塊。

考慮到項目的低級性質, C似乎是最合乎邏輯的語言,但是我不確定如何最好地找到文件系統中未使用的塊。 我在SO和其他地方發現了一些與此類似的問題,但是對於有效 找到這些未使用的塊的最佳方法並沒有達成共識。

df在任何與此幾乎相似的問題中都提出過,但是我不相信它具有指定確切的塊偏移量所需的分辨率,除非我丟失了某些東西。 是否有我應該研究的其他實用程序或完全某個其他方向?

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

除了編寫自己的實現以讀取和解析磁盤文件系統數據(實際上與要支持的文件系統高度相關)之外,您實際上沒有任何通用的解決方案來找出正在使用的塊。 數據在磁盤上的外觀通常在該文件系統的代碼之外沒有記錄,而在記錄時,與實際實現相比,該文件通常已過時。

最好的選擇是閱讀要支持的文件系統的fsck實施,因為它或多或少地執行了您感興趣的事情,但是請注意,那里的許多fsck實施並不總是檢查所有屬於的數據到文件系統。 您可能具有備用超級塊和fsck不檢查(或僅在主超級塊損壞的情況下檢查)的某些元數據。

如果您確實想按照自己的意願去做,而不僅僅是了解文件系統,那么最好的選擇就是像正常備份一樣轉儲文件系統,擦除磁盤並還原備份。 我非常懷疑其他任何事情都是安全的,尤其是考慮到您的磁盤擦除應用程序可能會因您執行的任何內核更新而破壞文件系統。

Linux當前支持超過12種不同的文件系統,因此答案將取決於您選擇哪種。

但是,它們都應該有一種簡單的方法來查找可用塊,否則創建新文件或擴展當前文件會有點慢。

例如, ext2在每個塊組的開頭都有一個標頭,其中包含(除其他外)該塊組的空閑列表。 我不相信ext4會有什么改變,即使那里有很多額外的東西。

您最好遍歷那些塊頭中的空閑塊,而不是獲取任意塊並嘗試確定它是已使用還是空閑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM