Linux の101 試験対策: ハード・ディスクのレイアウト

ハード・ディスク・パーティションの構成を計画する

Linux システムにおけるディスク・パーティションの構成を設計する方法を学んでください。この記事の内容は、Linux のシステム管理者として認定するための LPI 101 試験に備えるためにも、自ら活用するために学ぶ上でも役立ちます。

2012年 11月 27日 ― この記事は、LPI による「Exam 101: Objective Changes as of July 2, 2012 (101 試験: 2012年 7月 2日時点での目標の変更)」に対応した内容を含めるように更新されました。

主な更新内容としては、論理ボリューム・マネージャー (LVM)、従来のマスター・ブート・レコード (MBR) ディスクを使用したパーティション・テーブルのレイアウト、そして GUID パーティション・テーブル (GPT) についての情報が、「論理ボリューム・マネージャー (LVM)」、「MBR、EBR、GPT、LVM の内部構造」、そして「参考文献」などのセクションにあります。

Ian Shields, Senior Programmer, IBM

Ian ShieldsIan Shields は、developerWorks Linux ゾーンの様々な Linux プロジェクトに関わっています。彼はノースキャロライナ州 Research Triangle Park にある IBM のシニア・プログラマーです。1973年にオーストラリアのキャンベラでシステム・エンジニアとして IBM に入社して以来、カナダのモントリオールやノースキャロライナ州 Research Triangle Park で、コミュニケーション・システムやパーベイシブ・コンピューティングに携わってきました。彼はいくつかの特許を保持しており、論文もいくつか発表しています。Australian National University にて純粋数学および哲学で学位を取得し、また North Carolina State University にてコンピューター・サイエンスで修士号と博士号を取得しています。Ian についての詳しい情報は developerWorks コミュニティーの Ian のプロフィールで調べてください。



2013年 1月 17日 (初版 2010年 2月 24日)

この連載について

この連載は Linux システム管理タスクの学習に役立つだけでなく、LPIC-1 (Linux Professional Institute Certification レベル 1) 試験に備えるための教材にもなります。

連載の各記事についての説明とリンクについては、developerWorks の「LPIC-1 のロードマップ」を参照してください。現在進行中のこのロードマップは、LPIC-1 試験の最新の目標 (2009年 4月 (2012年 7月にマイナーな更新がありました)) を反映しています。完成した記事はその都度ロードマップに追加されていきますが、当面は developerWorks の LPI 認定試験対策チュートリアルで同様の教材の以前のバージョンを調べてください。これらのバージョンは、2009年4月より前の LPIC-1 目標に対応しています。

概要

この記事では、Linux システムにおけるディスク・パーティションのレイアウトを設計する方法を学びます。この記事で説明する内容は以下のとおりです。

  • ファイルシステムおよびスワップ領域を個々のパーティションまたはディスクに割り当てる方法
  • システムの用途に合わせて設計を調整する方法
  • システムがブート可能であることを確実にする方法
  • 論理ボリューム・マネージャー (LVM) の基本機能

この記事は、Linux Professional Institute の Junior Level Administration (LPIC-1) 101 試験の主題 102 の 102.1 の試験対策となります。この目標の重要度は 2 です。

注: この記事では主にレイアウトの計画について取り上げます。実装手順については、主題 104 に対応する記事 (連載のロードマップで説明) を参照してください。

注: この記事には LPI による「Exam 101: Objective Changes as of July 2, 2012 (101 試験: 2012年 7月 2日時点での目標の変更)」に対応した内容が含まれています。新たに追加したのは、論理ボリューム・マネージャー (LVM) の基本情報、従来の MBR ディスクを使用したパーティション・テーブルのレイアウトについてのさらなる詳細、そして GUID パーティション・テーブル (GPT) についての基本情報の一部です。新しいコードのリストや図は、いずれも Fedora 16 64bit 版のシステムで実行およびキャプチャーされたものです。

前提条件

この連載の記事を最大限に活用するには、Linux の基礎知識と、記事に記載されたコマンドを演習できる実際の Linux システムが必要です。プログラムのバージョンによって出力のフォーマットに違いが出てくる場合もあるため、コマンドの実行結果は必ずしもここに記載するリストや図とまったく同じであるとは限りません。


ファイルシステムの概要

Ian とつながるには

Ian は developerWorks で人気の高いお馴染みの著者の 1 人です。Ian が書いたすべての developerWorks 記事を閲覧してみてください。また、developerWorks コミュニティーでは、Ian のプロフィールを調べることや、彼やその他の著者、そして他の読者とつながることができます。

Linux ファイルシステムに保管されるファイルは、ディスクやその他のブロック・ストレージ・デバイス上でディレクトリーという形式で整理されます。他の多くのシステムと同じく、Linux システムでのディレクトリーには、他のディレクトリーを含めることができます。ディレクトリーに含められたディレクトリーは、サブディレクトリーと呼ばれます。Microsoft Windows などのシステムでは、ドライブ名 (A:、C: など) ごとにファイルシステムを分けるという概念ですが、Linux ファイルシステムはそれとは異なり、/ ディレクトリーをルート・ディレクトリーとする単一のツリーです。

ファイルシステムがたった 1 つの大きなツリーだとしたら、なぜディスク・レイアウトが重要になるのか不思議に思うかもしれませんが、実際には、ハード・ディスク・パーティション、CD-ROM、あるいはフロッピー・ディスクなどといったブロック・デバイスのそれぞれにファイルシステムがあります。ファイルシステムを 1 つのツリーとして表すために、ツリー内のポイント (マウント・ポイント) に、さまざまなデバイス上のファイルシステムをマウントするというわけです。

このトピックに関するスキルを磨いてください

このコンテンツは、皆さんのスキルを漸進的に磨いていくための Knowledge Path の一部です。次のリンクをご参照ください。 Basics of Linux system administration: Setting up your system and software

通常、カーネルはある特定のハード・ディスクのパーティション上にあるファイルシステムを / としてマウントすることによって、このマウント・プロセスを開始します。ユーザーは他のハード・ディスクのパーティションを /boot、/tmp、または /home としてマウントすることができます。また、例えばフロッピー・ドライブ上のファイルシステムを /mnt/floppy としてマウントすることや、CD-ROM 上のファイルシステムを /media/cdrom1 としてマウントすることもできます。さらに、NFS のような、ネットワークで接続したファイルシステムを使用して、他のシステムからのファイルをマウントすることも可能です。ファイルのマウントには他にも種類がありますが、以上の説明で、このプロセスの概念はつかめるはずです。マウント・プロセスは、実際にはあるデバイス上のファイルシステムをマウントするわけですが、一般的には「デバイスをマウントする」と略して表現されます。これは、「デバイス上のファイルシステムをマウントする」という意味として理解されています。

