Unix File System
UFS | |
---|---|
開発者 | CSRG |
正式名 | UNIX file system |
導入 | (4.2BSD) |
構造 | |
ディレクトリ | テーブル |
限度 | |
最大ファイル サイズ |
273バイト (8 ZiB) |
最大ファイル名長 | 255 バイト |
最大ボリューム サイズ |
273バイト (8 ZiB) |
特徴 | |
重複排除 | {{{single_instance_storage}}} |
対応OS | FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, A/UX |
Unix File System(UFS)とは、UNIX系列のOSにおいて使用されるファイルシステムである。
また固有のファイルシステムを指す言葉ではなく、Version 7 Unix のファイルシステムおよびそこから派生した一連のファイルシステムの総称である。 一般にUFSと呼ぶ場合は4.2BSDで実装された Fast File System (FFS) のことを指す場合が多く、他にはFFFS、UFS2、UFS Logging等が存在する。
設計
UFSボリュームは以下の部分から構成される。
- パーティションの先頭数ブロックはブートブロックとして予約されている(ファイルシステムとは別に初期化する必要がある)。
- UFSであることを示すマジックナンバーやファイルシステムの構成を示す基本的な値や統計情報やチューニングパラメータを含むスーパーブロック。
- シリンダグループの集合体。各シリンダグループには以下のような構成要素がある。
inode は順に番号を振られている。ルートディレクトリの inode の後の何個かの inode は歴史的理由により予約されている。
ディレクトリファイルは、そのディレクトリにあるファイルのファイル名と対応する inode 番号だけを格納している。ファイルについての全てのメタデータは inode にある。
背景
初期のUNIXで使っていたファイルシステムは、単に FS と呼ばれていた。FS にはブートブロック、スーパーブロック、inode群、データブロック群だけが存在していた。初期のUNIXで使っていた小さいディスクではこれで十分であったが、技術の進歩と共にディスク容量が大きくなり、inodeのある部分とデータブロックの間をヘッドが行き来することによる(いわゆる)スラッシングが無視できなくなってきた。BSDではこれを最適化した FFS (Fast File System) を導入した。これは、シリンダグループという概念を発明したもので、ディスクを小さい部分に分け、それぞれにinodeとデータブロックを配置する構成である。
BSD FFS は、データブロックとそれに関連するメタデータを同じシリンダグループに配置することでアクセスを局所化しようとしたものであり、理想的には1つのディレクトリのコンテンツが(データブロックも対応するメタデータも)同じか近いシリンダグループに配置され、ディレクトリのコンテンツがディスク全体に分散配置されることによるフラグメンテーションを低減する。
スーパーブロックには性能に関わるパラメータとして、トラック数、セクタ数、回転速度、ヘッド速度、トラック間のセクタ配置などの情報がある。完全に最適化されたシステムでは、プラッタの回転を待つ間に近接するトラック間でヘッドを移動させ、不連続に配置されているセクタを読むことができる。
ディスク容量が大きくなると、セクタレベルの最適化は効果を発揮できなくなってきた(特に、トラック当たりのセクタ数が一定でない場合)。ディスクが大容量化しファイルが巨大化すると、読み込みが断片化することがさらに大きな問題となってきた。これに対してBSDは当初、ファイルシステムのブロックサイズを1セクタから1Kに増やし(4.0BSD)、FFS ではそれをさらに 8K に増やした。これにはいくつかの効果がある。ファイルのセクタが連続確保される可能性が大きくなる。ファイルのブロックをリストで保持するオーバーヘッドを低減できる。ブロック数を保持するビットフィールドで表現できるファイルサイズ上限が大きくなる。
ブロックサイズが大きくなると、小さいファイルがたくさんある場合は領域を無駄に消費することになる。そこでBSDではブロックレベルのフラグメント化を導入した。ファイルの最後の部分はブロックサイズ未満になるので、それをブロックを分割したサブブロックに格納することで領域を有効活用できるようにする。これをブロックのサブアロケーション、テールマージ、テールパッキングなどとも呼ぶ。
参考文献
- Marshall Kirk McKusick, William N. Joy, Samuel J. Leffler and Robert S. Fabry (1984年). A Fast File System for UNIX. Computer Systems Research Group, Computer Science Division, Department of Electrical Engineering and Computer Science, University of California, Berkeley, Berkeley, CA 94720 .
- Marshall Kirk McKusick, William N. Joy, Samuel J. Leffler and Robert S. Fabry (8月 1984年). “A Fast File System for UNIX”. ACM Transactions on Computer Systems 2 (3): 181–197. doi:10.1145/989.990 .
- Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, and John S. Quarterman (1996). “Local Filesystems”. The Design and Implementation of the 4.4BSD Operating System. Addison-Wesley. ISBN 0-201-54979-4
- Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, and John S. Quarterman (1996). “Local Filestores”. The Design and Implementation of the 4.4BSD Operating System. Addison-Wesley. ISBN 0-201-54979-4
- Marshall Kirk McKusick and Gregory R. Ganger (1999). “Soft Updates: A Technique for Eliminating Most Synchronous Writes in the Fast Filesystem” (PDF). Proceedings of the FREENIX Track: 1999 USENIX Annual Technical Conference. pp. 1–18.
- Marshall Kirk McKusick (2002). “Running "fsck" in the Background”. Proceedings of the BSDCon 2002. pp. 55–64.
- The Linux Documentation Project, Filesystems HOWTO: FFS. なお、このサイトでのFFSとUFSの区別の仕方は間違っている。
- Little UFS2 FAQ: What is the difference between UFS and FFS? ここでの FFS と UFS の定義は逆転している。The Design and Implementation of the 4.4BSD Operating System の "Local Filesystems" という章では上層をUFSとし、"Local Filestores" の章では下位層を FFS と称している。
- The Sun Solaris UFS implementation Solaris Internals: Solaris 10 and OpenSolaris Kernel Architecture, Second Edition という本(Richard McDougall, Jim Mauro 著)の一部。ISBN 0-13-148209-2
外部リンク
- Little UFS2 FAQ
- Linux userspace UFS2 tools.
- Filesystems-HOWTO The Linux Documentation Project の一部
- UFS2 Tools: UFSパーティションにWindowsからアクセスするためのオープンソースツール
- Mac OS X 10.5 Leopard: Installing on a UFS-formatted volume
- Large data storage in FreeBSD