io.Copy() を使用してスパース ファイルをコピーすると、ファイルが大きくなることがよくあります
io.Copy() は生のバイトを転送します。これにより、スパース ファイル内のホール (データのないスペース) の存在がマスクされます。実際に住んでいます。この情報には、read(2) などの標準のシステムコールではアクセスできません。そのため、io.Copy() はファイルの疎性を維持できません。
これに対処するには、syscall パッケージと手動処理を使用してさらに詳しく調べる必要があります。特殊な SEEK_HOLE 値と SEEK_DATA 値を持つ Lseek(2) システム コールを使用して、ファイル内のホールを操作できます。
転送中にファイルの疎性を維持したい場合、状況はより複雑になります。 Fallocate(2) を使用すると、サポートされているファイルシステム上でホールの作成を試みることができます。ただし、FAT ファミリなど、一部のファイル システムには本質的にホール サポートがありません。
以上が## Go でスパース ファイルを展開せずにコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。