Gentoo Logo

1.  ブロックデバイス入門

ブロックデバイス

Linuxファイルシステム、パーティション、ブロックデバイスを含めて、Gentoo LinuxとLinux全般でのディスクに適している側面を詳しく見て行きましょう。 そして、ディスクとファイルシステムの一部始終を理解してもらった上で、Gentoo Linuxのインストールの為にパーティションとファイルシステムのセットアップの手順を案内します。

初めに、ブロックデバイスを紹介します。 おそらく最も有名なブロックデバイスはLinux上で1番目のドライブ、すなわち/dev/sdaでしょう。 SCASIもしくはシリアルATAドライブは両方とも/dev/sd*という名前が付けられます。 カーネルで新しいlibataフレームワークを使用していれば、IDEドライブさえ/dev/sd*という名前が付けられます。 もし古いデバイスフレームワークを使用していたら、1番目のIDEドライブは/dev/hdaになるでしょう。

上記のブロックデバイスはディスクへの抽象的インターフェイスを表しています。 ユーザープログラムはドライブがIDEやSCSIもしくは他のどんなものかどうかを気にすること無く、ディスクと情報をやりとりするためにブロックデバイスを使用できます。 プログラムは簡単にディスク上の記憶領域をランダムアクセス可能な512Mバイトごとの連続したブロックとしてアドレスを指定できます。

パーティション

Linuxシステムを格納するのにディスクの全体を使用することは理論上可能ですが、実際にはほとんどそうはされません。代わりにディスク全体のブロックデバイスはもっと扱いやすいブロックデバイスにより小さく分割されます。${arch}システムではこれら分割されたものをパーティションと呼びます。

パーティションは以下の3つのタイプに分けられます。 基本拡張そして論理です。

基本パーティションはMBR(マスターブートレコード)にその情報が格納されているパーティションです。MBRはとても小さい(512バイト)ので、4つの基本パーティションだけが定義できます。(例えば、/dev/sda1から/dev/sda4)です。

拡張パーティションはより多くのパーティションが含まれた特殊な基本パーティションです。(これは拡張パーティションは4つの基本パーティションの1つで無ければならないということです)。こういったパーティションは元々あった訳ではありません。しかし4つのパーティションでは少なすぎるので、下位互換性を損なうこと無く構成仕様を拡張する為に生まれたものです。

論理パーティションは拡張パーティション内のパーティションです。これらの定義はMBRの中ではなく、拡張パーティション内で宣言されています。

高度な記憶領域

${arch}のインストールCDではLVM2のサポートを提供します。LVM2ではパーティション設定の柔軟性が増します。このインストールハンドブックでは、"通常"のパーティションに焦点を当てますが、LVM2もサポートされていることを知っておくのも良いことです。

1.  パーティション構成を計画する

通常のパーティション構成

もしシステムのパーティション構成を編集するのに興味が無ければ、このハンドブックを通して使っているパーティション構成を使用できます。

パーティション ファイルシステム サイズ 種別
/dev/sda1 ext2 32M ブートパーティション
/dev/sda2 (swap) 512M スワップパーティション
/dev/sda3 ext3 残りのディスク領域 ルートパーティション

もしパーティション(もしくは論理ボリューム)がどれぐらいのサイズにすればいいのか、どれだけの数のパーティション(もしくはボリューム)かにすべきかを知りたいのならば読み進んでください。そうでなければ、今からパーティション作成にfdiskを使うまたはパーティション作成にpartedを使うを読みながら、ディスクのパーティション作成作業を進めてください。(どちらもパーティション編集ソフトです。fdiskは有名で安定しています。partedは少し最近のソフトですが2TB以上のサイズのパーティションもサポートしています。)

パーティション数とその大きさ

パーティションの数は環境に大きく依存します。例えば、多数のユーザーがいるのならセキュリテイを強めバックアップを容易にする為に多分/homeを別にしたいでしょう。もしメールサーバーとして稼働させる為にGentooをインストールしようとしているのなら、全てのメールは /var内に保存されるので/varは別にすべきでしょう。ファイルシステムの良い選択はパフォーマンスを最大限にするでしょう。ゲームサーバーではほとんどのゲームサーバーパッケージが/optにインストールされるので、そこは別にされます。理由は/homeをセキュリティとバックアップの為に別にするのと同じようなものです。/usrは絶対に大きく取らなければならないです。大部分のアプリケーションが含まれるだけでなく、Portageツリーだけで、保存されるソースは別にしても500MB程度は取られます。

