大容量ファイルの末尾からヌルバイトを削除する

大容量ファイルの末尾からヌルバイトを削除する

次のコマンドを使用して、Linuxディストリビューションを実行しているPCのRaspberry PiからmicroSDカードをバックアップしました。

dd if=/dev/sdx of=file.bin bs=16M

microSDカードは3/4だけ満たされているので、この巨大なファイルの終わりにいくつかのnullバイトを持たせたいと思います。私はそれが必要ではないと確信しています。後でこのコマンドを使用して復元できるように、これらのヌルバイトを最後に効果的に削除するにはどうすればよいですか?

cat file.bin /dev/zero | dd of=/dev/sdx bs=16M

ベストアンサー1

スペースを節約しながらディスクのバックアップコピーを作成するには、以下を使用しますgzip

gzip </dev/sda >/path/to/sda.gz

バックアップからディスクを復元するには、次を使用します。

gunzip -c /path/to/sda.gz >/dev/sda

これにより、単に末尾のNULバイトを削除するよりも多くのスペースを節約できます。

末尾の NUL バイト除去

末尾のNULバイトを本当に削除し、GNU sedがある場合は、次のことを試すことができます。

sed '$ s/\x00*$//' /dev/sda >/path/to/sda.stripped

大容量ディスクのデータが sed の一部の内部制限を超えると、問題が発生する可能性があります。 GNU sedにはデータサイズのデフォルト制限はありませんが、GNU sed マニュアルシステムメモリの制限により、大容量ファイルを処理できない可能性があることを説明します。

GNU sed には行の長さにデフォルトの制限はありません。より多くの(仮想)メモリをmalloc()できる限り、必要に応じて行を提供または設定できます。

しかし、再帰はサブパターンと無限反復を処理するために使用されます。これは、使用可能なスタックスペースが一部のモードで処理できるバッファサイズを制限できることを意味します。

おすすめ記事