2013-08-16 87 views
1

我想攔截Linux服務器中的每個磁盤寫入操作。詳細地說,我想在每次磁盤寫入操作發生的時候捕獲每個磁盤寫入操作,並能夠確定哪個進程發起了調用,它正在嘗試寫入的位置等等。爲了簡單起見,現在我只專注於ext3。我意識到auditfs和其他的「觀察者」,一旦手術發生就會讓你知道。如前所述,我想攔截它,並能夠檢索有關操作的所有信息(過程信息,目標位置,正在寫入的內容)。如果存在中斷/回調機制(例如,通過進程,進程組或會話 - pid,pgid,sid接收任何寫入操作的通知),則會更好。在Linux中攔截磁盤寫入

感謝

+0

你想攔截' write()'系統調用,還是截取數據實際發送到磁盤?因爲後者可能因緩衝而延遲。而Unix使用共享緩衝區緩存,所以多個進程可能是「負責任的」。如果進程使用內存映射,則不會有'write()'。 – Barmar

+0

感謝Barmar的快速響應。我想在其他地方複製寫入操作(也可能是刪除操作)。我希望在磁盤寫入過程中攔截可能是正確的。我不明白'多個過程可能是負責任的'。我對執行寫入的高級過程感興趣。請建議我最好的選擇。謝謝。 – user630286

+1

兩個進程在同一個文件上都使用'mmap()'。它們通過這個共享內存對文件的同一頁面進行一些更新。最終頁面刷新到磁盤 - 應該返回哪些進程信息? – Barmar

回答

1

我做了一些搜索上就此問題,而這些看好: •Copyhook處理程序 - 適用於MSDOS外殼,WinReg項 提起攔截DLL•NtSetInformationFile •微過濾器 - 我認爲這是便攜式用於跨平臺 •可安裝的文件系統驅動程序 - 當然,還有

文件共享類型:某些文件系統支持審計和保護強化,但可能只是「事後」。

CopyHook看起來很有希望簡單:攔截shell文件操作調用窗口:

https://msdn.microsoft.com/en-us/library/bb776048.aspx

司機層次的東西變得非常毛茸茸的,非常快......