こういったように、どういうシステムにしたいのかにかなり依存します。分割されたパーティションまたはボリュームには以下の利点があります。

  • それぞれのパーティションまたはボリュームに最適なパフォーマンスを上げるファイルシステムを選択できます。
  • パーティションを分けておくと、あるゾンビプロセスがパーティションまたはボリュームにデータを書き込み続けてシステム全体の空き容量を使い果たすのを防ぐことができます。
  • 必要ならば、並行した複数のチェックを行えるのでファイルシステムのチェック時間を減らせます。(この利点は複数のパーティションでよりも複数のディスクでより有効ですが)。
  • セキュリティは読込専用、nosuid(setuidビットは無視されます)、noexec(実行ビットは無視されます)等でいくつかのパーティションをマウントすることで増大します。

しかし、複数のパーティションにもいくつか欠点があります。 正しく設定しないと、空き容量がかなりあるパーティションと空き容量の無いパーティションのあるシステムになってしまうでしょう。 もうひとつやっかいなのはパーティション(特に/usr/varといった大切なもの)が分かれていると、 initramfsを使ってブートスクリプトが実行される前に、パーティションをマウントするように設定しなければいけない、ということもあります。 とはいえ、これはどんな環境でも問題になるというわけではありません。

また、SCSIとSATAではGPTラベルを使わなければ15個迄というパーティション数の制限があります。

パーティション設定例として、ラップトップのデモ機(ウェブサーバー、メールサーバー、gnome等を含む)として使われている20GBのディスクを見ていただききましょう。

コード表示 1.1: ファイルシステム使用例

$ df -h
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda5     ext3    509M  132M  351M  28% /
/dev/sda2     ext3    5.0G  3.0G  1.8G  63% /home
/dev/sda7     ext3    7.9G  6.2G  1.3G  83% /usr
/dev/sda8     ext3   1011M  483M  477M  51% /opt
/dev/sda9     ext3    2.0G  607M  1.3G  32% /var
/dev/sda1     ext2     51M   17M   31M  36% /boot
/dev/sda6     swap    516M   12M  504M   2% <not mounted>
(将来使用のための未パーティション領域: 2 GB)

/usrはここでかなりの量(83%使用)を占めていますが、一旦全てのソフトがインストールされると /usrはそんなに増えて行きません。/varに数ギガバイトのディスク容量を割り当てるのは多過ぎる様に思われますが、Portageシステムではパッケージをコンパイルするのに、標準でこのパーティションを使用する事を心に留めておいて下さい。もし/varを1GBのようなもっと適当なサイズにしておきたい場合は、OpenOfficeのような巨大なパッケージをコンパイルするのに十分な空き容量のあるパーティションを指すように、/etc/make.confPORTAGE_TMPDIRの値を変える必要があります。

1.  パーティション作成にfdiskを使う

重要: 2TB以上のパーティションを扱うようなシステムであれば、fdiskではなくパーティション作成にpartedを使うの方法を使ってください。 fdiskは大きなパーティションを扱うことができません。

以下の部分ではfdiskを利用したパーティション設定の作成方法を説明します。 先に説明した通りのパーティションレイアウトを用います。

パーティション 種別
/dev/sda1 ブートパーティション
/dev/sda2 スワップパーティション
/dev/sda3 ルートパーティション

パーティションの割当てを自分の望むように変更してください。

現在のパーティションの割当てを見る

fdiskはディスクをパーティションに分割するのに高機能かつ普及しているツールです。 さあfdiskを実行しましょう。(例では/dev/sdaを使っています)。

コード表示 1.1: fdiskを起動する

# fdisk /dev/sda

fdiskを起動すると、下記の様なプロンプトが出ます。

コード表示 1.1: fdiskプロンプト

Command (m for help): 

現在のディスクのパーティション情報を表示するにはpを入力します。

コード表示 1.1: パーティション情報例

Command (m for help): p

Disk /dev/sda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1   *         1        14    105808+  83  Linux
/dev/sda2            15        49    264600   82  Linux swap
/dev/sda3            50        70    158760   83  Linux
/dev/sda4            71      2184  15981840    5  Extended
/dev/sda5            71       209   1050808+  83  Linux
/dev/sda6           210       348   1050808+  83  Linux
/dev/sda7           349       626   2101648+  83  Linux
/dev/sda8           627       904   2101648+  83  Linux
/dev/sda9           905      2184   9676768+  83  Linux

Command (m for help): 

このディスクの例では7つのLinuxファイルシステム("Linux"と表示されてた各パーテイション)とスワップ("Linux swap"と表示されたパーテイション)で構成するように設定されています。

全てのパーティションを削除する

