Web教材一覧ハードウェアとソフトウェア

ファイル管理システム(アクセス権,FAT,NTFS)

磁気ディスクには多数のファイルが保存されています。例えば,index.html という名前のファイルが物理的に磁気ディスクのどの個所にあるかを管理するする方式について学習します(ここでは,磁気ディスクを例にして説明しますが,この方式は外部記憶装置全般に利用されています)。
 また,誤操作や不正の防止などの観点から,ファイルへのアクセスを制限することもOSの重要な機能です。その設定についても学習します。

キーワード

FAT,NTFS,クラスタ,アクセス権


ファイル管理システムとは

ディスクには,index.htmlやfat-ntfs.gifなど多くのファイルが記録されています。それらのファイルが物理的にディスクのどの場所にあるのかを管理する必要があります。そしての情報は,ファイル創成・更新・廃棄などの操作により変化します。それを管理するのがファイル管理システムです。ここではディスクを対象にした説明ですが,ファイル管理システムはSSDやUSBメモリなど外部記憶装置全般に適用されています。

Windowsでは,FAT(File Allocation Table)とその発展方式であるNTFS(NT File System)というファイル管理システムが使われいます。MacではHFS+,UNIXではFFS,汎用コンピュータではVTOCなどがあります。ここでは,まず初期のFATを例にしてファイル管理システムの基本を説明し,その発展については現在広く利用されているNTFSを例にします。

クラスタとは

ディスクは,同心円のトラックを固定長に区切ったセクタを単位にデータを記録し,読み書きしています(参照:磁気ディスクの容量計算)。
 しかし,1セクタの容量は512バイトであり,ファイルのサイズはそれよりはるかに大きいので,セクタを単位にファイル管理を行うのは不適切です。それで,複数個のセクタをまとめてクラスタとし,そのクラスタとファイルを関係づけています。

クラスタとファイルの関係
すなわち,クラスタはファイルに割り当て可能なディスクの最小論理単位です。1つのファイルは,1個のクラスタあるいは複数のクラスタに割り当てられ,1個のクラスタには複数のファイルは割り当てることはできません。
クラスタとセクタの関係
クラスタとセクタの関係は,クラスタは論理的にはセクタが連続しているように扱われますが,物理的には必ずしも連続したセクタにはなっていません(連続しているほうがアクセス速度がよいのですが)。
 1ファイルで最低1クラスタを占有するのですから,できるだけクラスタサイズ(セクタ数)を減らすこうが容量の有効活用ができます。逆に,1ファイルを構成するクラスタ数が少ないほうが管理のためのオーバーヘッドが少なくなり処理速度が向上します。
 仮想記憶方式のページングなど,ディスクのアクセスでは4kB単位のことが多いのですが,この場合,1クラスタを8セクタとしている(8[セクタ]×512[バイト/セクタ]=4kB)のです。
最大クラスタ数と最大クラスタサイズ
クラスタの個数は,ファイル管理システムにより制限されます。初期のFAT(FAT16)では,最大クラスタ数は216=65,525個でした。そして最大クラスタサイズは216-1= 32,768 バイトでした。そのため,ディスク(パーティション)の最大容量は,65,525×32,768=2GBに制限されていたのです(これはFAT32やNTFSで大幅に緩和されました)。

FATの構造

この節は,ファイル名とディスクでの物理的な格納場所(格納されているセクタ番号)の関連に関する基本事項ですが,私たちのレベルを超える事項ですので,イメージを理解するだけで十分です。また,厳密な記述にはなっていません。

FATでは,ディスクの内部に,次のような構造で情報が格納されています。このディスクにアクセスしたとき,OSは,これらの情報を得てファイルを読み出したり書き込んだりします。そしてファイルの生成や削除をしたときに,これらの情報を書き換えます。

      MBR
      ┌─────────────┐
    ┌─┼─パーティション1の定義 │
    │ │ パーティション2の定義─┼─┐
    │ └─────────────┘ │
    │                 │
    │ パーティション1        │ パーティション2
    │ ┌───────────┐   │ ┌───────────┐
    └→│ DPB       │   └→│ DPB       │
      │ FAT部      │     │ FAT部      │
      │ ルートディレクトリ │     │ ルートディレクトリ │
      ├───────────┤     ├───────────┤
      │           │     │           │
      │ データ部      │     │ データ部      │
      │           │     │           │
      └───────────┘     └───────────┘

