(1/2)今回のお題は、パーティションです。WindowsとLinuxではパーティションに対する考え方もちょっと違います。私自身、初めてSlackwareをインストールするときにずいぶん悩んだものです。});PC/AT互換機におけるパーティションここがポイントパーティション=ドライブ確保できるパーティションは4つまでWindowsでは、原則として分割されたパーティションには独立したドライブ名が割り当てられます(図1)。Ver.3.xに由来すると思われます。Ver.3.xはファイルシステムの制限で32Mbytesまでしか扱えませんでした。そこでHDDを複数の区画に分けて、各区画を32Mbytes以下とすることですべての領域を使おう、というのがパーティションの始まりではないかと想像しています。CPU用OSであるCP/Mにまでたどれるでしょう。それ以前にはマイコン用のメジャーなOSは存在しませんでした。DOS/Windowsのパーティション管理方法。各パーティションは「ドライブ」と呼ばれ、各ドライブは独立したディレクトリツリー構造を持つ。Ver.3.xでもPC-9800シリーズ用では32Mbytesの制限を受けた記憶がありません。改良したのか、そもそもPC/ATとPC-9800シリーズのアーキテクチャ上の違いだったのかは判然としませんが......。PC-9800シリーズ用のMS-DOSではformat.exeが領域管理とフォーマットの両方を行っていました。対してPC/AT互換機用ではfdisk.exeで領域を操作し、format.exeでフォーマットを行うようになっていました。PC-9800シリーズからPC/AT互換機に乗り換えた当初はこれが分からず、苦労したものです。原則としてPC/AT互換機では1つのHDDに確保できるパーティションは4つまでです。これには回避策があって、拡張パーティションを使えばさらに増やせます(編注)。編注:基本パーティション+拡張パーティションの合計が4を超えることはできない(例:基本3つ+拡張1つ)。基本パーティションがすでに4つある場合、拡張パーティションの作成は不可能となる。これは、MBR(マスターブートレコード)内にあるパーティションテーブルに4つ分のエントリしか用意されていないため。拡張パーティション内に作れる「論理ドライブ」はこの制約を受けない。LinuxにおけるパーティションここがポイントLinuxに「ドライブ名」はないUNIX/Linuxでは、パーティションは/下にマウントされるLinuxでのドライブ/パーティション命名法Linuxのファイル名空間は1つです。HDDはすべて「/」(ルート)から順にたどっていけます。ハードウェア的には完全に独立したHDDであっても、これは変わりません(図2)。いうよりも、Linuxの先輩であるUNIXが開発されたころはそれほど容量の大きなHDDがなく、複数のHDDを1つにまとめざるを得なかったということでしょう。実例を挙げてみましょう。話を簡単にするため、4GbytesのHDDを2Gbytesの基本パーティションと2Gbytesの拡張パーティションに分けているとします。Windowsでは基本パーティションがCドライブ、拡張パーティションがDドライブとなり、それぞれが独立したディレクトリ構造を持ちます。対してLinuxでは、もう少し融通が利きます。基本パーティションを/ファイルシステムとして使うことにしましょう。UNIX/Linuxのパーティション管理方法。各パーティションは、物理的に異なるドライブであっても/ディレクトリ下にディレクトリとしてマウントされ、単一のディレクトリツリーを構成するとすることで、拡張パーティションを/home以下に割り当てられます。すると、2つのパーティションは見かけ上1つのディレクトリ構造になるわけです。実際には、/ファイルシステムにいくら空きがあっても、/homeファイルシステムがいっぱいになるとそれ以上/home以下にはファイルを追加できなくなるのですが。実は、MS-DOSにもかつてこれと同じ働きをするjoinコマンドが用意されていました。Ver.5のころにはなくなっています。これは優劣の問題ではなく、文化的なバックグラウンドが違っていたためでしょう。逆に、/dev/hda5を/ファイルシステムにして、/homeに/dev/hda1を割り当てることもできます。実際にはいちいち手でコマンドを打ち込むのではなく、/etc/fstabの記述に従ってファイルシステムがマウントされます。HDDを増設した場合も、/etc/fstabの記述を変更することでファイルシステムに追加します。HDDから順にhda、hdb、hdcと名前を付けていきます。パーティションを表すときは、その後に数字を付けます。hda1は最初の基本パーティションで、hda2は2番目の基本パーティションです。拡張パーティションは5から始まります。Windowsのfdisk.exeに慣れていると複数の基本パーティションを作れるのが不思議に思えますが、Linuxのfdiskでは可能なのです(編注)。編注:Windowsで基本パーティションが1つしか作れないのはfdisk.exeの仕様の問題で、OSレベルでは複数の基本パーティションを扱うことができる。PartitionMagicなどのツールを使えば、Windows環境でも複数の基本パーティションを作成可能。現在のLinuxで標準的に使われているext2というファイルシステムでは、理論的に4Tbytesのパーティションまで扱えます。これだけを見れば、当分の間1台のHDDを1つのパーティションで使えそうです。現実問題としては4Gbytes、8Gbytes、34Gbytesあたりにさまざまな規格上の制約があります。IDEやBIOSの規格を決めたときには、まさかこれほど大容量のHDDが使えるようになるとは予想していなかったためです。実際、私が使っていたマザーボードでは、10GbytesのHDDを認識しないどころか、ブートシーケンスがそこで止まってしまうというありさまでした。これはBIOSの問題だったようです。HDDの認識をスキップすることで無事使えました。した制限に関しては、http://www.linux.or.jp/JF/JFdocs/Large-Disk-HOWTO.htmlに解説されています。一般的に、新しいマザーボードほど制約が少なくなっています。中にはHDDの全容量を認識できないまでもマシン自体の起動が可能で、しかしながら巨大なパーティションからはOSをブートできない、という場合もあり得ます。したときは、カーネルを収めるための領域を100Mbytesくらい確保する必要があるかもしれません。ブートしてカーネルがHDDの容量を正しく認識すれば、BIOSがどうであろうと関係ないので、カーネルを収めたパーティション以外は自由に配置できます。Subsystemの頭文字で、これまたCP/Mが採用して一般化したものです。いまでいうデバイスドライバのようなもので、機種依存部分をここに集めておき、移植の際にはここを書き換えるだけですむようにするのが目的でした。PC/AT互換機のBIOSはシングルタスクのMS-DOSを前提とした設計で、マルチユーザー/マルチタスクのOSでは使えないのです。BIOSを使うのはブート時だけで、カーネルが動き出した時点ではまったく使わなくなり、BIOSの制限は問題にならなくなります。これはWindowsでも同様で、カーネルをメモリに読み込んで制御を移すカーネルローダさえBIOSで読み込めれば何とかなります。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。