ここで、例えばルート・ファイルシステム (/) をマウントした直後に、CD-ROM (/dev/sr0) をマウント・ポイント /media/cdrom にマウントする場合を考えてみてください。このマウント・ポイントに CD-ROM をマウントするには、このマウント・ポイントがあらかじめ存在していなければなりません。既存の /media/cdrom に CD-ROM をマウントすると、CD-ROM 上のファイルとサブディレクトリーはこのマウント・ポイント内およびその配下にあるファイルとサブディレクトリーになります。それによって、/media/cdrom 内にあったファイルまたはサブディレクトリーは表示されなくなりますが、これらの既存のファイルおよびサブディレクトリーは、マウント・ポイント /media/cdrom が含まれていたブロック・デバイス上に残っています。そのため、CD-ROM がアンマウントされると、元のファイルとサブディレクトリーが再び表示されることになってしまいます。このような問題が起こらないようにするため、マウント・ポイントとして使用する目的のディレクトリーには他のファイルを置かないでください。

表 1 に、FHS (Filesystem Hierarchy Standard) で規定されている / 配下のディレクトリーを記載します (FHS についての詳細は、「参考文献」を参照してください)。

表 1. FHS で規定された / 配下のディレクトリー
ディレクトリー説明
bin必須のコマンド・バイナリー
bootブート・ローダーの静的ファイル
devデバイス・ファイル
etcホスト固有のシステム構成
lib必須の共有ライブラリーおよびカーネル・モジュール
media取り外し可能なメディアのマウント・ポイント
mntファイルシステムを一時的にマウントするためのマウント・ポイント
optアドオン・アプリケーションのソフトウェア・パッケージ
sbin必須のシステム・バイナリー
srvこのシステムが提供するサービスのためのデータ
tmp一時ファイル
usr2 次階層
var可変データ

パーティション

通常、1 番目の SCSI ドライブは /dev/sda となります。古いバージョンの Linux システムでの 1 番目の IDE ハード・ディスクは /dev/hda です。シリアル転送方式にした IDE ドライブ (SATA) の登場により、PATA/SATA 混合時のシステムでは 1 番目の PATA ドライブに /dev/hda を使用し、1 番目の SATA ドライブに /dev/sda を使用することもあります。新しいバージョンのシステムでは、すべての IDE ドライブが /dev/sda、/dev/sdb という形の名前になります。IDE ドライブの名前は、(最初は USB ドライブをサポートしていた) ホットプラグ・システムに対応することで変更されるようになりました。ホットプラグでは、新しいデバイスを接続すると同時に使用することができます。今では、デバイスがシステムに統合されるのか、あるいは USB や Firewire (IEEE 1394)、あるいは別の接続タイプによって、デバイスが実行中のシステムに接続されるのかに関わらず、すべてのデバイスにホットプラグが使用されています。

従来から、ハード・ディスクは 512 バイトのセクターにフォーマットされます。ディスク・プラッター上の、ヘッドを動かさずに読み取り可能なセクターはすべてトラックの構成要素となります。ディスクには通常、複数のプラッターがあります。プラッター上にあり、ヘッドを動かさずに読み取り可能なトラックの集合は、シリンダーと呼ばれます。ハード・ディスクのジオメトリーはシリンダーの数、シリンダーあたりのトラック (ヘッド) 数、およびトラックあたりのセクター数で表現されます。この記事を執筆している時点で、ハード・ディスクのメーカー各社は、セクターが 4K のディスクを導入するようになっています。ファイルシステムが以前と同じく 512 バイトのセクターを前提としていると、パーティションが 4K の境界にあるセクターで開始しない場合、パフォーマンスが劣化します。

PC システムの DOS オペレーティング・システムで使用されていたシリンダー、ヘッド、セクターにはサイズに制限があったため、より容量の大きいハード・ディスクをサポートできるように BIOS によるジオメトリー値の変換が使用されるようになりました。けれども結局のところ、いずれの方法も十分ではありませんでした。そこで、ディスク・ドライブ技術における最近の開発によってもたらされたのが、論理ブロック・アドレッシング (LBA) という手法です。この手法により、CHS (シリンダー、ヘッド、セクター) ジオメトリー測定値はそれほど重要でなくなりました。最近のディスクに関して報告されるジオメトリーは、実際の物理セクター・レイアウトとほとんど、あるいはまったく関係ありません。現在使用されている大容量ディスクに対応するために拡張された LBA は、最大 48 ビット分のセクター数を確保することから、LBA48 として知られています。そして今では大容量ドライブ用に、マスター・ブート・レコード (MBR) フォーマットの代わりに GUID (Globally Unique IDentifier) パーティション・テーブル (GPT) と呼ばれる新たなフォーマットが使用されています。GPT ドライブはデフォルトで最大 128 パーティションをサポートしています。

ハード・ディスク上の領域はパーティションに分割 (セグメント化) されます。パーティションが重なり合うことはできません。パーティションに割り当てられていない領域は空き領域と呼ばれます。パーティションには、/dev/hda1、/dev/hda2、/dev/hda3、/dev/sda1 といった名前が付けられます。IDE ドライブのホットプラグをサポートしないシステムでは、IDE ドライブのパーティションは 63 に制限されます。ホットプラグ対応の SCSI ドライブ、USB ドライブ、IDE ドライブで使用できるパーティションは 15 です。パーティションは多くの場合、シリンダー単位の整数として割り当てられます (基準となるシリンダーの概念は正確ではない可能性もあります)。

2 つの異なるパーティショニング・プログラムが、公称ディスク・ジオメトリーをそれぞれに異なって理解すると、一方のパーティショニング・プログラムが作成したパーティションに対し、もう一方のパーティショニング・プログラムがエラー、または問題の可能性を報告する場合があります。このような問題は、システム間の BIOS 機能が異なる場合はなおさらのこと、ディスクがあるシステムから別のシステムに移動されたときにも起こることがあります。

Linux システムで公称ジオメトリーを確認するには、parted または fdisk いずれかのツールを使用します。古いバージョンの Linux システムでも、ジオメトリーは /proc ファイルシステム内の /proc/ide/hda/geometry などの (新しいバージョンのシステムには存在しない可能性がある) ファイルで報告されていました。リスト 1 に、fdisk コマンドを使用して、SATA 接続を使用した IDE ハード・ディスクのパーティションおよびジオメトリーを表示する方法を記載します。ここで、fdisk-v パラメーターが指定するのはバージョンです。パーティション・テーブルを表示または操作するには、root ユーザーであるか、または以下のように sudo を使って root 権限を取得する必要があります。

リスト 1. ハード・ディスクのジオメトリー
ian@attic4:~$ fdisk -v
fdisk (util-linux-ng 2.16)
ian@attic4:~$ sudo fdisk /dev/sdb
[sudo] password for ian: 

The number of cylinders for this disk is set to 30401.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/sdb: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000404d6

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          25      200781   83  Linux
/dev/sdb2              26       12965   103940550   83  Linux
/dev/sdb3           12966       30401   140054670   83  Linux

Command (m for help):

