設計が終わった方のために、 ここでは実際にパーティション分割を行うための詳細な手順について示します。 ここにあるのはガイダンスだけですが、 実際に行う作業を自動的に行ってくれるツールを 誰かが作ってくれると素晴らしいですね。 具体的には、設計、パーティション分割、フォーマット、 インストールということになるでしょう。
最近の配布パッケージのインストーラには、
パーティション分割からフォーマット、
/etc/fstab
の設定にいたるまでを
自動的に行ってくれる機能がついている場合が多いようです。
しかし後に変更したくなったときのためには、
背後で行われている実際の作業の仕組みについて知っておく必要があるでしょう。
はじめるに当たって必要なのは…
DOS などでは、起動するとすべてのパーティションが表示され、
それぞれに C:
以降のドライブレターが割り当てられます。
これは IDE、 SCSI、ネットワークドライブその他、
どんなメディアでも同じように扱われます。
ところが Linux の世界では少々異なります。
ブート時には以下のようなパーティションの表示が出るはずです。
Dec 6 23:45:18 demos kernel: Partition check: Dec 6 23:45:18 demos kernel: sda: sda1 Dec 6 23:45:18 demos kernel: hda: hda1 hda2
SCSI のドライブには sda
, sdb
, sdc
のような、
また (E)IDE のドライブには hda
, hdb
, hdc
のような名前が付きます。
すべてのデバイスには、同様に標準的な名前があります。
詳細が知りたければ
/dev/MAKEDEV
と /usr/src/linux/Documentation/devices.tex
を見てください。
パーティションはそれぞれのドライブ名に数字が付加されたものです。
つまり hda1
, hda2
のようになります。
SCSI ドライブではドライブ一台あたり 15 パーティションまで、
EIDE ドライブでは 63 パーティションまでです。
両者とも現在のところは、ほとんどのディスクに対して充分でしょう。
これらは /etc/fstab
というファイルに書いてある情報に従って
マウントされ、ファイルシステムの一部となります。
It feels so good / It's a marginal risk / when I clear off / windows with fdisk! (Dustbunny の User Friendly 中の 記事 における歌 "Refund this" より。)
まず最初にそれぞれのドライブをパーティションに分割する必要があります。
Linux では主として二つの選択肢があります。
fdisk
と、これをもう少しスクリーン指向にした cfdisk
です。
これらは複雑なプログラムですので、
マニュアルをしっかり読んでおくようにしてください。
熟練者なら、今では sfdisk
を用いることもできます。
パーティションには三つの種類があります。基本 (primary) パーティション、 拡張 (extended) パーティション、そして論理 (logical) パーティションです。 Linux 以外の OS をブートさせるパーティションは 基本パーティションでなければなりませんが、 これはドライブあたり 4 つまでしか用いることができません。 これ以上のパーティションを用いたい場合は拡張パーティションを指定し、 その中に複数の論理パーティションを作成します。
各々のパーティションには、対応する OS に応じた id 番号がふられています。
Linux の場合は swap(82)
と ext2fs(83)
を使います。
RAID を autostart で使いたい場合に、
RAID パーティションに用いるべきタイプ番号については、
ドキュメントをチェックしておく必要があります。
fdisk
に付属の readme ファイルには、
パーティション分割に関するより詳細な情報が記載されています。
最近 Partitioning HOWTO という文書が出たようです。 これにはパーティション分割のあれこれに関する詳細な情報が 非常に良くまとめられています。 その内容をここに繰り返してこの文書をさらに巨大化させるのは止めておきます。 Partitioning HOWTO を読んでいただくことをおすすめします。
訳注: Partition HOWTO の日本語訳 は JF にあります。
Redhat は Disk Druid というスクリーン指向のユーティリティを作成しました。
これは fdisk
や cfdisk
と同じ動作をする
ユーザーフレンドリなプログラムで、いくつかの作業を自動化もしてくれます。
残念ながらこの製品はまだあまり枯れていないので、
うまく動かないことがあるかもしれません。
その場合は fdisk
か cfdisk
を使ってください。
さらに Mandrakesoft も負けじと、よりグラフィカルなツール Diskdrake を開発しました。こちらも、とてもたくさんの機能を持っています。
GNU project も GNU Parted というパーティション分割ツールを提供しています。
Ranish Partition Manager
というフリーのソフトウェアや、商用で良く使われているものでは
Partition Magic
などもあります。後者では ext2fs
パーティションのサイズ変更もある程度サポートしています。
Windows は一つのドライブに二つ以上の基本パーティションがあると 文句を行ってきます。また Windows でのドライブレターの割り当てでは、 まず基本パーティションをすべてのドライブから探し、 その後で論理パーティションをそれぞれのディスクで再走査するようです。
DOS/Windows をシステムに共存させたい場合には、
まず最初に DOS の fdisk
プログラムを使ってそれらをブートさせる
基本パーティションを作成する必要があります。
さらに NT が必要なら、この段階で配置します。
最後に Linux のためのパーティションを
Linux の fdisk
プログラム群を用いて作成します。
Linux は柔軟ですので、
基本パーティションからでも論理パーティションからでもブートできます。
DOS の fdisk
に関する非常に詳しい情報が
Fdisk.com
と
MS-DOS 5.00 - 7.10 Undocumented, Secret + Hidden Features
から入手できます。バグや落とし穴に関しても詳しいです。
時には既存のパーティションのサイズを、 内部のデータを保ったままで変更しなければならないかもしれません。 もちろん一つの方法としては、 すべてをバックアップしてパーティションを作り直し、 元の中身をレストアすれば良いのです。 これはバックアップシステムの良いテストにもなりますが、 しかし時間もかかります。
もう少し楽な別法として、 パーティションをリサイズ (resizing) する方法もあります。 ここではまずどれかのファイルシステムを望む容量に縮めて、 それからそのパーティションの末尾にあわせて パーティションテーブルを書き換えます。 したがってこの手法はファイルシステムに依存します。
パーティションをしなおすには、サイズを縮めるために ファイルシステムの末尾に空きスペースが必要です。 まずデフラグメントを行って、 ドライブに空白の隙間がないようにしてください。
fips
を用いれば fat
パーティションをリサイズできます。
fips
の最新版である 1.6 版や fips 2.0
を使えば、
fat32
のパーティションもリサイズできます。
これらのプログラムは DOS の下で動作します。
その他のファイルシステムのリサイズはずっと難しいのですが、
有名な商用ソフトウェアの
Partition Magic
では、 resize2fs
を用いて
ext2fs
を含むより多くのファイルシステムをリサイズできます。
最近、大きなディスクに対して問題が生じる版があったので、
最新版を入手するようにしてください。
fips
の効果を最大にするには、ドライブのデフラグメントを行う前に
まず不必要なファイルや空き領域を削除する必要があります。
こうすれば他のパーティションにより多くの空間を割り当てられます。
プログラムが「ドライブの末尾にファイルがある」と文句を言ってきた場合、
それは Microsoft Mirror か Norton Image によって作成された
隠し属性のファイルである可能性が高いです。
それらには image.idx
や image.dat
という名前がついており、
いくつかのシステムファイルのバックアップ情報を保持しています。
いくつかの報告によれば、 Windows のデフラグメントツールによっては、 "Windows にファイルの再配置を許可する (allow Windows to move files around)" というボックスをチェックしないようにする必要があるのだそうです。 そうしないといくつかのファイルが末尾のシリンダに配置されてしまうので、 FIPS はその空間を埋め立てることができなくなってしまいます。
どうしても DOS パーティションの末尾に動かせないファイルが残ってしまう場合は、 DOS プログラム showfat の 3.0 版以降を入手しましょう。 このプログラムはそこにあるファイルを表示してくれますので、 直接扱うことが可能になります。
同じ機能を持ったフリーウェア版としては Partition Resizer があります。パーティションの縮小・拡大・移動ができます。
DOS / Windows の版によっては、 defrag
に隠しオプション
/P
があり、これを指定すると defrag
は
hidden ファイルも移動するようになります。 at your own risk でどうぞ。
パーティションの切り直しはとても危険な作業ですから、 最新のバックアップを手元に置いておくようにしましょう。
Windows 98 に至るまでのすべての Microsoft 製品にはちょっと面倒なバグがあって、
これが少々問題になる人もいるかもしれません。
fat
パーティションを複数使っているとき、
拡張パーティションの末尾が fat
パーティションでないと、
Microsoft のシステムは
「基本パーティションの末尾にある FAT パーティション」の代わりに
「末尾の拡張パーティション」を FAT パーティションとして
マウントしようとしてしまうのです。
この問題に関する 詳細な情報 は、ネットワークから入手できます。
これを避けるには、小さな論理 fat
パーティションを
ディスクの一番最後に配置すれば OK です。
マルチ OS のインストールに関する詳しい情報は V Communications からも入手できます。 しかし彼らはリンクをいじり続けているので、 ここでは直接のリンクを掲載できません。
ハードウェアの設定ソフトには DOS でしか動かないものもありますから、 このパーティションは多少は役にたつでしょう。たとえば DPT の RAID コントローラや多くのネットワークカードなどがそうですね。
これはカーネルに付属の機能です。まだ開発は続いていますので、 最新のドキュメントを良く読んでおくようにしてください。 不安定かも知れませんので、注意してください。
簡単に説明しますと、この機能は複数のデバイスをまとめて、
md0
(あるいは md1
) という新しいデバイスを作ります。
この際には mdadd
というプログラムが用いられ、
mdrun
によって利用できるようになります。この作業は
/etc/mdtab
というファイルによって自動化が可能です。
最新版の md
システムでは
/etc/raidtab
を用い、
これは別の書式で書きます。使っている RAID-tools のパッケージが
md
のバージョンとマッチしているか確認してください。
内部で用いているプロトコルが変更されていますので。
mdrun
以降には、
このデバイスは他のドライブパーティションと全く同じように使うことができます。
以下の記述に従って、フォーマット等の作業を行なってください。
md
を用いた RAID に関する HOWTO も発展途上にあります。
読んでおきましょう。
次に行なうのはパーティションのフォーマットです。
この作業は、ディスク表面にデータ構造を書き込み、
ファイルの書き込み位置を指定できるようにするためのものです。
一番最初にフォーマットを行なう場合は、
同時にベリファイを行なうように指定すると良いでしょう。
この作業は本来の目的には必要ないのですが、
ディスク I/Oのテストとして有効です。
ディスク入出力が連続して頻繁に行われるので、
潜在的な問題 (ターミネーションの不正など) を発見できる可能性があります。
ベリファイ機能の詳細に関しては mkfs
のマニュアルを見てください。
Linux は非常に多くのファイルシステムをサポートしています。
ここでそのすべてを挙げることもできますが、
man fs
してもらう方が良いでしょう。
ここには各々のファイルシステムに関する情報も多少書かれています。
なおこれらのファイルシステムを用いるには、
それに応じたドライバをカーネルに組み込む
(あるいはモジュールとして用意する) 必要があります。
カーネルをコンパイルする際に、
ファイルシステム機能のリストを注意して読むようにしてください。
make menuconfig
を用いれば、
それぞれのファイルシステムに関するオンラインヘルプを見ることもできます。
レスキューディスク作成パッケージには、
minix
, msdos
, ext2fs
のサポートをカーネルに組み込んでいないと使えないものがあるようです。
スワップデバイスにおいても、
フォーマットに準ずる作業を行なう必要があります。
これには mkswap
を用います。
DOS や Windows でのフォーマットに関する重要な内容が MS-DOS 5.00 - 7.10 Undocumented, Secret + Hidden Features にあります。
ここでの「フォーマット」は高レベルのフォーマットのことであり、 ファイルシステムをディスクに作成するものです。これに対して 低レベルのフォーマットは、トラックとセクタをディスクに配置します。 後者は今日ではほとんど必要ありません。
パーティション上にデータを読み書きするには、
まず適切なマウントポイントにそのパーティションをマウントしなければなりません。
これを手動で行なうには mount
コマンドを用います。
またブート時に自動的に行なうには、必要な情報を
/etc/fstab
ファイルに追加します。
後者を行なう際には mount
の man ページをよく読んでください。
記述を間違えた場合は、最悪システムが立ち上がらなくなる場合があります。
fstab
ブート動作の途中で、システムは fstab
ファイルの記述に従って
すべてのパーティションをマウントします。
以下のような内容になっているでしょう。
# <file system> <mount point> <type> <options> <dump> <pass> /dev/hda2 / ext2 defaults 0 1 None none swap sw 0 0 proc /proc proc defaults 0 0 /dev/hda1 /dosc vfat defaults 0 1
このファイルは書式に厳しいので、 専用のエディットツールを用いるほうが良いし、また便利でしょう。 例えば Tcl/Tk ベースのファイルシステムマウンターである on the netfstool や、KDE のエディットツール kfstabなどがあります。
それぞれのフィールドを順に簡単に紹介すると、
パーティションの名前、マウント先、
ファイルシステムのタイプ、マウントのオプション、
いつ dump してバックアップをとるか、
そしていつ fsck
するか、です。
Linux ではファイルチェック (fsck
) を並列動作させることも可能です。
しかし効率のためには、一つのドライブ上にある複数のファイルシステムは
同時に fsck
させないことが大事です。
(手動にしろ fstab
経由にしろ) マウントの際には
たくさんのオプションが利用でき、様々な保護が可能になっています。
以下では中でも便利なオプションを紹介します。
このファイルシステム上のキャラクタスペシャルデバイスや ブロックスペシャルデバイスを利用禁止にする。
マウントされたファイルシステム上のバイナリを実行禁止にする。 スプール領域に便利。
マウントされたファイルシステム上での SUID, SGID を禁止する。 ホームディレクトリに便利。
より詳しい情報や注意点については
mount
や fstab
のマニュアルページを見てください。
設定と実装を賢く行うことができたら、 すべてを「紙に」記録しておきましょう。 ディスク上の情報は、マシンがダウンしたら全く使えませんからね。
パーティションテーブルは破壊されたり失われたりすることもあります。
その場合には、 fdisk
の正確な数値の記録が
ものすごく価値を持つことになります。
その値を入力すればシステムを救うことができるのですから。
printpar
プログラムを用いて、
テーブルをわかりやすい形に記録しておくこともできます。
またそれぞれのディスクの SCSI 番号や IDE 名も書いておきましょう。
そうしないとシステムを正しい順序で再構成できません。
付録 M: にも、 現在のディスクの設定のサマリを生成する 小さなスクリプトを置いておきました。
ハードディスクのチェックには、 ネットから入手できる Disk Advisor boot disk が利用できます。 disk builder を実行するには Windows が必要でした。 このシステムはおかしくなったディスクの診断に有用です。
なお、レスキューディスクは是非作成してテストしておきましょう。 ほとんどのディストリビューションで (おそらくインストールディスクの一部として) 提供されています。 RedHat 6.1 などの一部のディストリビューションでは、 ディスクをレスキュー用途で起動するには、 ブートプロンプトで linux rescue とタイプすることになっています。
レスキュー用途に特化したディスクもネットで配布されています。
これらが必要になったときは、システムの root と boot パーティションが どこにあり、どこに書いてよいか・いけないかを把握している必要があります。
メモ: ブートディスクとレスキューディスクの違いは、 前者はファイルシステムを (通常はハードディスク上のものを) マウントできない場合、起動に失敗するという点にあります。 レスキューディスクはそれ自体でシステムをなしており、 ハードディスクがなくても動作します。