PC のハードディスクが発明された時、人々はすぐに複数のオペレーティング システムをインストールしたくなりました。システムには唯1つのディスクし かない場合にさえ、です。それで1つの物理的ディスクに複数の論理的ディス クを割り当てる機構が必要になりました。パーティションとは、ほとんどのオ ペレーティングシステムで完全に別々のディスクとして扱われる、ハードディ スク上の連続したブロック領域のことです。
パーティションが重なってはいけないのはすぐに分かるでしょう。パーティショ ンが重なっていて、あるオペレーティングシステムが同じマシンにインストー ルされた別のオペレーティングシステムの重要な情報に上書きしていたら、嬉 しいことにならないのは明らかです。また隣接したパーティションの間にはす き間がないほうがよいです。あっても有害ではありませんが、パーティション 間にスペースを残すことで貴重なディスクスペースを無駄にしてしまいます。
ディスクを完全に仕切る必要はありません。インストール済みのどのオペレー ティングシステムにも割り当てていないスペースをディスクの最後に置いてお いて差し支えありません。あとでインストールしたどのシステムを最もよく使 うかが明らかになったとき、この残ったスペースを仕切り、そこにファイルシ ステムを置くことができます。
パーティションは動かせませんし、その中のファイルシステムを破壊せずにサ
イズを変更することもできません。ですから通常、パーティションのやり直し
にはそれが及ぶすべてのファイルシステムのバックアップとリストアが必要に
なります。実際のところ、パーティションのやり直しで物事が完全にめちゃめ
ちゃになるのはよくあることです。そこで fdisk
の様なパーティション
を扱うコマンドを使う際は、対象マシンの全てのディスクのすべてをバックアッ
プするべきです。
実際には、ファイルシステムのタイプによってはデータを失わずにパーティショ ンを2つにわけることができます。(幸運ならば。) 例えば、"fips"と呼 ばれるプログラムは、MS-DOS のインストールをやり直すことなく Linux のイ ンストール領域を作るために、MS-DOS パーティションを2つに分けます。で も、マシンの全てを慎重にバックアップする前に、これらのモノに手を出すべ きではありません。でしょ?
テープはバックアップの友です。高速で信頼でき、使い易く、それゆえ頻繁に、 (可能なら)自動的に、気負うことなくバックアップできます。
声を大にして言いましょう:私は真のテープドライブについて話しているので あって ftape なんてものについて言っているのではありません。SCSI を買う ことにしましょう:Linux は SCSI をネイティブにサポートしています。ASPI ドライバは必要ないし、Linux では貴重な HMA も失わずに住みます。既に SCSI ホストアダプタがインストールされていれば増設ディスク、テープ、 CD-ROM を取り付けるだけです。もはや I/O アドレス、IRQ の衝突回避、マス ター/スレーブ、PIO-level matching などに悩まされなくて済みます。
加えて:まともな SCSI ホストアダプタは CPU の多大な負荷なしで高い I/O パフォーマンスを得ることができます。ハードなディスク負荷のもとでも良い 応答時間を体感できます。Linux システムを主要な USENET ニュースの配布用 として使う予定だったり、ISP(インターネットサービスプロバイダ)ビジネス にとびこもうとするつもりなら、SCSI なしでシステムを設計、構築しような んて夢にも思わないことです。いいですか?
インテルベースのシステムでのパーティションの数は黎明期から制限されてい ました。オリジナルのパーティションテーブルはブートセクタの一部としてイ ンストールされ、たった4つのパーティションエントリ分の領域しかありませ んでした。このパーティションは現在では基本(primary)パーティションと呼 ばれています。人々が自分のシステムにもっと多くのパーティションを必要と することが明らかになると、論理(logical)パーティションが考え出されまし た。論理パーティションの数は無制限です:それぞれの論理パーティションは 次の論理パーティションへのポインタを持っています。そのため論理的にはパー ティションエントリの無限のつながりを持つことができます。
互換性を確保するために、全論理パーティションが占める領域は明確に示され
ている必要があります。論理パーティションを使うときは1つの基本パーティ
ションエントリが「拡張(extended)パーティション」として指定され、その最
初と最後のブロックの中に、すべての論理パーティションが収まっている必要
があります。これは、全論理パーティションに割り当てられた領域が連続して
いる必要があるということを暗に示しています。 拡張パーティションは一つ
しか置けません。 fdisk
プログラムで複数の拡張パーティションをつく
ることはできません。
Linux では、ドライブ一台に対して扱うことのできるパーティションの数に制 限があります。 Linux で使える基本パーティションは4つまで(論理パーティ ションを使うのなら3つまで)、SCSI ディスクでは基本、論理あわせて最大1 5のパーティションを使えます(IDE ディスクではあわせて63)。
Linux では、パーティションはデバイスファイルで表されます。デバイスファ イルとは c タイプ(「キャラクタデバイス」: バッファキャッシュを使わない デバイス)か、b タイプ(「ブロックデバイス」: バッファキャッシュを利用す るデバイス)のファイルの事です。Linux では全てのディスクがブロックデバ イスとしてのみ扱われます。他の Unics達とは異なり、Linux ではディスクや そのパーティションに"raw"キャラクタバージョンはありません。
デバイスファイル関係で唯一つ重要なことはそれがメジャー/マイナー デバイ ス番号を持つことで、それらはファイルサイズの代わりに表示されます:
$ ls -l /dev/hda
brw-rw---- 1 root disk 3, 0 Jul 18 1994 /dev/hda
^ ^
| マイナーデバイス番号
メジャーデバイス番号
デバイスにアクセスする際には、入出力操作を行うためにどのデバイスドライ
バを呼び出すのかをメジャーナンバーで選択する。この呼び出しはマイナーナ
ンバーをパラメータとして行うが、このマイナーナンバーをどのように解釈す
るのかは完全にドライバ次第である。ドライバに関する文書は普通、ドライバ
がどのようにマイナー番号を使うかを記述しています。IDE ディスクではこの
文書は /usr/src/linux/Documentation/ide.txt
にあります。SCSI ディ
スクでは、/usr/src/linux/Documentation/scsi.txt
にあると言いた
いところですがここにはありません。ドライバのソースコードを見て下さい。
(/usr/src/linux/driver/scsi/sd.c:184-196
にあります) 幸運にも
Peter Anvin 氏によるデバイス番号とデバイス名のリストが
/usr/src/linux/Documentation/devices.txt
にあります。ブロックデ
バイスのエントリを見て下さい。メジャー番号の 3, 22, 33, 34 が IDE ディ
スクに、8 が SCSI ディスクにわりあてられています。メジャー/マイナー番
号はそれぞれ1バイトであり、それゆえディスクあたりのパーティションの数
に限りがあるのです。
慣習によりデバイスファイルはある特定の名前を持ち、多くのシステムプログ
ラム中にその名前がコンパイル時に埋め込まれています。 IDE ディスクには
/dev/hd*
という名前が、また SCSI ディスクには /dev/sd*
という名前が想定されています。ディスクは a, b, c などと番号付けられ、
それゆえ /dev/hda
は最初の IDE ディスクで、/dev/sda
は最
初の SCSI ディスクです。この2つのデバイスはブロック1から始まるディス
ク全てを表しています。これらのデバイスにまちがったツールで書き込みをお
こなうとマスターブートローダーやディスクのパーティションテーブルが壊れ、
ディスク上の全てのデータが使えなくなり、システムが起動不能になります。
作業をする際には自分がしようとしていることを理解し、もう一度いいますが、
実行する前にバックアップをとってください。
ディスクの基本パーティションは1, 2, 3, 4 です。つまり /dev/hda1
は1つめのIDEディスクの1つめの基本パーティションです。論理パーティショ
ンの番号は5からになります。つまり /dev/sdb5
は 1台目の SCSI ハー
ドディスクの1つめの論理パーティションです。
それぞれのパーティションエントリには最初と最後のブロックを指し示すアド レスとファイル型が格納してあります。ファイル型はそのパーティションがオ ペレーティングシステムのどのファイル型かを示す数字(1バイト)です。コン ピュータコンサルタントにとっては稼ぎの種になることですが、パーティショ ンのファイル型番号は実際は唯一ではなく、それゆえ2つのオペレーティング システムが同じファイル型番号を使う可能性が常にあります。
Linux はファイル型番号として 0x82 を、スワップパーティションとして 0x83をネイティブなファイルシステム(ほとんどすべての人にとってext2)とし て予約しています。以前は一般的でしたが今は古くなった Linux/Minix ファ イルシステムには 0x81 を割り当てています。OS/2 はそのパーティションに 0x07 をあて、その番号を Windows NT の NTFS も使っています。MS-DOS は FAT ファイルシステムのさまざまな味付けの違いのためにいくつかのファイル 型番号を割り当てています:0x01,0x04, 0x06 が知られています。DR-DOS は 0x81 を保護された FAT パーティションを指し示すのに使い、Linux/Minix と ともに使った場合に型による破壊を引きおこしましたが、もはや Linux/Minux と DR-DOS の双方を使うことは滅多にないでしょう。論理パーティションのた めのコンテナとして使われる拡張パーティションは0x05の型番号を持っていま す。
パーティションは fdisk
プログラムで作成、削除を行ないます。自立
したすべてのオペレーティングシステムには fdisk
が含まれ、伝統的
にほとんどすべての OS で fdisk (または FDISK.EXE
)と呼ばれてさ
えいます。いくつかの fdisk
では(有名なのは DOS のものですが)、
他のオペレーティングシステムのパーティションを扱うときに制限があります。
制限とは、知らないファイル型番号持つものは扱えない事、1024より大きいシ
リンダ数を扱えない事、シリンダ境界に終りがないパーティションを作成や認
識できない事、などがあります。例えば、MS-DOS の fdisk は NTFS パーティ
ションを削除できませんし、OS/2 の fdisk では、Linux の fdisk によって
作成された、シリンダ境界で終っていないパーティションを「黙って修正」し
てしまうことが知られています。また DOS と OS/2 の fdisk は1024シリンダ
以上を持つディスクを扱う際に問題がありました。(これらのディスクについ
ての詳しい情報は"large-disk" Mini-Howtoを見て下さい。)