リスト 1 では、fdisk がシリンダー 1024 の公称終了位置について警告を出力していることに注意してください。シリンダー 1024 が重要となるのは、BIOS がディスクの最初の 1024 のシリンダー内に完全に収まっているパーティションしかブートすることができない一部の古いシステムです。その場合、LBA サポートを備えていない BIOS や、古いバージョンのブート・マネージャーで問題が起こりがちです。最近のマシンでこれが問題になることは通常ありませんが、このような制約があることを認識しておいてください。

fdisk-u オプションを指定すると、セクター単位で表示することができます。また、対話モードで u サブコマンドを使用することによって、セクター単位とシリンダー単位を切り替えることもできます。一方、parted コマンドは、数種類の単位をサポートします。リスト 2 に、リスト 1 で使用したディスクと同じディクスに対し、parted で異なる単位を使用する方法を説明します。

リスト 2. parted で異なる単位を使用する方法
ian@attic4:~$ sudo parted /dev/sdb
[sudo] password for ian: 
GNU Parted 1.8.8.1.159-1e0e
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help u                                                          
  unit UNIT                                set the default unit to UNIT

	UNIT is one of: s, B, kB, MB, GB, TB, compact, cyl, chs, %, kiB, MiB,
        GiB, TiB
(parted) p                                                                
Model: ATA HDT722525DLA380 (scsi)
Disk /dev/sdb: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End    Size   Type     File system  Flags
 1      32.3kB  206MB  206MB  primary  ext3
 2      206MB   107GB  106GB  primary  ext4
 3      107GB   250GB  143GB  primary  ext3

(parted) u s                                                              
(parted) p                                                                
Model: ATA HDT722525DLA380 (scsi)
Disk /dev/sdb: 488397168s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start       End         Size        Type     File system  Flags
 1      63s         401624s     401562s     primary  ext3
 2      401625s     208282724s  207881100s  primary  ext4
 3      208282725s  488392064s  280109340s  primary  ext3

(parted) u chs                                                            
(parted) p                                                                
Model: ATA HDT722525DLA380 (scsi)
Disk /dev/sdb: 30401,80,62
Sector size (logical/physical): 512B/512B
BIOS cylinder,head,sector geometry: 30401,255,63.  Each cylinder is 8225kB.
Partition Table: msdos

Number  Start      End           Type     File system  Flags
 1      0,1,0      24,254,62     primary  ext3
 2      25,0,0     12964,254,62  primary  ext4
 3      12965,0,0  30400,254,62  primary  ext3

(parted)

parted の出力と fdisk の出力とでは、示される開始シリンダーと終了シリンダーに明らかな違いがあることに注意してください。これは、parted ではシリンダーを 0 からカウントする一方、fdisk では 1 からカウントするためです。リスト 3 を見るとわかるように、fdisk が示す開始セクターと終了セクターは、parted と同じです。

リスト 3. 開始セクター番号と終了セクター番号の確認
ian@attic4:~$ sudo fdisk -ul /dev/sdb

Disk /dev/sdb: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x000404d6

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63      401624      200781   83  Linux
/dev/sdb2          401625   208282724   103940550   83  Linux
/dev/sdb3       208282725   488392064   140054670   83  Linux
ian@attic4:~$ echo $(( 208282725 / 255 / 63 ))
12965

パーティションのタイプ

IDE ドライブのパーティションには、基本 (primary)、論理 (logical)、拡張 (extended) という 3 つのタイプがあります。パーティション・テーブルが配置されるのは、ディスクのマスター・ブート・レコード (MBR) です。MBR はディスク上の 1 番目のセクターなので、パーティション・テーブルがこのセクターで占める部分はそれほど大きくありません。そのため、ディスク上の基本パーティションの数は 4 に制限されます。これより多くのパーティションが必要になることは珍しくありませんが、その場合には、基本パーティションの 1 つが拡張パーティションに変更されることになります。拡張パーティションは 1 つまたは複数の論理パーティション用のコンテナーです。このように、MBR レイアウトを使用して 1 つのドライブ上に 4 つを超えるパーティションを作成することができます。

MBR レイアウトでは、サポートされるディスク容量にも制限があり、最大容量は約 2 テラバイトに制限されます。新しい GUID パーティション・テーブル (GPT) レイアウトでは、この容量の制限が解消されており、パーティションの数に対する制限もかなり緩和されています。GPT レイアウトを使用してフォーマットしたディスクは、最大で 128 の基本パーティションにデフォルトで対応しており、拡張パーティションや論理パーティションは使用しません。MBR の内部構造や GPT の仕組みについての詳しい情報は、「MBR、EBR、GPT、LVM の内部構造」を参照してください。

拡張パーティションは、1 つ、あるいは通常は複数の論理パーティションのコンテナーでしかありません。このパーティション方式は、元々 MS DOS と PC DOS で使用されていたもので、この方式により、PC ディスクが DOS、Windows、または Linux システムで使用できるようになります。ディスクに含めることのできる拡張パーティションは 1 つだけです。データが保管されるのは拡張パーティション内の論理パーティションなので、拡張パーティションのなかに論理パーティションを作成してからでないと、データを拡張パーティションに保管することはできません。

Linux では基本パーティションまたは拡張パーティションに 1 から 4 までの番号を付けます。したがって、dev/sda は例えば /dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4 という 4 つの基本パーティションを持つこともあれば、/dev/sda1 という 1 つの基本パーティションと /dev/sda2 という拡張パーティションを持つこともあります。論理パーティションが定義される場合には 5 の番号から付けられるため、/dev/sda 上の 1 番目の論理パーティションは /dev/sda5 となります。これは、ディスク上に基本パーティションがなく、1 つの拡張パーティション (/dev/sda1) のみがある場合でも変わりません。つまり、IDE ドライブに 5 つ以上のパーティションが必要な場合には、拡張パーティションまでのパーティションの番号が 1 つなくなるということです。ホットプラグ対応のカーネルの場合、IDE ドライブ上で使用できる理論上の最大パーティション数は現在 15 となっていますが、最後のいくつかのパーティションについては、作成できることもあれば、作成できないこともあります。ドライブ上で 12 を超えるパーティションを使用しようと計画している場合には、すべてが機能することを慎重に確認してください。

上記の例で使用したディスクには 3 つの基本パーティションがあり、いずれも Linux 用にフォーマットされています。この 3 つのパーティションのうち、2 つは ext3 ファイルシステムを使用し、1 つは ext4 を使用します。parted コマンド p を、基本パーティション、拡張パーティション、論理パーティションが設定された Ubuntu 9.10 システムの内部ドライブに対して実行した場合の出力、そして Fedora 12 システムに接続された USB ドライブに対して実行した場合の出力をリスト 4 に記載します。ここでは、ファイルシステムのタイプの違いに注意してください。また、もう 1 つ注意する点として、対話モードを使用する代わりに、コマンドラインには 1 つ以上の parted コマンドを指定することができます。

