Vitruvian Penguin
knoppix

[knoppix:3005] Re: リマスタ時の奇怪現象(一応のまとめ)

Date: Tue, 24 Feb 2004 02:01:45 +0900
X-mailer: Sylpheed version 0.9.7 (GTK+ 1.2.10; i386-pc-linux-gnu)
柘植です。こんにちは。

本スレッドの内容を以下に整理します。

私自身の Linux一般についての理解が浅いため、間違ったことを
書いている可能性は大いにあるということをあらかじめお断りして
おきます。

// contents
  +00 初出
  +01 問題とされた現象の概要
  +02 この現象の詳細
  +03 この現象が起きる原因
   ++03-1 ブロックサイズの違い
   ++03-2 ISO9660ファイルシステムではハードリンクを正しく扱えない
  +04 まとめ
// contnts

  +00 初出
 
     [knoppix:2912] リマスタ時の奇怪現象
      http://www.freeml.com/message/knoppix@xxxxxxxxxx/0002912

  +01 問題とされた現象の概要

「マウントされたcloopファイルKNOPPIXの内容をHDにコピーすると
 サイズの総和が増加する」

  +02 この現象の詳細

/KNOPPIXディレクトリ内のハードリンクの数を調べ、

  # for i in $(find /KNOPPIX -type f -links +1); do ls -li $i; done | \
    sed 's/^  *//' >  hardlink.list
  # wc -l hardlink.list
    1544  hardlink.list

それらのうちinode番号が同じものが存在しているかどうか調べる。

  # cat hardlink.list | cut -d " " -f1 | sort | uniq | wc -l
    1544

すべて違うinode番号がついていることがわかる。

ハードディスクにコピーする。

  # cp -a /KNOPPIX/* /mnt/hda5

コピー先でハードリンクの数を調べてみると

  # wc -l hardlink.list
    0  hardlink.list

ハードリンクは1個も存在しなくなっている。
このことで生じるサイズの増加は数十MB程度。

[参考]
 freedups.pl ( http://www.stearns.org/freedups/ )
 というツールを使うとハードリンクと推定されるファイルを捜し出して
 リンクを張り直してくれる。

コピー元の/KNOPPIXディレクトリとコピー先の/mnt/hda5で
サイズの合計の変化を調べてみる。

 # du -s /KNOPPIX
 # du -s /mnt/hda5

コピー先のブロックサイズが
  
  4096(bytes)の場合
    1847310 ---> 2125424    278114(kilobytes)  15% 増加
                  
  2048(bytes)の場合
    1847310 ---> 1952938    105628(kilobytes) 5.7% 増加
 
  1024(bytes)の場合
    1847310 ---> 1877319     30009(kilobytes) 1.6% 増加

コピー元である/KNOPPIXディレクトリはISO9660でマウントされている。
ISO9660ファイルシステムのブロック(セクタ)サイズは一般的に2048 (bytes)。

  +03 この現象が起きる原因

   ++03-1 ブロックサイズの違い

一般的にブロックサイズが小さなファイルシステムのデバイスから
ブロックサイズが大きなファイルシステムのデバイスに、数多くの
ディレクトリや小さなファイルを含むディレクトリツリーのコピー
を行なうとディレクトリツリー全体のサイズが増加する。

KNOPPIXに固有の現象ではない。

また、ディレクトリ自体のサイズはブロックサイズと同じになる。

[参考URL]
 http://japan.internet.com/linuxtutorial/20011208/1.html
 http://search.luky.org/linux-users.9/msg09161.html

   ++03-2 ISO9660ファイルシステムではハードリンクを正しく扱えない

これもKNOPPIX固有の現象ではない。

mkisofsでISO9660ファイルシステムを作るとハードリンクの状態が変化する。
create_compressed_fsはこの問題には関係ない。

本来ならハードリンクされたファイル同士は同じinode番号を持つはず。
しかし、ISO9660ファイルシステム上ではinode番号がそれぞれ別々に
なってしまう。

そのため、cloopファイルKNOPPIXをマウントして内容をハードディスクに
コピーすると、ハードリンクされていたファイルがそれぞれ別の独立した
ファイルとしてコピーされるため、その分ファイルサイズの総和が増加する。

[参考URL]
 http://www.ussg.iu.edu/hypermail/linux/kernel/0301.1/0664.html  
 http://www.knoppix.net/forum/viewtopic.php?t=4694 
 http://mailman.linuxtag.org/pipermail/debian-knoppix/2003-September/003968.html

  +04 まとめ

この現象に対する視点を変えてみる必要がある。

  「/KNOPPIXディレクトリの中身をHDにコピーしたらサイズの総和
  が増えた」

ではなくて、

  「ext2ファイルシステム上に存在しているディレクトリツリーを元に
  mkisofsでISO9660ファイルシステムを作成したらサイズの総和が減少した」

そう考えれば、再びHDにコピーしたときにはサイズが「増える」
のではなく「元に戻る」のだと考えられる。

ただ、たとえばext2のファイルシステム上で存在していたハードリンクは
mkisofs実行、作成されたイメージファイルをループバックマウントして
その中身を再びext2ファイルシステムにコピー、という手続きを経ることで、
ファイルサイズ、タイムスタンプなどは同じだがハードリンクではない
別々のファイルに変化してしまう、ということは避けられない。

以上。
-- 
Tsuge Akihide
<Prev in Thread] Current Thread [Next in Thread>