将零写入文件块

时间:2012-10-07 10:34:42

标签: python file-io

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

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

这个目的是为了虚拟化系统。该系统具有重复删除被识别为相同的块的能力。这用于减少驱动器上的客户操作系统使用的空间。

目前正在使用dd将零写入驱动器上的可用空间。但是,这会对VMWare系统产生副作用,导致客户操作系统驱动器使用已分配的整个磁盘空间,从系统上的那一点开始,所有字节都已写入。

1 个答案:

答案 0 :(得分: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()