目次 †
ファイルシステム †
- ファイルシステムはiノードなどの管理用の領域と、データ用のブロックの領域から構成されている。
- iノードが持つブロック(ディスクをある単位で区切ったもの)へのポインタは十数個程度しかない。
- ブロックのサイズはファイルシステムによって異なる。
- iノードは作成日・ファイルタイプ・最終更新日・ファイルサイズ・グループID・ユーザーIDなどの情報を持つ。
- 間接ブロック(多数のポインタを持つブロックのこと)を組み合わせることで大きなサイズ(4Gバイトなど)のファイルを存在できる。
- ディレクトリもファイルの一種となる。
- ディレクトリとファイルが異なる点は、ディレクトリのファイルのデータブロックには、自ディレクトリが持つファイルのiノードとファイル名が入っていることである。
ファイルシステムの保全性 †
- アプリケーションやDBMSにもよるが、遅延書き込みがデフォルトであるため、iノードは即時ディスクに書き込まれるとは限らない。つまり、タイミングによってはデータを変更したが、iノードがそれに対応していないことがある。このような場合は、整合性を取り戻すために、ファイルシステムのチェックが行われる。
- 例えば、WindowsやUNIXでは突然電源が落ちてしまった場合などにファイルシステムのチェックが実行されるが、これは上記が所以である。
- しかし、ログ機能を持たないファイルシステムでは必ずしもファイルを復旧できるとは限らない。また、UNIXのfsckはあくまでiノードを復旧するものであり、データの復旧は行わない。
- UNIXでは/lost+foundディレクトリに、fsckの結果復旧できなかったデータが置かれる。このディレクトリ内には数字のファイルが存在するが、この数値は復旧できなかったiノード番号を意味する。
各種OSのフォーマット形式の種類 †
OS | フォーマット形式 |
MS-DOS | FAT16,FAT32 |
Windows 9x | FAT16,FAT32,VFAT |
Windows NT | FAT16,FAT32,NTFS |
Mac OS | HFS |
OS/2 | FAT16,HPFS |
Linux | ext2 |
FAT(FAT16/FAT32) †
- Windows 98/Me/2000/XPで採用されているファイルシステムのひとつ。
- FAT16/FAT32の16/32の意味は、ディスクを216(=65,536)個あるいは232(=約42億)個の小さな単位に分割して管理するという意味である。
- ファイルのアクセス制限はユーザー別にかけられない。
- ごみ箱は誰でも復元可能。
- 小容量でのパフォーマンスが優れている。
VFAT(Virtual File Allocation System) †
- Windows 95で採用されていたファイルシステム。
- 基本的な仕組みはFATと同じであるが、FATとの互換性を維持したままで長いファイル名(255文字まで)に対応した点が違う。
NTFS †
- Windows 2000/XPで採用されているファイルシステムのひとつ。
- ロギング機能によってファイルシステムの整合性が保たれる。即ち、ファイルが壊れにくい。つまり、読み書きの信頼性が高い。
- 障害時にジャーナリングファイルシステムというデータ復旧機能がある。
- 大容量HDDでも利用効率が高い。
- 体容量HDDでもパフォーマンス劣化が少ない。
- ファイルシステムの圧縮が可能。ただし、FATドライブはWindows NTでは圧縮不可。
- ファイルへの細かなアクセス権の設定が可能。
- ごみ箱はユーザーごとに管理可能。ただし、サーバーでは原則として復元不可能。
HPFS(High Perfomance File System) †
- IBMのOS/2用で採用されているファイルシステムのひとつ。
- NTFSと同じように従来のFATから比べて様々な制限が解決されている。
- OS/2の他に、Ver.3.5.1以前のWindows NTやLinuxからもアクセスすることが可能である(Windows NT4.0ではアクセス不可)。
ext2 †
- Linuxで採用されているファイルシステムのひとつ。
ファイルシステムの変換 †
FAT→NTFS †
すでにFATでフォーマットされているファイルシステムを後からNTFSに変更することが可能である。
DOSプロンプト上でconvertコマンドを使ってNTFSに変換する。しかし、convertコマンドで変換直後はフォルダごとのアクセス権は設定されていないので、NTFSに変換した後手動で各フォルダに適切なアクセス権を設定する必要があるだろう。
ファイルキャッシュ †
- ファイルシステムを使うと、通常はOSが持つI/O用のファイルキャッシュを用いる。
- 当然ながらファイルシステムを経由するとオーバーヘッドがあるが、ファイルキャッシュにヒットすれば読み込みのI/Oを削減できる。
- 多くのOSにおいて、余っているメモリのほとんどが自動的にこのファイルキャッシュとして使用される。
- ファイルキャッシュのI/OはOSのコマンドで表示されるI/O統計には含まれないことが多く、アプリケーションやDBMSのI/O情報に載っていることが多い。
ファイルシステムによって遅くなる原因 †
- ファイルキャッシュがページングを起こしている。
- デーモンなどによるファイルキャッシュのスキャンにより、OSがスローダウンしている。
- ファイルシステムレベルのロックのRead/Write競合により、I/O待ちが発生している。
これらの問題を解消するためには、ファイルシステムの使用を止めるか(rawボリュームを使う)、チューニングをする。
参考文献 †