vine-users ML アーカイブ



[vine-users:073460] Re: tarの オプション

  • From: 山口 和人 <kazuto-y@xxxxxxxxxxxxxxxx>
  • Subject: [vine-users:073460] Re: tarの オプション
  • Date: Mon, 7 Nov 2005 23:42:45 +0900
山口と申します。

中司さん、

> "-N"オプションを勘違いしているのでしょうか。

まず、tar ファイルに格納されたファイルが期待通りか
以下のように確認することを勧めます。

  $ tar tvf ./download.tar 

期待している 3 ファイルのみが格納されていますか?
また、各ファイルのバイト数も表示されるので、ls -l で見た
バイト数と比較してみてください。

確認できましたら、以下のようにして tar ファイルのあるべきサイズが
求められるので、検証してみてください。

(1) tar ファイルはブロックが並んだ構造になっています。(1 block = 512 byte)
(2) ファイル(orディレクトリ)毎にヘッダが 1 block 先頭に付加されます。
(3) ファイルのデータはヘッダに続く 0個以上のブロックに格納されます。
    ブロック数は、ファイルのバイト数を 512 で割った商(ただし、
    余りがあった場合は 1 を加える)になります。
(4) 続くファイルは前のファイルのデータブロックに続いて格納されます。
(5) tar 自体にブロック化係数(BFとします)があります。(デフォルトは 20)
    ファイルにより消費されるブロック数の総和 を BF で割って、
    余りがある場合、BF に満たない数の(0 埋めされた)ブロックを
    充填します。
(6) 以上の工程まで行なって末尾の 2 ブロックが 0 埋めされたブロックで
    ない場合、0 埋めされたブロックを BF 個分付加します。
(7) 求められたブロック数に 512 を掛けた数が tar ファイルの
    ファイルシステム上でのバイト数です。


*****
以下、余談。
ちなみに、以下は何の出力ですか?
ls や du の出力を添付するほうが、適切な回答が得られやすいと思います。

>    4.7Mb  httpd-2.0.55.tar.bz2
>    4.1Mb  php-4.4.1.tar.bz2
>   48.8Mb  jdk-1_5_0_05-linux-i586.bin

また、
du で見たファイルサイズが 50 MByte なのに、tar ファイルに納めたら
100MByte になる場合も(稀ですが)あり得ます。
そのファイルが "穴の空いたファイル(sparse file)"の場合です。

du はファイルが消費しているファイルシステムのブロック数を表示しますが、
tar (や普通のコマンド) は read/write するサイズが問題になります。

du と ls -l (と df) が出力するサイズ情報は微妙なところで意味が異なります。
その意味を適切に把握して使用しないと、たまにハマったりもします。 

-- 
山口 和人 (Kazuto YAMAGUCHI) <kazuto-y@xxxxxxxxxxxxxxxx>