リスト 4. parted によるパーティション・テーブルの表示
ian@attic4:~$ sudo parted /dev/sda u s p
[sudo] password for ian: 
Model: ATA WDC WD6401AALS-0 (scsi)
Disk /dev/sda: 1250263728s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start       End          Size         Type      File system     Flags
 1      63s         2040254s     2040192s     primary   ext3
 2      2040255s    22523129s    20482875s    primary   linux-swap(v1)
 4      22523130s   1250258624s  1227735495s  extended                  boot
 5      22523193s   167397299s   144874107s   logical   ext3
 6      167397363s  310761359s   143363997s   logical   ext3
 7      310761423s  455442749s   144681327s   logical   ext3
 8      455442813s  600092009s   144649197s   logical   ext3
[root@echidna ~]# parted /dev/sdc p
Model: WD My Book (scsi)
Disk /dev/sdc: 750GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End    Size    Type      File system  Flags
 1      32.3kB  135GB  135GB   primary   fat32        lba
 2      135GB   750GB  616GB   extended
 5      135GB   292GB  157GB   logical   ext3
 6      292GB   479GB  187GB   logical   ext3
 7      479GB   555GB  76.5GB  logical   ext3
 8      555GB   750GB  195GB   logical   ext3

fdisk コマンドは GPT でフォーマットされたディスクを認識しません。fdisk の代わりに使用できるのは、partedgpartedgdisk のいずれかのコマンドです。gdisk の出力例はリスト 14 を参照してください。

警告: MBR レイアウトを使用したディスク上で gdisk を実行すると、自動的にディスクが GPT フォーマットに変換されるので、ご注意ください!


論理ボリューム・マネージャー (LVM)

さまざまなタイプのパーティションについて理解したところで、各種パーティションに対して適切なサイズを計画しなかった場合はどうなるのだろうと思っている読者もいるのではないでしょうか。パーティションを拡張したり、縮小したりするにはどのようにすればよいのでしょう?あるいは、大容量のファイルシステムが 1 つのディスクには収まらない領域を必要とする場合はどうなるのでしょう?そこで登場するのが、論理ボリューム・マネージャー (LVM) です。

LVM を使用すると、ディスク領域の管理を抽象化することができるため、1 つのファイルシステムが複数のディスクやパーティションにまたがることが可能になり、ファイルシステムに必要な領域を追加したり、必要ない領域を削除したりすることができます。LVM の最新バージョンである lvm2 は初期バージョンである lvm (今では lvm1 と呼ばれることもあります) と後方互換性があります。

LVM はディスク領域を管理する際に以下のものを使用します。

  • 物理ボリューム (PV)
  • ボリューム・グループ (VG)
  • 論理ボリューム (LV)

物理ボリューム (PV) は、1 つのドライブ上のドライブ全体もしくは 1 パーティションのことです。LVM ではパーティションを定義しなくても、ドライブ全体を使用することができますが、通常これはあまり望ましいことではありません。このことについては後ほど、「MBR、EBR、GPT、LVM の内部構造」で説明します。

ボリューム・グループ (VG) は、1 つ以上の PV の集まりです。たとえ PV の集まりが複数のパーティションや複数のディスクにまたがっている場合でも、VG の領域は、それがあたかも 1 つの大容量ディスクであるかのように管理されます。VG を構成する各 PV は異なるサイズにすることも、異なる種類のディスクにすることも可能です。これについては、この後すぐに説明します。

論理ボリューム (LV) は、ext4 や XFS といった特定のタイプのファイルシステムでフォーマットされた領域の一単位であり、Linux ファイルシステムの一部としてマウントされます。この点で、GPR や MBR などの物理パーティションと似ています。LV は完全に 1 つの VG 内に収容されます。

PV は、VG と呼ばれる抽象的なグループに集められる物理領域の一単位であり、どちらかといえば仮想ドライブのようなものであると考えてください。VG や仮想ドライブは、LV にパーティション化されてファイルシステムで使用されます。

VG の内部では、エクステントの観点で領域を管理します。デフォルトのエクステントのサイズは 4MB であり、通常はこのサイズで妥当です。これよりも大きなエクステント・サイズを使用する場合には、VG 内のすべての PV で同じエクステント・サイズを使用しなければならないことに注意してください。LV を割り当てたり、LV のサイズを変更したりする際には、その割り当てる単位がエクステント・サイズになります。従ってデフォルトで LV は 4MB の倍数のサイズになり、4MB 単位で拡張したり、縮小したりしなければなりません。

LVM パズルの最後のピースは、デバイス・マッパーです。Linux カーネルの一部であるデバイス・マッパーは、LVM やソフトウェア RAID などの仮想デバイスの全体的な基盤を提供します。

LVM を操作するためのコマンドは、通常 lvm2 パッケージの中にあります。これらのコマンドはコマンドラインから実行することも、lvm コマンドを実行することで各種 LVM コマンドを実行するためのシェルを起動して、そのシェルから実行することでもできます。リスト 5lvm コマンドと、それによって起動されるシェルから実行できる各種コマンドを示します。

リスト 5. lvm コマンドとそのサブコマンド
[root@echidna ~]# lvm
lvm> help
  Available lvm commands:
  Use 'lvm help <command>' for more information
   
  dumpconfig      Dump active configuration
  formats         List available metadata formats
  help            Display help for commands
  lvchange        Change the attributes of logical volume(s)
  lvconvert       Change logical volume layout
  lvcreate        Create a logical volume
  lvdisplay       Display information about a logical volume
  lvextend        Add space to a logical volume
  lvmchange       With the device mapper, this is obsolete and does nothing.
  lvmdiskscan     List devices that may be used as physical volumes
  lvmsadc         Collect activity data
  lvmsar          Create activity report
  lvreduce        Reduce the size of a logical volume
  lvremove        Remove logical volume(s) from the system
  lvrename        Rename a logical volume
  lvresize        Resize a logical volume
  lvs             Display information about logical volumes
  lvscan          List all logical volumes in all volume groups
  pvchange        Change attributes of physical volume(s)
  pvresize        Resize physical volume(s)
  pvck            Check the consistency of physical volume(s)
  pvcreate        Initialize physical volume(s) for use by LVM
  pvdata          Display the on-disk metadata for physical volume(s)
  pvdisplay       Display various attributes of physical volume(s)
  pvmove          Move extents from one physical volume to another
  pvremove        Remove LVM label(s) from physical volume(s)
  pvs             Display information about physical volumes
  pvscan          List all physical volumes
  segtypes        List available segment types
  vgcfgbackup     Backup volume group configuration(s)
  vgcfgrestore    Restore volume group configuration
  vgchange        Change volume group attributes
  vgck            Check the consistency of volume group(s)
  vgconvert       Change volume group metadata format
  vgcreate        Create a volume group
  vgdisplay       Display volume group information
  vgexport        Unregister volume group(s) from the system
  vgextend        Add physical volumes to a volume group
  vgimport        Register exported volume group with system
  vgmerge         Merge volume groups
  vgmknodes       Create the special files for volume group devices in /dev
  vgreduce        Remove physical volume(s) from a volume group
  vgremove        Remove volume group(s)
  vgrename        Rename a volume group
  vgs             Display information about volume groups
  vgscan          Search for all volume groups
  vgsplit         Move physical volumes into a new or existing volume group
  version         Display software and driver version information
