4

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

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

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

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

4

1 回答 1

5

编写甚至可以安全地修改未挂载的文件系统的代码将需要付出巨大的努力。除非没有其他选择,否则应避免。

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

  • 虚拟环境中运行 python 。
  • 在主机上挂载虚拟化文件系统。大多数类 UNIX 系统都可以做到这一点,例如借助FUSE(支持多种文件系统类型)和循环设备

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

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()
于 2012-10-07T12:21:42.487 回答