tarファイルに魔法をかけてみよう! その2 = マウントの仕組み =:作りながら理解するファイルシステムの仕組み(5)(1/2 ページ)
今回は、tarfsのメタデータを実際に作るコマンドと、tarファイルをファイルシステムとしてマウントするまでの流れを解説する
前回の「tarファイルに魔法をかけてみよう! その1」では、tarfs(注1)のメタデータ(注2)構造について解説しました。ここまで読み進められた方であれば、「inode」「ディレクトリデータ」「エクステント」「スーパーブロック」が何のために必要であるか、おおよそのイメージをつかめたのではないでしょうか。tarfsは、非常に単純なファイルシステムではありますが、ファイルシステムの仕組みを理解するうえでは、非常に良い題材だと思います。
今回は、tarファイルを「ファイルシステム」として「マウント」するまでの流れを解説していきます。読者の皆さんは、Linux上でファイルシステムをマウントしたことはあるでしょうか? 「えっ、ファイルシステム? マウント?」と思われた方。連載第1回の「ないと困る!? ファイルシステムのありがたみ」をお読みいただければ、その役割をご理解いただけると思います。
tarfsのマウントの流れ
それでは、tarfsのマウントについて説明していきましょう。マウントに必要となるステップは以下のとおりです。
- tarfsのメタデータを作る
- メタデータを作成したtarファイルをデバイスファイルに変換する
- マウントする
それでは、これらステップについて順番に見ていきましょう。
1.tarfsのメタデータを作る
tarfsのメタデータを作成するためのコマンドとして、「mkfs.tarfs」を作成しました。このコマンドの使い方を以下に示します。
$ mkfs.tarfs tarfile
※ tarfile: tarファイル |
ご覧のとおり、mkfs.tarfsコマンドにtarファイルを渡すだけなので、使い方はとても簡単ですよね? 早速、このコマンドを使って実験してみましょう! ここで実験用に用意するtarファイルは連載第3回と同じものとします。以下のファイルをアーカイブします。
これらのファイルを「testDir.tar」としてtarファイルにすると、サイズは10kbytes(=10240bytes)になります(図1)。
それでは、testDir.tarに対して、mkfs.tarfsを実行してみましょう(図2)。
mkfs.tarfsを実行する際、“time -p”をコマンドの前に入れていますが、こうしておくと、コマンドの実行時間を見ることができます。realのところが、コマンドの実行時間(0.07秒)であり、この程度の小さいtarファイルであれば、あっという間に終わります。
そして、気になるメタデータですが、まずはそのサイズから見ていきましょう。testDir.tarのファイルサイズは、266.5kbytes(=2772896bytes)になっています。これより、tarfsのメタデータサイズは以下の計算式で求められます。
元のtarファイルサイズ(10kbytes)よりもずいぶんと大きくなってしまいましたが、この原因は現状、メタデータを128kbytes単位で取るようにしているためです。ファイルサイズに応じてこのサイズは調整した方がよさそうですが、今回は取りあえずこのままでいきたいと思います。
メタデータの内訳
今回作成したメタデータがどのようなレイアウトになっているのかを、ここで簡単に説明しておきます。
tarファイルのメタデータ領域としては、以下の4つがあります。
(1)(2)(3)の領域は、各領域のデータ数が256個を超えると、分散配置される場合がありますが、今回の場合はファイル数が4個と少ないので、分散配置されることはありません。また、ファイル数が少ない関係で、(3)の間接エクステントデータ領域は存在しません。これは、個々のinodeの直接エクステントで賄えるためです。
以上をまとめると、今回のtarfsのレイアウトは図3のようになります。
1段目の数字の意味は、各領域の開始ブロック番号です。testDir.tarファイルは10kbytesであるため、メタデータの開始はファイル終端である20ブロック(注3)目からです。最初はinode領域が256ブロック分、次にディレクトリデータ領域が256ブロック分、最後にスーパーブロックが1ブロック分を占有します(注4)。
$ tarfscheck tarfile ino [s]
※ tarfile: tarファイル
※ ino: 参照対象inodeのinode番号
※ s: スーパーブロック情報を見たいときは「s」を指定
Copyright © ITmedia, Inc. All Rights Reserved.