最初に現在の全てのパーティションをディスクから削除します。dを入力するとパーティションを削除します。例えば、現在の/dev/sda1を削除するには、以下のようにします。

コード表示 1.1: パーティションを削除する

Command (m for help): d
Partition number (1-4): 1

パーティションの削除準備ができました。これでpと入力してもパーティションは表示されませんが、変更が保存されるまで実際には削除されません。もし間違えてしまって変更を保存せずに取消たいときはすぐにqと入力し、エンターキーを押してください。これでパーティションは削除されません。

さあ、これでシステム上の全パーティションを削除したい!と思っているでしょう?パーティションを表示するのにpを、 削除するのにdとパーティション番号を繰り返し入力してください。最後にパーティションテーブルに何も無くなれば終了です。

コード表示 1.1: 空のパーティションテーブル

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System

Command (m for help):

さて今はメモリー上のパーティション構成は空になりました。パーティションを作成する準備が整いました。先程検討したように、通常のパーティション構成を使うことにしましょう。同じパーティション構成にしたくなければ、当然ですがこのハンドブックの例の通りにしてはいけません。もちろん同じパーティション構成にしたくなければ、厳密に案内にならわないでください。

ブートパーティションを作成する

最初に小さなブートパーティションを作成します。新しいパーティションを作成するにはnと入力します。そして基本パーティションを選択するのにpと入力するのに続き、1番目の基本パーティションを選択するのに1と入力します。最初のシリンダーが表示されると、エンターキーを押してください。最後のシリンダーが表示されたら、32Mバイトサイズののパーティションを作成するのに+32Mと入力し、ブート可能(bootable)フラグをセットしてください。

コード表示 1.1: ブートパーティションを作成する

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3876, default 1): (エンターキーを押す)
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M

さて、pと入力すれば以下のパーティションテーブル表示が見られるはずです。

コード表示 1.1: 作成されたブートパーティション

Command (m for help): p

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1          1        14    105808+  83  Linux

このパーティションをブート可能にする必要があります。このパーティションにブート可能フラグを付加するにはaと入力します。もう一度pを入力すると、"Boot"欄に*が付いているのがわかるでしょう。

スワップパーティションを作成する

さあスワップパーティションを作成しましょう。この作業のためには、新規パーティションを作成するのにn、基本パーティションを選択するのにpを入力します. そして2番目の基本パーティション、この例では/dev/sda2を作成するのに2と入力します。最初のシリンダーが表示されると、エンターキーを押してください。最後のシリンダーが表示されたら、512Mバイトサイズののパーティションを作成するのに+512Mと入力してください。この作業の後、パーティションタイプを設定するのにtと入力します。先程作成したパーティションを選択するのに2と入力して、このパーティションタイプを"Linux Swap"にする為に82と入力します。これらの手順が完了後、pを入力すれば下記のようなパーティションテーブルが表示されるはずです。

コード表示 1.1: スワップパーティション作成後のパーティションテーブル

Command (m for help): p

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1 *        1        14    105808+  83  Linux
/dev/sda2         15        81    506520   82  Linux swap

ルートパーティションを作成する

最後にルートパーティションを作成しましょう。この作業のためには、新規パーティションを作成するのにn、基本パーティションを選択するのにpを入力します. そして3番目の基本パーティション、この例では/dev/sda3を作成するのに3と入力します。最初のシリンダーが表示されると、エンターキーを押してください。最後のシリンダーが表示されたら、ディスクの残りの空き容量を確保する為にエンターキーを押します。これらの手順が完了後、pを入力すれば下記のようなパーティションテーブルが表示されるはずです。

コード表示 1.1: ルートパーティション作成後のパーティションテーブル

Command (m for help): p

Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1 *        1        14    105808+  83  Linux
/dev/sda2         15        81    506520   82  Linux swap
/dev/sda3         82      3876  28690200   83  Linux

パーティションの割当てを保存する

パーティションの割当てを保存して、fdiskを終了するにはwを入力します。

コード表示 1.1: 保存してfdiskを終了する

Command (m for help): w

これでパーティションが作成されましたので、ファイルシステムの作成に進むことができます。

1.  パーティション作成にpartedを使う

ここでは先に例にあげたようなレイアウトでパーティションを作成する方法について説明します。 前の章とは違い、この章ではpartedを使います。partedfdiskもどちらもパーティションを作成するためのものですから、 すでにfdiskでパーティションを作成できているのであればこの部分を飛ばしてファイルシステムの作成に進むことができます。

例として用いられるパーティションレイアウトは以下のようになっています。