lvm> quit
  Exiting.

実際に動作している LVM の簡単な例を示すために、/dev/sdc5 上に LVM の GPT パーティション (パーティション・タイプ 0083) を作成し、/dev/sdd1 上に LVM の MBR パーティション (パーティション・タイプ 83) を作成しました。これらの上にはすでに PV を作成しており、リスト 6 に示すように pvscan コマンドを使用すると、システム上の PV を表示することができます。

リスト 6. PV を表示する
[root@echidna ~]# pvscan
  PV /dev/sdc5                      lvm2 [146.43 GiB]
  PV /dev/sdd1                      lvm2 [232.88 GiB]
  Total: 2 [379.32 GiB] / in use: 0 [0   ] / in no VG: 2 [379.32 GiB]

ここで、vgcreate コマンドを使用して、これらの 2 つの PV から 1 つの VG を作成し、続いて lvcreate コマンドを使用して、いずれの PV よりもサイズの大きい LV を作成します。最後に新しい LV を ext4 でフォーマットし、/mnt/lvdemo にマウントしました。これらをリスト 7 に示します。

リスト 7. VG と LV を作成する
[root@echidna ~]# vgcreate demo-vg /dev/sdc5 /dev/sdd1
  Volume group "demo-vg" successfully created
[root@echidna ~]# lvcreate -L 300G -n demo-lv demo-vg
  Logical volume "demo-lv" created
[root@echidna ~]# lvscan
  ACTIVE            '/dev/demo-vg/demo-lv' [300.00 GiB] inherit
[root@echidna ~]# mkfs -t ext4 /dev/demo-vg/demo-lv
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
19660800 inodes, 78643200 blocks
3932160 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
2400 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@echidna ~]# mount /dev/demo-vg/demo-lv /mnt/lvdemo
[root@echidna ~]# df -h /mnt/lvdemo/
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/demo--vg-demo--lv  296G  191M  281G   1% /mnt/lvdemo

注:

  1. mkfsmount などのファイルシステム・コマンドで LV にアクセスする際には、/dev/<VG 名>/<LV 名> のように名前を指定します。
  2. LV を作成すると、リスト 7vgscan コマンドの出力に示されるように、その LV はデフォルトで即座にアクティブになります。リムーバブル・ドライブ上に LV を作成した場合、そのドライブをシステムから取り外すには、その前に lvchange コマンドを使用して、そのドライブをアクティブでない状態にする必要があります。

ここでは LVM について簡単に紹介しましたが、もっと詳しく LVM を学ぶには developerWorks の記事「論理ボリュームの管理」を参照してください (「参考文献」を参照)。


MBR、EBR、GPT、LVM の内部構造

ディスク領域を割り当てる方法は理解するのが難しいかもしれないので、その説明をする前にちょっと回り道をして、MBR、EBR、GPT、LVM の各パーティション・テーブルの内部構造について説明することで、ディスク領域の割り当ての概念を理解する助けになるようにします。注: ここで説明する詳細な内容は LPI 試験には必要ないので、時間がない方や内部構造にあまり興味がない方は、このセクションを読み飛ばして「ディスク領域の割り当て」まで進んでいただいて構いません。

マスター・ブート・レコード (MBR)

マスター・ブート・レコード (MBR) は、ハード・ディスク上の先頭のセクターにあります。MBR にはブートストラップ・コードと、場合によってはそれ以外の情報が含まれており、それに続いて 64 バイトのパーティション・テーブルと 2 バイトのブート・シグニチャーがあります。64 バイトのパーティション・テーブルは、オフセット 446 (1BEh) を先頭に 4 つの 16 バイトのエントリーで構成されています。表 2 にその 16 バイトの各エントリーのレイアウトを示します。

表 2. パーティション・テーブルのエントリーのフォーマット
オフセット (hex)長さ説明
0h1ステータス。80h の場合、アクティブな (つまりブート可能な) パーティションであることを示します。
1h3パーティション内の先頭の絶対セクターの CHS (シリンダー、ヘッド、セクター) アドレス。
4h1パーティション・タイプ。
5h3パーティション内の末尾の絶対セクターの CHS (シリンダー、ヘッド、セクター) アドレス。
8h4パーティション内の先頭の絶対セクターの論理ブロック・アドレス (LBA)。
Ch4パーティション内のセクターの総数。

実際の例を見てみましょう。root ユーザーは dd コマンドを使用して、ディスクから直接セクターを読み取ることができます。リスト 8 に示すのは、/dev/sda 上の MBR の先頭 510 バイトのダンプ出力から、tail コマンドによってレコードの最後の 64 バイトのみを選択し、16 進で表示した結果です。

リスト 8. /dev/sda 上のパーティション・テーブルを表示する
[root@echidna ~]# dd if=/dev/sda bs=510 count=1 2>/dev/null|tail -c 64 |hexdump -C
00000000  80 01 01 00 07 fe ff ff  3f 00 00 00 98 66 b9 08  |........?....f..|
00000010  00 fe ff ff 83 fe ff ff  61 5c 39 09 21 c7 17 00  |........a\9.!...|
00000020  00 fe ff ff 05 fe ff ff  82 23 51 09 85 ab 68 66  |.........#Q...hf|
00000030  00 fe ff ff 82 fe ff ff  d7 66 b9 08 8a f5 7f 00  |.........f......|
00000040

先頭のレコードは、ブート可能なパーティションであることを示す 80h というステータスになっており、パーティション・タイプは NTFS であることを示す 07h になっています。他のレコードのパーティション・タイプは、83h (Linux)、05h (拡張)、82h (Linux スワップ) となっているので、ディスクには 3 つの基本パーティションと 1 つの拡張パーティションがあります。CHS の値はいずれも LBA を使用するディスクの標準的な値である feffff になっています。各パーティションの先頭セクターの LBA と、それぞれのパーティションに含まれる総セクター数は、32 ビットのリトル・エンディアンの整数として解釈されるので、98 66 b9 08 は 08b96698h を表しています。つまり、先頭の (NTFS) パーティションはセクター 63 (3fh) で開始され、146368152 (08b96698h) セクター分の領域を持つことになるため、fdisk を実行すると、末尾のセクターとして 63+146368152-1=146368214 が示されるはずです。

注:

  1. MBR のパーティション・テーブルには、論理パーティションに関する情報は含まれません。この後まもなく、論理パーティションに関する情報を調べる方法を説明します。
  2. ディスクで使用しているのが LBA の値ではなく、CHS の値である場合は、CHS の値を絶対セクターに変換するための演算を追加で行う必要があります。CHS の計算は、絶対セクターを調べるために別の演算を使用すること以外は、ここまで概説したのと基本的に同じなので、この簡単な紹介の中では説明しません。
