tarアーカイブをシーク可能にするものは何ですか?


1

数個のファイルをリストまたは抽出するときに、tarアーカイブがシーク可能であることが大きな違いを生むようです。残念ながら、manページには情報が非常に不足しています。圧縮アーカイブはシーク可能ではないようです[1]が、その投稿には証拠がありません。この問題に関して、より信頼できる情報源がありますか?

[1] https://serverfault.com/questions/59795/is-there-a-smarter-tar-or-cpio-out-there-for-efficiently-retrieving-a-file-store


1
この答えの何が問題になっていますか?
DavidPostill

@DavidPostill:その答えには何の問題もありません。それは単に別の質問に対する答えです。
ペルチェ

本当に?したがって、「GNU tarはデフォルトで「シーク可能な」アーカイブを作成します。」および「現在の(1.26)GNU tarは圧縮を外部プログラムにオフロードするため、圧縮アーカイブは「シーク可能」ではありません」という質問に答えませんか?
DavidPostill

それは元の質問ではなく、裏付けとなる証拠を提供しません。しかし、良いスタートだと思います。
ペルチェ

裏付けとなる証拠はソースコードです。
DavidPostill

回答:


1

各ファイルのファイルヘッダーには、アーカイブ内のサイズが含まれます。これにより、不要な場合にファイルの内容をスキップできます。Tarは、ファイルの内容に続く次のヘッダーを探すだけです。ヘッダー形式に関するドキュメントがあります。

圧縮されたtarファイルはまさにそれです。適切な圧縮解除プログラム(多くの場合gunzip)または圧縮プログラム(gzip)を使用して、圧縮されていないtarファイル形式に自由に切り替えることができます。一部のtarプログラムでは、これが唯一のオプションです。tarファイル自体は、圧縮されていてもシーク可能のままです。

シークできないのは、圧縮形式です。圧縮は、圧縮されるデータを表すために比較的少数のバイトを見つけることによって機能します。比較的少ないバイト値または繰り返されるバイト文字列を持つデータのブロックは、よく圧縮されます。さまざまなバイト値が多く、繰り返されるバイト文字列がほとんどないデータのブロックは、圧縮されても圧縮されません。一部のデータでは、圧縮により実際にファイルのサイズが増加する場合があります。ファイル内のブロックの圧縮率は異なります。非常に圧縮性の高いファイルと比較的非圧縮性のファイルで構成されるtarファイルの場合、分散は極端になる可能性があります。

圧縮データ内には、非圧縮データ内の特定の位置をシークするメカニズムはありません。一部の圧縮プログラムでは、圧縮アーカイブを使用して個々のファイルをシークできますが、圧縮アーカイブがアクセスできるファイルはtarファイルのみです。これらのツールを使用してtarファイルを圧縮することはほとんどありませんが、ファイルセットをアーカイブするときに圧縮または非圧縮のtarファイルが含まれる場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.