パーティション 種別
/dev/sda1 ブートパーティション
/dev/sda2 スワップパーティション
/dev/sda3 ルートパーティション

パーティションの割当てを自分の望むように変更してください。

現在のパーティションの割当てを見る

partedfdiskをいくらか新しくモダンにしたようなものです。 ディスクのパーティション設定を行なう簡潔なメニューを持ち、 非常に大きなパーティション(2TB以上)をサポートしています。 では、partedを起動してディスクのパーティションを設定しましょう。 (この例では/dev/sdaを使います。)

コード表示 1.1: partedの起動

# parted /dev/sda
GNU Parted 2.3
Using /dev/vda
Welcome to GNU Parted! Type 'help' to view a list of commands.

partedの全てのオプションを見るにはhelpと入力してリターンキーを押してください。 とりあえずいまはprintコマンドを使って、 選択したディスクの使用中のパーティションを表示します。

コード表示 1.1: サンプルのパーティション設定のpartedによる表示

(parted) print
Model: SCSI Block Device
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
1      512B    2148MB  2148MB  primary  ext4
2      2148MB  3222MB  1074MB  primary  linux-swap(v1)
3      3222MB  21.5GB  18.3GB  primary                  lvm

自由選択: GPTラベルの設定

x86/amd64のマシン上のほとんどのディスクはあらかじめmsdosラベルを使ってパーティションされています。 しかし、大きなパーティション(2TB以上)を作ろうとしているのであれば、 gptラベル(GUIDパーティションタイプ)を使わなければいけません。 partedではmklabel gptとすることでgptラベルを使うことができます。

警告: パーティションタイプを変更すると全てのパーティションがディスクから削除されます。 ディスク上の全てのデータが失われます。

コード表示 1.1: GPTラベルの設定

(parted) mklabel gpt

全てのパーティションを削除する

まだパーティションが(たとえばmklabelを事前にやっていたり、 ディスクが新しく一からフォーマットされたものであるなどによって)全て削除されていなければ、 最初に現在の全てのパーティションをディスクから削除します。 rm <number>とします。<number>は削除したいパーティションの番号です。

コード表示 1.1: パーティションを削除する

(parted) rm 2

同様にして必要ない全てのパーティションを削除してください。しかし、ミスをしないように気をつけてください! partedは変更をただちにディスクに反映します。(変更内容だけを記憶し、実際に保存したり終了したりする前に変更内容を「戻す」ことができるfdiskとは違う、というわけです)

パーティションを作成する

それでは先ほど述べたパーティションを作成していきましょう。 partedでのパーティション作成はそんなに難しくはありません。 以下の項目をpartedに教えるだけです。

  • 使用するパーティションの種類。5つ以上のパーティションを作らない (そしてmsdosパーティションラベルを使う)場合は通常プライマリになります。 そうでない場合、4つ目のパーティションを残りのディスク領域を占める拡張パーティションとして作り、 その中に論理パーティションを作ります。gptラベルのパーティションを使う場合、 プライマリパーティションの数に制限はありません。
  • 使用するファイルシステムの種類partedはほとんどの有名なファイルシステムをサポートしており、 パーティションにどんなパーティションIDを設定すればよいかも知っています。 とはいえ、partedがファイルシステムを作成してくれるわけではありません。 (mkpartfsを使ってファイルシステムを作成することもできますが、 ここでは通常のmkfs.*fコマンドを使用します。) このパーティションIDは自動検出するツールがどんなことをパーティションに行なえばよいのかを判断するのに使われます。
  • パーティションの開始位置(MBまたはGBで指定できます)
  • パーティションの終了位置(MBまたはGBで指定できます)

partedには、次の例でしめすように、パーティションのサイズを指定するだけで自動的に、 パーティションの開始位置と終了位置を計算してくれるという利点があります。

コード表示 1.1: パーティションを作成する

# 32 mbyteの/bootパーティションを作成します
(parted) mkpart primary ext2 0 32mb
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? i

# 512 mbyteのswapパーティションを作成します
(parted) mkpart primary linux-swap 32mb 542mb

# ディスクの残り全てを使うパーティションを作成します
# -1s (マイナス1 s)がディスクの終わりを意味しています
(parted) mkpart primary ext4 542mb -1s
Warning: You requested a partition from 542MB to 21.5GB.
The closest location we can manage is 542MB to 21.5GB.
Is this still acceptable to you?
Yes/No? y

さて、これでprintコマンドを再度実行してパーティションが全て思った通りに設定されているかどうかを確認できます。 うまくパーティションが設定されていれば、quitコマンドでpartedを終了しましょう。

1.  ファイルシステムを作成する