リスト 9. /dev/sda に対して fdisk を実行したときの出力
[root@echidna ~]# fdisk -l /dev/sda

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000de20f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63   146368214    73184076    7  HPFS/NTFS/exFAT
/dev/sda2       154754145   156312449      779152+  83  Linux
/dev/sda3       156312450  1874448134   859067842+   5  Extended
/dev/sda4       146368215   154754144     4192965   82  Linux swap / Solaris
/dev/sda5       156312513   336031604    89859546   83  Linux
/dev/sda6       336031668   636880859   150424596   83  Linux
/dev/sda7       636880923   865983824   114551451   83  Linux
/dev/sda8       865983888   949891319    41953716   83  Linux
/dev/sda9       949891383   954003959     2056288+   b  W95 FAT32
/dev/sda10      954007552  1187801087   116896768   83  Linux
/dev/sda11     1187803136  1229760511    20978688   83  Linux
/dev/sda12     1229762560  1874446335   322341888   83  Linux

Partition table entries are not in disk order

実際に /dev/sda1 は 146368214 で終わっていることがわかります。

パーティション・テーブルのエントリーは、実際のディスク上の順番で並んでいるわけではないことを示す警告が表示されていることに注意してください。これは、Linux スワップ・パーティションである /dev/sda4 が、拡張パーティションである /dev/sda3 よりも物理的に前にあるからです。これはエラーではありませんが、fdisk プログラムをはじめとするいくつかのツールには、実際の順番通りにパーティション・テーブルを作り直すオプションが用意されています。

拡張ブート・レコード (EBR)

拡張パーティションについてさらに詳しく見ていく前に、gparted コマンドによるグラフィカルな出力を少しだけ見てみましょう。gparted コマンドによって、パーティション・レイアウトをグラフィカルに表現した図表が表示され、そこには拡張パーティションが持つコンテナーの性質も示されます。

図 1 に、/dev/sda に対して gparted コマンドを実行すると表示される画面を示します。前述したように、ディスクには 3 つの基本パーティション (/dev/sda1、/dev/sda4、/dev/sda2) と 1 つの拡張パーティション (/dev/sda3) があります。拡張パーティションには、/dev/sda5 から /dev/sda12 までの論理パーティションが含まれています。この画像の上部でパーティションを図で表している部分では、拡張パーティションは、論理パーティションを包含するフレームとして (水色の破線で) 示されています。

図 1. gparted を使用して、複数のパーティション・タイプで構成されるディスクのパーティションを表示する
gparted を使用して、複数のパーティション・タイプで構成されるディスクのパーティションを表示した画面のスクリーン・キャプチャー

前述のように、MBR には論理パーティション用のパーティション・テーブルのエントリーが含まれることはありません。MBR では、システムの残りの部分を 1 つの特別なパーティションのようなものと見なすコンテナーを定義します。論理パーティションが定義されるのは、このコンテナーの中においてです。ではこのコンテナーはどのように動作するのでしょう?

1 つの拡張パーティション内の論理パーティションの数にハード・リミットはないため、論理パーティションを定義する固定サイズのパーティション・テーブルはありません。代わりに、論理パーティションごとに拡張ブート・レコード (EBR) があります。MRB と同じく、EBR は長さが 512 バイトで、オフセット 446 (1BEh) にあるパーティション・テーブルを使用します。EBR パーティション・テーブルの中では 2 つのエントリーのみが使用されます。1 番目のエントリーは、現在の論理パーティションのオフセットとサイズを定義します。2 番目のエントリーは、次の論理パーティションのオフセットと総セクター数を定義します。この単方向チェーンの最後の論理パーティションでは、2 番目のエントリーにはゼロが入ります。

リトル・エンディアンの 16 進数を 10 進数に変換する作業を楽にするために、ある EBR を基準にした 2 つの論理パーティションのエントリーを表示するための bash による簡単な関数を作成します。そして、フォーマット指定されたストリングを表示する hexdump コマンドの機能を利用して、各論理パーティションの先頭セクターの LBA と総セクター数を 16 進ではなく 10 進で表示するようにします。リスト 10showebr 関数を示します。

リスト 10. EBR を表示するための関数
showebr () 
{ 
    dd if=$1 skip=$2 bs=512 count=1 2> /dev/null | tail -c 66 | 
     hexdump -n 32 -e '"%07.7_ax  " 8/1 "%2.2x " 2/4 " %12d" "\n"'
}

1 番目の論理パーティションの EBR は拡張パーティションの先頭セクターなので、新しく作成した showebr 関数とリスト 9 で表示されたセクター・オフセットを使用して、この先頭セクターを表示してみます。リスト 11 にその出力を示します。

リスト 11. /dev/sda 上の 1 番目の論理パーティションの EBR
[root@echidna ~]# showebr /dev/sda 156312450
0000000  00 fe ff ff 83 fe ff ff           63    179719092
0000010  00 fe ff ff 05 fe ff ff    179719155    300849255

この EBR のパーティション・テーブルの 1 番目のエントリーには、この EBR からのオフセットが 63 のセクターで開始され、179719092 個のセクターを含む論理パーティション (/dev/sda5) が示されています。2 番目のエントリーには、拡張パーティション内の「1 番目」の論理パーティションの EBR からのオフセットが 179719155 のセクターで開始される、次の論理パーティションの EBR が示されており、その総セクター数は「次の」論理パーティションの EBR の先頭から、その論理パーティションの最後までのセクター数になっています。リスト 12 に /dev/sda 上の拡張パーティションと論理パーティションに関するパーティション情報を示します。/dev/sda6 の総セクター数は 636880859-336031668+1=300849192 です。リスト 11 の 2 番目のエントリーでは、総セクター数が 300849255 になっているので、/dev/sda6 はオフセット 300849255-300849192=63 で開始されると導き出すことができます。これは Windows XP をはじめとするシステムの一般的なオフセットです。

リスト 12. /dev/sda 上の拡張パーティションと論理パーティション
dev/sda3       156312450  1874448134   859067842+   5  Extended
/dev/sda5       156312513   336031604    89859546   83  Linux
/dev/sda6       336031668   636880859   150424596   83  Linux
/dev/sda7       636880923   865983824   114551451   83  Linux
/dev/sda8       865983888   949891319    41953716   83  Linux
/dev/sda9       949891383   954003959     2056288+   b  W95 FAT32
/dev/sda10      954007552  1187801087   116896768   83  Linux
/dev/sda11     1187803136  1229760511    20978688   83  Linux
/dev/sda12     1229762560  1874446335   322341888   83  Linux

今学んだことを showebr 関数とインライン・シェル演算と併せて用いると、リスト 13 に示すように /dev/sda の全 EBR チェーンを調べることができます。

