tar はアーカイブする新しい inode を作成しますか?

tar はアーカイブする新しい inode を作成しますか?

tar がディレクトリをアーカイブするように要求されると、各ファイル システム オブジェクトに対して新しい inode が作成されますか? 作成される場合、メタデータをどのように照会して保存しますか? この inode メタデータを保存する形式はシステムごとに異なるのではないですか? tar はどのようにして一貫した出力を維持するのですか?

答え1

tar単一のファイル (inode) を作成します。tarアーカイブの形式は標準化されています。

答え2

tarアーカイブを作成します。アーカイブは、他の多くのファイルやオブジェクトを含めることができる単一のファイルです。したがって、アーカイブは 1 つの関連する inode のみで構成されます。

tar アーカイブでは、tar各ファイルのメタデータがヘッダー ブロックに順番に格納され、その後にファイルの内容がデータ ブロックに格納されます。このヘッダー ブロックには、通常、inode に関連付けられる情報が含まれますが、メタデータを実際にどのように格納するかは、ソース ファイル システムとターゲット ファイル システムによって異なります。

ヘッダー ブロックには次の内容が含まれます (存在する場合)。

/* tar Header Block, from POSIX 1003.1-1990.  */  
/* POSIX header.  */

struct posix_header
{                              /* byte offset */
  char name[100];               /*   0 */
  char mode[8];                 /* 100 */
  char uid[8];                  /* 108 */
  char gid[8];                  /* 116 */
  char size[12];                /* 124 */
  char mtime[12];               /* 136 */
  char chksum[8];               /* 148 */
  char typeflag;                /* 156 */
  char linkname[100];           /* 157 */
  char magic[6];                /* 257 */
  char version[2];              /* 263 */
  char uname[32];               /* 265 */
  char gname[32];               /* 297 */
  char devmajor[8];             /* 329 */
  char devminor[8];             /* 337 */
  char prefix[155];             /* 345 */
                                /* 500 */
};

関連情報