はじめに

さてパーティションが作成されましたので、それぞれにファイルシステムを作成するときが来ました。 もしファイルシステムを選ぶことに興味がなくて、このハンドブックのデフォルトのものを使うことで満足ならば、パーティションにファイルシステムを適用するに進んでください。そうでなければ利用可能なファイルシステムに関して知るために読み進めてください...。

Filesystems

Linuxカーネルでは様々なファイルシステムをサポートしています。 ここではLinuxシステムの多くで共通して使われているext2、ext3、ReiserFS、XFS、JFSについて説明します。

ext2は実証済みで真のLinuxファイルシステムですがメタデータジャーナリングを持ちません。 これは起動時の定期のext2ファイルシステムのチェックにかなりの時間が掛かることもあるということです。 現在、整合性のチェックをとても早く終わらせることのできる次世代のジャーナリングファイルシステムの選択肢があります。 そのために一般的には非ジャーナリングファイルシステムより好まれています。 ジャーナリングファイルシステムはファイルシステムの不整合状態の発生やシステム起動時の大幅な遅延を防ぎます。

ext3はext2ファイルシステムのジャーナル化バージョンです。 full data及びordered dataジャーナリングの様に優れたジャーナリングモードに加えて、素早い回復のためのメタデータジャーナルを提供します。 ほぼすべての状況下で高いパフォーマンスを上げることができるHtreeインデックスを使用しています。 要するにext3は素晴らしいファイルシステムだということです。 ext3はすべての目的、すべてのプラットフォームに推奨されるファイルシステムです。

JFSはIBMの高性能なジャーナリングファイルシステムです。 JFSは軽くて速くて信頼できるB+treeに基づくファイルシステムで、様々な状況下で良いパフォーマンスを上げます。

ReiserFSはB+treeに基づくジャーナル付きのファイルシステムです。 全般的に高パフォーマンスであり、特により多くのCPUサイクルを犠牲にしてたくさんの小さなファイルを扱うようなときに顕著です。 ReiserFSは他のファイルシステムと比べるとあまりメンテナンスされていないようです。

XFSは堅牢という特徴を持ち、拡張性に最適化されたメタデータジャーナリングを持つファイルシステムです。 XFSは様々なハードウェアの問題にあまり寛容ではないようです。

パーティションにファイルシステムを適用する

パーティションやボリュームにファイルシステムを作成するには、それぞれのファイルシステムに合った利用可能なツールがあります。

ファイルシステム 作成コマンド
ext2 mkfs.ext2
ext3 mkfs.ext3
ext4 mkfs.ext4
reiserfs mkreiserfs
xfs mkfs.xfs
jfs mkfs.jfs

例えば、 ブートパーティション(この例では/dev/sda1)をext2に、ルートパーティション(この例では/dev/sda3)をext3(今回の例として)にするには、以下の様にします。

コード表示 1.1: パーティションにファイルシステムを適用する

# mkfs.ext2 /dev/sda1
# mkfs.ext3 /dev/sda3

さあ新しく作成されたパーティション(もしくは論理ボリューム)にファイルシステムを作成しましょう。

スワップパーティションを有効にする

mkswapはスワップパーティションを初期化するのに使うコマンドです。

コード表示 1.1: スワップパーティションを初期化する

# mkswap /dev/sda2

スワップパーティションを有効にするにはswaponを使用します。

コード表示 1.1: スワップパーティションを有効にする

# swapon /dev/sda2

上記のコマンドでスワップを作成して有効にしましょう。

1.  マウント

さてパーティションが初期化されてファイルシステムが収まったので、それらのパーティションをマウントするときが来ました。mountというコマンドを使います。作成したそれぞれのパーティション用にマウントに必要なディレクトリを作成するのを忘れないでください。例ではルートとブートパーティションをマウントします。

コード表示 1.1: パーティションをマウントする

# mount /dev/sda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/sda1 /mnt/gentoo/boot

注意: もし/tmpを別のパーティションとして置きたいのであれば、マウント後にパーミッションを変更するのを忘れないでください。: chmod 1777 /mnt/gentoo/tmp。これは/var/tmpも同様です。

procファイルシステム(カーネルとの仮想インターフェイス)も/procにマウントする必要があります。しかし、最初にパーティション上に色々なファイルを置く必要があります。

(Gentooインストールファイルをインストールする)に進みましょう。

ページの更新日 2011年 10月 17日

要約: Gentooをインストールするためには、必要なパーティションを作らなくてはなりません。 この章では、これから使用できるようにディスクをパーティションで区切る方法を説明します。

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.