連載
» 2010年06月03日 00時00分 UPDATE

作りながら理解するファイルシステムの仕組み(5):tarファイルに魔法をかけてみよう! その2 = マウントの仕組み = (1/2)

今回は、tarfsのメタデータを実際に作るコマンドと、tarファイルをファイルシステムとしてマウントするまでの流れを解説する

[森 崇 株式会社 永和システムマネジメント,@IT MONOist]

 前回の「tarファイルに魔法をかけてみよう! その1」では、tarfs(注1)のメタデータ(注2)構造について解説しました。ここまで読み進められた方であれば、「inode」「ディレクトリデータ」「エクステント」「スーパーブロック」が何のために必要であるか、おおよそのイメージをつかめたのではないでしょうか。tarfsは、非常に単純なファイルシステムではありますが、ファイルシステムの仕組みを理解するうえでは、非常に良い題材だと思います。

 今回は、tarファイルを「ファイルシステム」として「マウント」するまでの流れを解説していきます。読者の皆さんは、Linux上でファイルシステムをマウントしたことはあるでしょうか? 「えっ、ファイルシステム? マウント?」と思われた方。連載第1回の「ないと困る!? ファイルシステムのありがたみ」をお読みいただければ、その役割をご理解いただけると思います。


※注1:
「tarfsって?」という方は、連載第3回「ファイルシステムってそんなに簡単に作れるの?」のデモ動画を見ていただければ、イメージをつかめると思います。


※注2:
「メタデータって?」という方は、連載第2回「素晴らしきファイルシステムのデータ管理」をご覧になられると、今回の記事を読み進めていくうえでの助けになると思います。


tarfsのマウントの流れ

 それでは、tarfsのマウントについて説明していきましょう。マウントに必要となるステップは以下のとおりです。

  1. tarfsのメタデータを作る
  2. メタデータを作成したtarファイルをデバイスファイルに変換する
  3. マウントする

 それでは、これらステップについて順番に見ていきましょう。

1.tarfsのメタデータを作る

 tarfsのメタデータを作成するためのコマンドとして、「mkfs.tarfs」を作成しました。このコマンドの使い方を以下に示します。

    $ mkfs.tarfs tarfile 
※ tarfile: tarファイル

 ご覧のとおり、mkfs.tarfsコマンドにtarファイルを渡すだけなので、使い方はとても簡単ですよね? 早速、このコマンドを使って実験してみましょう! ここで実験用に用意するtarファイルは連載第3回と同じものとします。以下のファイルをアーカイブします。

testDir(ディレクトリ)
testDir/testFile.txt(通常ファイル:ファイルサイズ 35bytes)
testDir/dir(ディレクトリ)
testDir/symfile(シンボリックリンク)

 これらのファイルを「testDir.tar」としてtarファイルにすると、サイズは10kbytes(=10240bytes)になります(図1)。

テスト用tarファイル 図1 テスト用tarファイル

 それでは、testDir.tarに対して、mkfs.tarfsを実行してみましょう(図2)。

テスト用tarファイルにメタデータを追加 図2 テスト用tarファイルにメタデータを追加

 mkfs.tarfsを実行する際、“time -p”をコマンドの前に入れていますが、こうしておくと、コマンドの実行時間を見ることができます。realのところが、コマンドの実行時間(0.07秒)であり、この程度の小さいtarファイルであれば、あっという間に終わります。

 そして、気になるメタデータですが、まずはそのサイズから見ていきましょう。testDir.tarのファイルサイズは、266.5kbytes(=2772896bytes)になっています。これより、tarfsのメタデータサイズは以下の計算式で求められます。

ay_fs05_03.gif

 元のtarファイルサイズ(10kbytes)よりもずいぶんと大きくなってしまいましたが、この原因は現状、メタデータを128kbytes単位で取るようにしているためです。ファイルサイズに応じてこのサイズは調整した方がよさそうですが、今回は取りあえずこのままでいきたいと思います。

メタデータの内訳

 今回作成したメタデータがどのようなレイアウトになっているのかを、ここで簡単に説明しておきます。

 tarファイルのメタデータ領域としては、以下の4つがあります。

(1)inode領域
(2)ディレクトリデータ領域
(3)間接エクステントデータ領域
(4)スーパーブロック

 (1)(2)(3)の領域は、各領域のデータ数が256個を超えると、分散配置される場合がありますが、今回の場合はファイル数が4個と少ないので、分散配置されることはありません。また、ファイル数が少ない関係で、(3)の間接エクステントデータ領域は存在しません。これは、個々のinodeの直接エクステントで賄えるためです。

 以上をまとめると、今回のtarfsのレイアウトは図3のようになります。

testDir.tarのメタデータ 図3 testDir.tarのメタデータ

 1段目の数字の意味は、各領域の開始ブロック番号です。testDir.tarファイルは10kbytesであるため、メタデータの開始はファイル終端である20ブロック(注3)目からです。最初はinode領域が256ブロック分、次にディレクトリデータ領域が256ブロック分、最後にスーパーブロックが1ブロック分を占有します(注4)。

※注3:
tarfsのブロックサイズは、512bytesでしたよね。このため、ファイル終端オフセット10kbytesは20ブロックになります。


※注4:
tarfsのメタデータ構造は、tarfsのメタデータ参照コマンド「tarfscheck」で確認できます。使い方は以下のとおりです。興味のある方は、ぜひチェックしてみてください。

$ tarfscheck tarfile ino [s]


※ tarfile: tarファイル

※ ino: 参照対象inodeのinode番号

※ s: スーパーブロック情報を見たいときは「s」を指定



       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.