2012-10-07 39 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