MBR(Master Boot Recode)
ディスクのセクタ0にはMBRが格納されています。ディスク内部をC:やD:のように複数のパーティションに分割することがあります。MBRでは,それぞれのパーティションの先頭セクタ番号やセクタ数などの情報が格納されています。
DPB(Device Parameter Block)
ブートセクタともいいます。該当パーティションに関する情報が格納されています。
1つのパーティションが1つのドライブとして扱われるので,1トラックのセクタ数,1セクタのバイト数,ヘッド数,1クラスタのセクタ数など,ディスクの仕様などが格納されます。また,該当パーティションに特有な,物理ドライブ番号や「FAT16」などの管理システム名なども格納されます。
ルートディレクトリ
このパーティションンに記録されている個々のファイルについて,ファイル属性(システムファイル,読み取り専用,識別子など)や履歴(生成日時,更新日時など)が格納されています。
また,ファイルが存在する先頭のクラスタ番号が格納されており,これによってファイル名とディスクでの記録位置が対応付けらます。
FAT部
ルートディレクトリにより,そのファイルが格納されている先頭クラスタ番号が与えられますが,ファイルが1クラスタに収まらないときは,その次に格納したクラスタ番号を格納することにより,論理上連続したように取り扱うことができます。
例えば,ファイルAがクラスタ番号3のクラスタだけで格納され,ファイルBは番号6と番号5の2つのクラスタに格納されている場合,次のような配列になります。
 クラスタ番号 0    1    2   3   4   5   6   7   8
      ┌────┬────┬───┬───┬───┬───┬───┬───┬───┬─
      │特定用途│特定用途│未使用│A終端│未使用│B終端│ 5 │未使用│未使用│
      └────┴────┴───┴───┴───┴───┴───┴───┴───┴─
データ格納セクタの特定
ここまででファイルが格納しているクラスタが特定できました。しかし,物理的な格納場所であるセクタは特定できません。しかも,クラスタに含まれるセクタは連続していないこともあります。セクタを特定するには,FAT番号とクラスタ番号などから計算するのだそうですが,私は理解していないので省略します。

ファイル管理システムの発展(NTFS)

FATはマイクロソフトが開発したもので,FAT12(初期のMS-DOS)→FAT16(MS-DOS 3.x)→FAT32(Windows95)へと発展してきました。そして,WindowsNT系のOS用に開発しのがNTFS(NT File System)で,これが現在の Windows での標準システムになっています。  NTFSは,FATと比較して,次のような利点があります。

大容量化
先に「FAT16では,1つのパーティションサイズが最大2GBに限定されていた」と述べましたが,FAT32では,最大クラスタ個数が232=約43個になり,2TBまでのパーティションを管理できるようになりました。
1ファイルの大きさは,FAT32では2GBに限定されていましたが,NTFSでは理論的には16エクサ(1018)Bまで拡大されました。
また,個々のファイルやフォルダごとに圧縮機能を適用できるようになり,ディスクの容量を見かけ上増やすことができます。
セキュリティ機能
個々のファイルやフォルダごとにアクセス権の設定や暗号化をすることができます。

NTFSの欠点は,Windows以外のOSとは非互換なことです。FATはマイクロソフト製品ですが,MacOSやUNIXなどWindows以外のOSでのファイル管理システムでも,基本的にはFAT形式のファイルを取り扱えるのですが,NTFS形式のファイルを他のOSでアクセスするには,面倒な処理を行う必要があり,それでも不可能なことがあります。

ファイルやフォルダへのアクセス権設定

アクセス権とは,どのファイル(フォルダ,ディレクトリ)に関して,誰に,どのようなアクセスを許可するかということです。その設定は,OSによりやや異なりますが,ここではUNIXを例にして基本事項を示します。

アクセス権の種類と表記

アクセス権には次の3つがあります。
  r:読込(Read)
  w:書込(Write)
  x:実行(eXecute)プログラムなどの実行はできるが読み書きはできない
 これを組み合わせて次のように3文字で権限を表します。r→w→xの順に記述,-は与えない権限を示します。
  rwx:すべての権限を与える
  r-x:読むこと実行することができるが,書き込み(更新)はできない
  rw-:読み書きできる(プログラムでなければxは無関係)
  --x:読み書きはできないがプログラムの実行だけはできる
  ---:アクセスできない

これを一つの数値で表現することもあります。rを4,wを2,xを1とした合計値を用います。
  rwx=7(4+2+1)
  r-x=5(4+1)
  rw-=6(4+2)
  --x=1
  ---=0

対象者の区分

 アクセス権を与える対象者は次の3つに区分します。
  所有者
  グループ:所有者が設定したグループに所属するメンバ全員
  その他:グループに属さない人
 それぞれに設定した上述の3文字を所有者→グループ→その他の順に並べて9文字にすることにより,全体のアクセス権を示すことができます。
  rw-rw-r--:所有者およびグループは読み書きできるが,その他は読むだけで書けない。
  rw-r-----:書込みができるのは所有者だけ,グループ・その他は読むだけ
 これも,所有者,グループ,その他の数値をそれぞれ100,10,1の位にすることにより,数値で表現することができます。

なお,実際にはこの9文字の前に,ファイルの削除・ファイル名の変更の権限を示す1文字のスティッキ・ビットを加えた10文字にするのですが,それに関しては省略します。