リスト 13. /dev/sda 上の論理パーティションのチェーンを調べる
[root@echidna ~]# showebr /dev/sda 156312450
0000000  00 fe ff ff 83 fe ff ff           63    179719092
0000010  00 fe ff ff 05 fe ff ff    179719155    300849255
[root@echidna ~]# showebr /dev/sda $(( 156312450 + 179719155 ))
0000000  00 fe ff ff 83 fe ff ff           63    300849192
0000010  00 fe ff ff 05 fe ff ff    480568410    229102965
[root@echidna ~]# showebr /dev/sda $(( 156312450 + 480568410 ))
0000000  00 fe ff ff 83 fe ff ff           63    229102902
0000010  00 fe ff ff 05 fe ff ff    709671375     83907495
[root@echidna ~]# showebr /dev/sda $(( 156312450 + 709671375 ))
0000000  00 fe ff ff 83 fe ff ff           63     83907432
0000010  00 fe ff ff 05 fe ff ff    793578870      4112640
[root@echidna ~]# showebr /dev/sda $(( 156312450 + 793578870 ))
0000000  00 fe ff ff 0b fe ff ff           63      4112577
0000010  00 fe ff ff 05 fe ff ff    797691510    233797128
[root@echidna ~]# showebr /dev/sda $(( 156312450 + 797691510 ))
0000000  00 fe ff ff 83 fe ff ff         3592    233793536
0000010  00 fe ff ff 05 fe ff ff   1031488638     41959424
[root@echidna ~]# showebr /dev/sda $(( 156312450 + 1031488638 ))
0000000  00 fe ff ff 83 fe ff ff         2048     41957376
0000010  00 fe ff ff 05 fe ff ff   1073448062    644685824
[root@echidna ~]# showebr /dev/sda $(( 156312450 + 1073448062 ))
0000000  00 fe ff ff 83 fe ff ff         2048    644683776
0000010  00 00 00 00 00 00 00 00            0            0

オフセットが 3592 のパーティションが 1 つあることに注目してください。これは /dev/sda9 と /dev/sda10 の間にある 1.75MB の空き領域に対応しています。また、/dev/sda12 はオフセット 63 ではなく、2048 から開始されていることにも注意してください。2048 に設定されたオフセットは、2048 バイトのセクターを使用しているドライブや、セクターのアライメントが重要になる SSD (Solid State Drive) で見られるでしょう。

GUID パーティション・テーブル (GPT)

先ほど、MBR レイアウトでは、セクター・サイズが 512 バイトのディスクの最大容量が 2 テラバイトに制限されることを説明しましたが、2 テラバイトを超える容量のディスクが登場するのに伴い、GUID (Globally Unique IDentifier) パーティション・テーブル (GPT) と呼ばれる新しいレイアウトが設計されました。このフォーマットは容量の小さなディスクで使用することもできますが、大容量のディスクには不可欠なフォーマットです。この GPT レイアウトでディスクをフォーマットすると、通常の MBR の場所にはいわゆる「保護 (Protective) MBR」が配置されるため、GPT に対応していないオペレーティング・システムやユーティリティーでは、認識できないパーティション・タイプ (EEh) として、ディスク全体を把握することになり、その見かけのサイズは、ディスク全体のサイズ、もしくは MBR がそのディスクのセクター・サイズに対してサポートする最大サイズのいずれかになります。

最近の Linux ディストリビューションには GPT でディスクをフォーマットしたり、GPT ディスクからブートしたりするためのツールが含まれています。こうしたツールには、(fdisk に似ている) gdiskpartedgpartedgrub2、そして最新バージョンの grub などがあります。

最近の Linux システムでは、従来の PC BIOS または新しい EFI (Extensible Firmware Interface: 拡張ファームウェア・インターフェース) のいずれかを使用した、GPT パーティションからのブートをサポートしています。最近の 64 ビット版の Windows でも EFI を使用した、GPT パーティションからのブートをサポートしています。

GPT パーティションには、GPT ヘッダーと GPT パーティション配列が含まれています。GPT パーティション配列には少なくとも 128 のエントリーが含まれるため、GPT ディスクは最低限 128 の基本パーティションをサポートすることができます。GPT ヘッダーは GPT パーティションの先頭セクターにあり、その次のセクターに GPT パーティション配列が続きます。GPT ヘッダーと GPT パーティション配列はパーティションの最後で繰り返されます。さらなる保護のために、GPT ヘッダーには GPT パーティション配列の 32 ビット CRC も含まれています。

リスト 14 に、5 つの基本パーティションを持つリムーバブル・ディスク (/dev/sdc) に対して gdisk コマンドを実行したときの出力を示します。

