GNU/Linux >> Linux の 問題 >  >> Linux

Linux ディスク イメージをスパース ファイルに変換するにはどうすればよいですか?

まず第一に、ゼロを書き込む場合ではなく、シークする場合にのみスパース ファイルが透過的に処理されます。

より明確にするために、ウィキペディアの例

dd if=/dev/zero of=sparse-file bs=1k count=0 seek=5120

しない ゼロを書き込むと、出力ファイルが開き、5MB をシーク (ジャンプ) し、ゼロ を書き込みます。 ゼロ (つまり、何もない)。このコマンド (ではない ウィキペディアより)

dd if=/dev/zero of=sparse-file bs=1k count=5120

5MB のゼロを書き込み、スパース ファイルを作成しません!

結果として、すでに非スパースであるファイルが後で魔法のようにスパースになることはありません。

次に、多数のゼロを含むファイルをスパースにするには、それを cp する必要があります

cp --sparse=always original sparsefile

または、tar または rsync の --sparse オプションも使用できます。


おそらく、ファイルをその場でスパース化する最も簡単な方法は、 fallocate を使用することです ユーティリティは次のとおりです:

fallocate -v --dig-holes {file_name}

fallocate(1) は、Debian の util-linux パッケージによって提供されます。


完全を期すために回答を編集する:

<オール>
  • 空の FS スペースにゼロを付けます (警告:これによりディスク イメージが変更されます):
  • losetup --partscan --find --show disk.img

    ディスクとして /dev/loop1 が指定され、パーティションが 1 つしかないと仮定します。それ以外の場合は、マウント可能な FS を含むすべてのパーティションに対してこれを繰り返す必要があります (スワップ パーティションなどは無視します)。

    mkdir -p /mnt/tmp mount /dev/loop1p1 /mnt/tmp dd if=/dev/zero of=/mnt/tmp/tempfile

    ENOSPC で失敗に終わりましょう。

    /bin/rm -f /mnt/tmp/tempfile umount /mnt/tmp losetup -d /dev/loop1

    1. まばらなイメージにコピー:

    「dd」には、ゼロを含むファイルをスパース ファイルに変換するオプションがあります:

    dd if=disk.img of=disk-sparse.img conv=sparse


    Linux
    1. Linux でマルチパーティション ディスク イメージをマウントする方法は?

    2. Linux でのファイル編集はディスクに直接保存されますか?

    3. TAR ファイルを ISO ファイルに変換する方法

    1. Linuxでディスクiノード数を増やす方法

    2. LinuxでファイルをUTF-8エンコーディングに変換する方法

    3. 「dd」コマンドを使用して Linux でスパース ファイルを作成する方法

    1. Linuxでファイルを移動する方法

    2. Linuxでディスクパーティションをフォーマットする方法

    3. Linux で空きディスク領域を消去するには?