将零写入文件块

Dra*_*kar 4 python file-io

我试图识别绑定到特定文件的块并向它们写入零。我发现了几种对磁盘上的可用空间执行此操作的方法,但到目前为止我还没有找到任何关于执行以下操作的建议:

  • 识别文件的块
  • 将零写入这些块。

这样做的目的是针对虚拟化系统。该系统能够对标识为相同的块进行重复数据删除。这用于减少驱动器上来宾操作系统使用的空间。

目前,这是通过dd将零写入驱动器上的可用空间来完成的。然而,这对 VMWare 系统有副作用,导致来宾操作系统驱动器使用它分配的整个磁盘空间,因为从那时起,所有字节都已写入系统。

Rol*_*ith 5

编写即使是未挂载的文件系统也可以安全修改的代码将需要付出巨大的努力。除非别无选择,否则应避免这样做。

您基本上有两种选择可以轻松修改文件系统:

这样您就可以使用(来宾或主机)操作系统的文件系统代码,而不必自己编写。:-) 如果您可以使用这些选项之一,下面列出的代码片段将用零填充文件:

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()
Run Code Online (Sandbox Code Playgroud)