リスト 14. /dev/sdc に対する gdisk コマンドの出力
[root@echidna ~]# gdisk -l /dev/sdc
GPT fdisk (gdisk) version 0.8.4

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdc: 3906963456 sectors, 1.8 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 7E637BAC-33FC-46D3-9860-6A300CDD0E5F
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 3906963422
Partitions will be aligned on 2048-sector boundaries
Total free space is 1361893309 sectors (649.4 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       773580799   368.9 GiB   0700  Ian's partition 1
   2       773580800      1387724799   292.8 GiB   0700  Ian's partition 2
   3      1387724800      1831110655   211.4 GiB   0700  
   4      1831110656      2237978623   194.0 GiB   0700  
   5      2237978624      2545072127   146.4 GiB   8E00

GPT については、記事「Make the most of large drives with GPT and Linux」にさらに多くの情報が含まれています (「参考文献」を参照)。

物理ボリュームおよび論理ボリュームを管理するためのパーティションの作成

先ほど、LVM は最初にディスクにパーティションを作成しなくても、ディスク全体を利用することができると説明しましたが、GPT が保護 MBR を使用するのと同じ理由から、LVM ネイティブの機能を使用してディスク全体を PV として定義せずに、最初にディスクにパーティションを作成しておいてから、そのパーティションに PV を作成する方が良いでしょう。そうすることで、LVM に対応していないオペレーティング・システムでも、そのディスクのことをフォーマットされていないとみなすのではなく、認識できないパーティションでフォーマットされていると判断するようになるはずです。

LVM で使用される抽象化層の管理には、明らかに元の MBR パーティション・テーブルよりもかなり多くの情報が必要になります。PV にパーティションを作成することをお勧めする以外には、LVM が使用するディスク上のデータ構造について、この記事で詳しく説明することはしません。LVM についてさらに詳しく学ぶには、developerWorks の記事「論理ボリュームの管理」を参照してください (「参考文献」を参照)。


ディスク領域の割り当て

前述のとおり、Linux ファイルシステムは / をルートに持つ 1 つの大きなツリーです。フロッピー・ディスクや CD-ROM 上のデータをマウントしなければならない理由は至って明白ですが、ハード・ディスクに保管されたデータの区分を考慮しなければならない理由については、それほど明白ではないかもしれません。ファイルシステムを区分する正当な理由には、例えば以下のものがあります。

  • ブート・ファイル。一部のファイルは、ブート時に BIOS またはブート・ローダーにアクセス可能でなければなりません。
  • 複数のハード・ディスク。通常、各ハード・ディスクは 1 つ以上のパーティションに分割され、それぞれのパーティションのファイルシステムは、ファイルシステム・ツリーのいずれかの場所にマウントする必要があります。
  • 共有可能ファイル。複数のシステム・イメージが、静的ファイル (例えば実行可能プログラム・ファイルなど) を共有する場合があります。また、ユーザーが同じホーム・ディレクトリーとメール・システムを使用して、ネットワーク上のどのマシンにもログインできるようにするため、ユーザーのホーム・ディレクトリーやメール・スプール・ファイルなどの動的ファイルを共有する場合もあります。
  • オーバーフローの可能性。あるファイルシステムがその容量の 100 パーセントを使い果たす可能性がある場合、通常はシステムを実行するために必要なファイルから、そのファイルを分離することが得策となります。
  • クォータ。クォータは、ユーザーまたはグループがファイルシステムで使用できる容量を制限します。
  • 読み取り専用マウント。ジャーナリング・ファイルシステムが登場する以前は、システム・クラッシュ後にファイルシステムのリカバリーをするには大抵、長い時間がかかりました。そのため、ほとんど変更されることのないファイルシステム (例えば、実行可能プログラムのディレクトリーなど) については、システム・クラッシュ後のチェックにかかる時間を短くするために、読み取り専用でマウントすることができます。

ここまでで取り上げてきたファイルシステムの使用法に加え、ディスク上のスワップ領域の割り当てについても考慮しなければなりません。Linux システムの場合、スワップ領域は通常 1 つ、場合によっては複数の専用パーティションとなります。


適切な選択

例えば、1 つ以上のハード・ディスクを搭載したシステムをセットアップし、ハード・ディスクからブートすることを計画しているとします (この記事では、LAN 経由でブートするディスクレス・ワークステーションのセットアップや、ライブ CD または DVD の Linux システムを使用する際の考慮事項については取り上げません)。パーティションのサイズは後からでも変更できますが、それには通常、ある程度の作業が必要になってきます。そのため、前もって適切な選択を行うことが重要です。それでは早速、適切な選択を行うための手順に取り掛かりましょう。

最初に考慮しなければならないことは、システムを確実にブートできるようにすることです。一部の古いバージョンのシステムには、BIOS はディスクの先頭の 1024 シリンダー内に完全に収まっているパーティションからでないとブートできないという制約があります。そのようなシステムを使用している場合には、最終的に /boot としてマウントされるパーティションを作成し、そこに、システムをブートするために必要なファイルを保持する必要があります。これらのファイルのロードが完了すると、Linux システムがディスク操作を引き継ぐため、システムのその後の操作が 1024 のシリンダー制約によって影響されることはありません。/boot としてパーティションを作成する必要がある場合、通常は約 100 メガバイト (MB) もあれば十分です。

次の考慮事項として考えられるのは、必要なスワップ領域の容量です。現在のメモリーの相場では、スワップ領域は非常に遅い予備メモリーとなります。かつての一般的な経験則は、実際の RAM の容量に相当するスワップ領域を作成することでした。現在は、RAM を使い果たすことなく複数の大きなプログラムを使用できるように、ワークステーションには実際の RAM と同等、またはその 2 倍のスワップ領域を構成することをお勧めします。スワップ領域と RAM との切り替えに時間がかかるとしても、おそらく常に作業しているのは 1 つ、または 2 つのパーティションのなかでだけです。

大きなスワップ領域は、メモリーの容量が非常に少ないシステムにもお勧めできます。サーバーには、RAM の約半分のスワップ領域を使用するようにしてください (ただし、これ以外の値を推奨しているアプリケーションを実行している場合は別です)。いずれにしても、サーバーのメモリー使用率をモニターして、必要に応じて実際の RAM を追加するか、ワークロードを追加サーバーの間で分散できるようにしなければなりません。過度のスワップ処理が、サーバーに功を奏すことはめったにありません。スワップ用ファイルを使用することも可能ですが、専用パーティションのほうがパフォーマンスには優れています。

ここで、パーソナル・ワークステーションを使用するか、サーバーを使用するかを選択しなければなりません。パーソナル・ワークステーションを使用すると、サーバーを使用する場合に比べ、必要な容量を予測するのが遥かに難しくなりがちです。私が (特に Linux 初心者に) お勧めする方法は、標準ディレクトリー (/usr、/opt、/var など) の大部分を 1 つの大きなパーティションに割り当てることです。特に、これから何がインストールされることになるのかはっきりしていない Linux 初心者にとっては、この方法が役に立ちます。グラフィカル・デスクトップと、そこそこの数の開発ツールを実行しているワークステーションには、おそらく 5 ギガバイト以上のディスク領域に加え、ユーザー用の領域が必要となるはずです。サイズの大きい開発ツールには、単独で数ギガバイトを要する場合もあります。私は通常、オペレーティング・システムあたり 40 GB から 60 GB を割り当て、ディスクの残りは空けたままにして、他のディストリビューションをロードできるようにしています。

サーバーのワークロードは、ワークステーションに比べて安定したものとなるはずであるため、特定のファイルシステムの領域が使い果たされると、より深刻な結果となりがちです。そのため一般的には、複数のディスクに分散した複数のパーティションを作成することになります。場合によっては、これらのパーティションにハードウェア RAID やソフトウェア RAID、あるいは論理ボリューム・グループを使用することもあります。

さらに、それぞれのファイルシステムでのワークロードについて検討し、ファイルシステムを複数のシステムで共有させるか、または 1 つのシステムにだけ使用させるかについても決定しなければなりません。システムに最適な割り当ては、経験、キャパシティ計画ツール、ワークロードの増加予測を兼ね合わせて検討することで判断できます。

ワークステーションとサーバーのどちらを構成しているかに関わらず、各システムに固有のファイルはローカル・ドライブに置かれます。一般的にこれらのファイルシステムには、システム・パラメーター・ファイルの /etc、ブート時に必要なファイルの /boot、ブートまたはシステム・リカバリーに必要なファイルの /sbin、root ユーザーのホーム・ディレクトリーの /root、ロック・ファイルの /var/lock、実行されているシステムの情報の /var/run、システム・ログ・ファイルの /var/log があります。ユーザーのホーム・ディレクトリーの /home や、usr、/opt、/var/mail、または /var/spool/news などといったその他のファイルシステムは、インストールの必要とユーザーの選択に応じて、別個のパーティションまたはネットワークにマウントされたパーティションに置かれます。

参考文献

学ぶために

製品や技術を入手するために

  • SystemRescueCd CD-ROM をダウンロードしてください。これはオンラインで入手できる数多くのツールの 1 つで、システム・クラッシュ後のリカバリーを支援します。
  • developerWorks から直接ダウンロードできる IBM ソフトウェアの試用版を使用して、Linux で次の開発プロジェクトを構築してください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=475641
ArticleTitle=Linux の101 試験対策: ハード・ディスクのレイアウト
publish-date=01172013