ファイルシステム 12/22

補足

課題1
  1. df コマンドを実行してみよ。man df を参考に出力の意味を理解せよ。

  2. ls -i コマンドを使って幾つかのファイルの i ノード番号を調べて見よ。

  3. ルートディレクトリの i ノード番号はいくらか。他のファイルシステムの マウントポイント(例えば /home/f)の i ノード番号はいくらか。

課題2

BSD ファイルシステムなど、多くの UNIX 系ファイルシステムでは、 ファイルの実体に対して「唯一のファイル名」は附属しない。 ファイル名(パス名)はファイルの実体へ至る道筋(パス)を指定するもので あり、道筋は複数あっても構わない。

ファイルへのパス(道筋)を階層的に提供するメカニズムが 「ディレクトリ」であるが、その 実体は「パス名とファイルの実体(i-node 番号)の対応づけ」 が書かれた単なるファイルである。

  1. リンクカウントは、あるファイルに対してパスが何通り設定されているかを表して いる。適当な作業ディレクトリ内で、以下の例を実行してみよ。
          % echo hello tmp1 > tmp1
          % cat tmp1
          % mkdir dir
          % ln tmp1 dir/tmp2
          % cat dir/tmp2
          % ls -l
          % ls -l dir
     
  2. 上の例で、tmp1 と dir/tmp2 の実体は同じである。2つのパスは全く対等で あり、「一方が主で他方が従」というわけではない。上の例に続いて以下の例を 実行してみよ。
          % ls -l         # tmp1 のリンクカウントを確認
          % rm dir/tmp2
          % ls -l         # tmp1 のリンクカウントを確認
     
    このように rm でパス名を消してもファイルの実体が消えるとは限らない。 パスを消す(俗にファイルを消す)ためのシステムコールが unlink と名付けられて いる理由もここにある。man 2 unlink の概要を理解せよ。

  3. ディレクトリを作るとそのリンクカウントは最初から2になる。ディレクトリの中 にディレクトリを作成すると、親となるディレクトリのリンクカウントが増える。 以下の例を実行してみよ。
          % rm -r dir
          % mkdir dir
          % ls -l
          % mkdir dir/subdir1
          % ls -l
          % mkdir dir/subdir2
          % ls -l
      
    リンクカウントのこのようなふるまいの理由を考えてみよ。
    ヒント: "ls -la" を実行して、注意深くディレクトリの内容を吟味してみよ。

課題3(後回しで良い)

man chmod を読んで、ファイルに設定できるモードにはどんなものがあるか 調べよ。モードの情報は合わせて何ビットになるか?

課題4: od コマンドの利用法

後の課題で必要になる od コマンドの使用法を理解する。

cat コマンドやテキストエディタでは、ASCII や JIS コード等で 書かれたテキストファイル しか見ることはできない。コードによらずにファイルの中身を吟味する ためには od コマンドを用いる。

オンラインマニュアルを参照しつつ、 自ら実例を試して od コマンドを理解せよ。 特に以下のオプションについての理解は必須である。

    % od -tx1z 
    % od -tx2z
    % od -to2z
    % od -tu2z
    % od -j 0x0100 -N 0x0200

★★ ここまでできたら 美濃の所に フロッピーディスクを取りにくること ★★

課題5

ファイルシステムの内部構造を覗いてみる。 ここで紹介するのは UNIX で用いられることの多い ufs というファイルシステム である。 講義で紹介した単純な BSD ファイルシステムや Linux で採用されている ext2 ファイルシステムとは違う点がある。

  1. 配布したフロッピーディスクには ufs ファイルシステムが作成してある。 usermount コマンドで、これをマウントせよ。 /dev/fd0(フロッピーディスク)はどこにマウントされるか?

  2. ファイルシステムの内容を ls, cd, cat などで確認せよ。結果は以下のようになる。
     
    hope01% cd /mnt/floppy
    
    hope01% ls -li
    3 drwxr-xr-x  2 root  wheel  512  1 28 12:13 dirA
    4 drwxr-xr-x  3 root  wheel  512  1 28 12:12 dirB
    
    hope01% ls -li dirA
    7 -rw-r--r--  2 root  wheel  5  1 28 12:12 hoge
    
    hope01% cat dirA/hoge
    hoge
    
    hope01% ls -li dirB
    5 drwxr-xr-x  2 root  wheel  512  1 28 12:12 dirC
    6 -rw-r--r--  1 root  wheel    6  1 28 12:12 file
    
    hope01% cat dirB/file
    Hello
    
    hope01% ls -li dirB/dirC
    7 -rw-r--r--  2 root  wheel  5  1 28 12:12 file
    
    hope01% cat dirB/dirC/file
    hoge 
    

  3. ls などで見るファイルシステムの姿は、OS により「抽象化」された姿で あるが、このファイルシステムの内容を抽象化なしに直接覗いて見よう。

    抽象化を経ないファイルシステムの裸の姿はディスクイメージと呼ばれる。 ディスクイメージは /dev/fd0 を読めば見ることができる。 テキストデータではないので、less やエディタではなく、od を使う。

    od /dev/fd0 としたときに permission denied と 言われる人は申し出ること。

    フロッピーディスクの内容と同じものが /edu/f/os/ufs_image/floppy_image にも置いてある。

  4. OS により「抽象化」されたファイルシステムの姿と、 ディスクイメージとを関連付けよ。 そのためには以下の 情報は不可欠である。

    また、以下の情報も必要である。

    • i-node ブロック(i-node が格納されている領域)の場所 0070000 (← od で左端に表示される数値。 8進数であることに注意!!!
    • 1ブロックのサイズ : 512 byte (01000)
    • ルートディレクトリの i-node 番号 : 2
    • ★注意★ od コマンドで左端に表示される数値(データの位置)は 8進数である。 1K byte=1024 byte は 02000 に対応する。

    なお、ディスクイメージの中の全ての情報を理解する必要はない。上の「ユーザから 見た構造」がどのようにディスクイメージの中に表現されているかわかれば良い。

    演習が終ったら、 ★ Unmount してから ★ フロッピーを抜くこと。

提出課題

ディスクイメージ /edu/f/os/ufs_image/学籍番号 を解析し、 すべてのディレクトリとファイルの名前とそれらの階層構造、 すべてのファイルの内容を答えよ。

  1. 〆切:1月11日(火)17:00
  2. 提出方法:電子メールで美濃に送る。 Subject を OS-1222 とすること。
  3. 配点:4点

注意: