4

特定のファイルに関連付けられているブロックを特定し、それらにゼロを書き込もうとしています。ディスクの空き領域に対してこれを行ういくつかの方法を見つけましたが、これまでのところ、次のことを行うための適切な提案は見つかりませんでした:

  • ファイルのブロックを識別する
  • それらのブロックにゼロを書き込みます。

これの目的は、仮想化されたシステムです。このシステムには、同一であると識別されたブロックを重複排除する機能があります。これは、ドライブ上のゲスト OS が使用するスペースを削減するために使用されます。

現在、これはddドライブの空き領域にゼロを書き込むために使用されています。ただし、これは VMWare システムに副作用をもたらし、ゲスト OS ドライブが割り当てられたディスク領域全体を使用するようになります。システム上のその時点から、すべてのバイトが書き込まれます。

4

1 に答える 1

5

マウントされていないファイルシステムでも安全に変更できるコードを書くには、かなりの労力が必要です。他に選択肢がない場合を除き、回避する必要があります。

ファイルシステムを簡単に変更するには、基本的に 2 つの選択肢があります。

このようにして、独自のコードを作成する代わりに、(ゲストまたはホスト) OS のファイルシステム コードを使用できます。:-) これらのオプションのいずれかを使用できる場合、以下にリストされているコード フラグメントはファイルをゼロで埋めます。

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 に答える