2008年3月27日木曜日

tar ファイルの基本構造

tar ファイルは、Unix の基本 I/O 単位の 512 バイトのブロックから構成されています。

先頭のブロックはメンバーファイルに対する情報を格納したヘッダブロックであり、その後ろにメンバーファイルのファイル内容が書き込まれたブロックが続きます。メンバーファイルの長さ (バイト数) が 512 の倍数でない場合は、最後のブロックの途中でデータは終わることになります。(長さは当該メンバーファイルに対するヘッダブロック内に記述されています。) そして、サイズ合わせのため 512 バイトに達するまでダミーデータが末尾に追加されます。

各メンバパートはヘッダパートとデータパートから成ります。ヘッダパートは基本的には512バイトの1ブロックですが、機能拡張版では複数のブロックから構成されるヘッダパートもあります。ヘッダパートには、メンバファイルの様々な属性 (サイズやパーミッション、所有者情報等) が書き込まれます。
一方データパートはメンバーファイルの内容がそのまま書き込まれます。データパートも512バイトのブロック単位で書き込まれますので、末尾のブロックには長さ合わせのためのフィラー(詰め物) データが書き込まれることがあります。実際の長さは、ヘッダブロックから取得できます。

次のメンバーファイルが存在する場合は、またヘッダパート、そしてファイルデータパートが続きます。

最後のメンバーファイルのファイル内容ブロックの次にはアーカイブ終端を示す特別なデータ (EOA; End-Of-Archive マーク。全バイトが 0x00 の連続する2ブロック (1024 バイト)) が付与されます。

また、アーカイブ生成時に指定されたブロック化係数によっては、EOA の後ろにサイズ合わせのためのデータが付与されることがあります。

なお、ブロック化したレコードバッファをクリアしないタイプの tar アーカイバの場合は、EOA の後に以前のファイルデータが残っていることがありますが、もちろんこの部分はメンバーデータとしては取り扱われません。

参考: GNU tar 1.19: Basic Tar Format

0 件のコメント: