2012-10-07 68 views
2

我試圖識別與特定文件綁定的塊並向它們寫入零。我已經發現了幾種方法做到這一點到磁盤上的可用空間,但到目前爲止,我還沒有發現任何下滑做的建議如下:將零寫入文件塊

  • 識別塊文件
  • 寫入零到那些塊。

這是針對虛擬化系統的目的。該系統可以重複數據塊被識別爲相同。這用於減少驅動器上客戶操作系統使用的空間。

當前這是通過使用dd將零寫入驅動器的可用空間來完成的。然而,這對VMWare系統有副作用,導致來賓操作系統驅動器使用它已經被分配的整個磁盤空間,這是從所有字節被寫入的系統上的那個點開始的。

+1

我不知道 - 這看起來可怕的低級別的給我;不像Python這樣的高級語言看起來適合什麼。如果本機Python允許對硬件進行這種訪問,我會非常驚訝。 –

+3

帶上你的潛水裝備並潛入深海C. –

+0

我擔心這最終會成爲共識。是否有人可以爲此發佈最終答案,以便我可以接受並解決問題? – Drahkar

回答

4

編寫能夠安全修改卸載文件系統的代碼需要付出極大的努力。除非沒有其他選擇,否則應予以避免。

你基本上有兩種選擇,使容易修改文件系統:

  • 運行Python 虛擬環境。
  • 將虛擬化文件系統掛載到主機上。大多數類UNIX系統可以做到這一點,例如在FUSE(支持lot of filesystem types)和loop devices的幫助下。

這樣,您可以使用(來賓或主機)操作系統的文件系統代碼,而不必自行滾動。 :-)如果您可以使用這些選項中的一個,下面列出的代碼片段將填充用零文件:

import os 

def overwrite(f): 
    """Overwrite a file with zeroes. 

    Arguments: 
    f -- name of the file 
    """ 
    stat = os.stat(f) 
    with open(f, 'r+') as of: 
     of.write('\0' * stat.st_size) 
     of.flush() 
+0

這看起來正是我所需要的。 – Drahkar