Linux Partition HOWTO Kristan Koehntopp, kris@koehntopp.de $Id: Partition.sgml,v 2.4 1997/11/03 06:27:22 kris Exp $ 田野島 秀俊, tano@sainet.or.jp (1997/11/25) この Linux Mini-HOWTO では Linux システムのディスク領域を計画しレイア ウトする方法について解説します。ディスクのハードウエア面やパーティショ ン、スワップ領域のサイズとそれの配置の際考慮すること、ファイルシステ ム、ファイルシステム型、及び関連するトピックについて述べています。この 文書の意図は背景的知識を伝授することで手順を教えることではありません。 注意: この文書はかなり以前に書かれたものなので、いまどきの Linux 環境 にはあてはまらない箇所があります。 (JF Project) ______________________________________________________________________ 目次 1. はじめに 1.1 この文書は? 1.2 この文書にはなにが書いてありますか?また関連文書は? 2. ともあれパーティションとは? 2.1 バックアップは重要 2.2 デバイス番号とデバイス名 3. 私はどんなパーティションを必要としているのだろう? 3.1 私に必要なパーティションの数は? 3.2 スワップ領域はどのくらいの大きさがいいのだろう? 3.3 どこにスワップスペースを置くべきか? 3.4 ファイルシステムとフラグメンテーションに関するいくつかの事実 3.5 パーティション分けの判断基準となるファイル寿命とバックアップサイクル 4. 例 4.1 意欲のある初心者のための推奨モデル 5. 私の場合 ______________________________________________________________________ 1. はじめに 1.1. この文書は? これは Linux Mini-HOWTO 文書です。Mini-HOWTO は Linux のインストールや 維持に関する事を説明した短い文書です。 mini の付かない HOWTO や本にさ えなるような文書に比べて、量が少なかったり議論する話題の範囲が狭かった りするので mini なのです。HOWTO はリファレンスではありません。それはマ ニュアルページの役目です。 1.2. この文書にはなにが書いてありますか?また関連文書は? この Mini-HOWTO は Linux システムのディスク領域を計画立ててレイアウト する方法についての文書です。ディスクのハードウエア面やパーティション、 スワップ領域のサイズとそれの配置の際考慮すること、ファイルシステム、 ファイルシステム型、及び関連するトピックについて述べています。この文書 の意図は背景的知識を伝授することで、それゆえツール類の紹介ではなく、主 に原理について述べます。 理想的には、この文書は初めてのインストールの前に読まれるべきですが、ほ とんどの人にはちょっと難しいでしょう。初心者はディスクレイアウトの最適 化よりも重大な他の問題も抱えています。従ってこれを読んでいるあなたは ひょっとすると、ちょうど Linux のインストールを終ったところで、このイ ンストールしたシステムの最適化の方法か、次のインストールでのやっかいな 計算違いの避け方を今考えているのかもしれません。うーん、ではこの文書を 読み終えたら、インストールを白紙に戻して再構築したくなるような欲求が生 じるように期待しましょう。:-) この Mini-HOWTO はディスク領域の計画とレイアウトのやり方にほとんどの行 数を割いています。つまり fdisk, LILO, mke2fs やバックアッププログラム の使い方については述べていません。これらの問題については他の HOWTO が あります。Linux HOWTO の最新情報は Linux HOWTO Index を見てください。 この中に HOWTO 文書を入手するための説明もあります。 ファイルシステムの異なった部品に、どんなサイズやスピードが必要かを見積 もる方法を学ぶために、"Linux Multiple Disks Layout mini-HOWTO", by Gjoen Stein 著 を見て下さい (訳注:現在は Disk-HOWTO に なってます。) 1024シリンダ以上のディスクに関する解説と考察については、 "Linux Large Disk mini-HOWTO", Andries Brouwer 著 を見て下さい。 ユーザーごとに使用するディスク領域を制限する方法(quotas)の解説について は、"Linux Quota mini-HOWTO", by Albert M.C. Tam 現在、ディスクバックアップについての一般的な文書はありません。しかし特 定のバックアップ方法を示した文書がいくつかあります。Linux を IBM ADSM バックアップ環境に統合する方法の解説については"Linux ADSM Backup mini- HOWTO", Thomas Koenig 著を見てくだ さい。Linux で MS-DOS のバックアップをとるための情報は"Linux Backup with MSDOS mini-HOWTO", Christopher Neufeld 著を見てください。 HOWTO文書を書いたり提出するための解説については the Linux HOWTO Index, Greg Hankins 著を見てください。 /usr/src/linux/Documentation 以下の文書に目を通すのも大変ためになりま す。ディスクドライバの特性に関する背景的知識を得るためには ide.txt と scsi.txt を見てください。また、filesystems/ サブディレクトリ以下のファ イルにも目を通してください。 2. ともあれパーティションとは? PC のハードディスクが発明された時、人々はすぐに複数のオペレーティング システムをインストールしたくなりました。システムには唯1つのディスクし かない場合にさえ、です。それで1つの物理的ディスクに複数の論理的ディス クを割り当てる機構が必要になりました。パーティションとは、ほとんどのオ ペレーティングシステムで完全に別々のディスクとして扱われる、ハードディ スク上の連続したブロック領域のことです。 パーティションが重なってはいけないのはすぐに分かるでしょう。パーティ ションが重なっていて、あるオペレーティングシステムが同じマシンにインス トールされた別のオペレーティングシステムの重要な情報に上書きしていた ら、嬉しいことにならないのは明らかです。また隣接したパーティションの間 にはすき間がないほうがよいです。あっても有害ではありませんが、パーティ ション間にスペースを残すことで貴重なディスクスペースを無駄にしてしまい ます。 ディスクを完全に仕切る必要はありません。インストール済みのどのオペレー ティングシステムにも割り当てていないスペースをディスクの最後に置いてお いて差し支えありません。あとでインストールしたどのシステムを最もよく使 うかが明らかになったとき、この残ったスペースを仕切り、そこにファイルシ ステムを置くことができます。 パーティションは動かせませんし、その中のファイルシステムを破壊せずにサ イズを変更することもできません。ですから通常、パーティションのやり直し にはそれが及ぶすべてのファイルシステムのバックアップとリストアが必要に なります。実際のところ、パーティションのやり直しで物事が完全にめちゃめ ちゃになるのはよくあることです。そこで fdisk の様なパーティションを扱 うコマンドを使う際は、対象マシンの全てのディスクのすべてをバックアップ するべきです。 実際には、ファイルシステムのタイプによってはデータを失わずにパーティ ションを2つにわけることができます。(幸運ならば。) 例えば、"fips"と呼ば れるプログラムは、MS-DOS のインストールをやり直すことなく Linux のイン ストール領域を作るために、MS-DOS パーティションを2つに分けます。でも、 マシンの全てを慎重にバックアップする前に、これらのモノに手を出すべきで はありません。でしょ? 2.1. バックアップは重要 テープはバックアップの友です。高速で信頼でき、使い易く、それゆえ頻繁 に、(可能なら)自動的に、気負うことなくバックアップできます。 声を大にして言いましょう:私は真のテープドライブについて話しているので あって ftape なんてものについて言っているのではありません。SCSI を買う ことにしましょう:Linux は SCSI をネイティブにサポートしています。ASPI ドライバは必要ないし、Linux では貴重な HMA も失わずに住みます。既に SCSI ホストアダプタがインストールされていれば増設ディスク、テープ、 CD-ROM を取り付けるだけです。もはや I/O アドレス、IRQ の衝突回避、マス ター/スレーブ、PIO-level matching などに悩まされなくて済みます。 加えて:まともな SCSI ホストアダプタは CPU の多大な負荷なしで高い I/O パフォーマンスを得ることができます。ハードなディスク負荷のもとでも良い 応答時間を体感できます。Linux システムを主要な USENET ニュースの配布用 として使う予定だったり、ISP(インターネットサービスプロバイダ)ビジネス にとびこもうとするつもりなら、SCSI なしでシステムを設計、構築しような んて夢にも思わないことです。いいですか? 2.2. デバイス番号とデバイス名 インテルベースのシステムでのパーティションの数は黎明期から制限されてい ました。オリジナルのパーティションテーブルはブートセクタの一部としてイ ンストールされ、たった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を見て下さい。) 3. 私はどんなパーティションを必要としているのだろう? 3.1. 私に必要なパーティションの数は? OKay,ではどんなパーティションをあなたは必要としているのでしょう?論理 パーティションから起動することなど、頭から、全く考慮していないオペレー ティングシステムだってあります。だから、ひょっとするとMS-DOS, OS/2 や Linux や使っている OS の起動パーティションとして基本パーティションを とっておきたくなるかもしれません。1つの基本パーティションが、論理パー ティション用の入れ物となる拡張パーティションとして必要となることをお忘 れなく。 オペレーティングシステムの起動はリアルモードで行われます。つまり BIOS と1024シリンダの制限が絡みます。そこで問題を避けるために、すべてのブー トパーティションをハードディスクの最初の1024シリンダ以内に置きたくなる かもしれません。もう一度よく "large-disk" Mini-Howto を読んでくださ い。 Linux をインストールするために、少なくとも1パーティションが必要です。 カーネルがこのパーティションから読み込まれれるなら(例えばLILOによっ て)、このパーティションは BIOS から読めなければなりません。他の方法で カーネルを読み込む場合(例えばブートディスクや MS-DOS から Linux を起動 する LOADLIN.EXE など)、パーティションはどこにあってもいいです。あらゆ る場合においてこのパーティションはファイル型 0x83の"Linux native" にし ます。 システムにはいくらかのスワップ領域が必要です。ファイルにスワップをとる のでなければ、専用のスワップパーティションが必要になります。このパー ティションは Linux カーネルによるアクセスのみで、Linux カーネルは PC BIOS の欠点に悩まされませんので、スワップパーティションはどこに置いて もかまいません。私は論理パーティション(/dev/?d?5より上)を使うことをお 勧めします。専用のLinuxスワップパーティションはファイル型 0x82 "Linux swap" です。 これらは最小限のパーティション構成です。Linux にとってはより多くのパー ティションを作ると便利かもしれません。以降を読んでください。 3.2. スワップ領域はどのくらいの大きさがいいのだろう? 専用のスワップパーティションを使うと決めた(普通これは 'Good Idea [tm]'ですが)場合、その大きさを見積もるのには以下のガイドラインを使っ て下さい: o Linux では RAM とスワップ領域は加算されます(これは全ての Unix で正 しいわけではありません)。例えば 8MB の RAM と 12MB のスワップ領域が あれば、あわせて 20MB の仮想メモリが使えます。 o スワップ領域のサイズを決める時、総仮想メモリを少なくとも 16MB はと るべきです。つまり 4MB の RAM のときは少なくとも 12MB のスワップを 作り、8MB の RAM のときは少なくとも 8MB のスワップを作るべきです。 o Linuxでは1つのスワップパーティションは 128MB 以上とれません。言い換 えれば、パーティションそのものは 128MB より大きくできますが、 128MB を超えた分は決して使われないのです。もし 128MB 以上のスワップを確保 したいときは、複数のスワップパーティションを作らなければなりませ ん。 o スワップ領域のサイズを決める時、あまりにスワップ領域を取りすぎて も、その分は全く役に立たないことに留意してください。 すべてのプロセスは「ワーキングセット」を持っています。これはすぐに でもプロセッサによって参照されうる、ページアウトされていなく、実メ モリ上にあるページのセットです。Linux は、これらのメモリアクセスを 「直前に使ったページほど使われやすい」という仮定のもとに予測し、可 能な限りこれらを実メモリ上のページに残しておこうとします。もしプロ グラムの「局所参照性」が良い場合には、この仮定は正しく、予想アルゴ リズムは有効に働くでしょう。 作業領域がメインメモリにとどまっていられるのは、メモリが十分あると きだけです。マシン上で走るプロセスが多すぎると、カーネルは、あとで すぐ使われるはずのページをディスク上に追い出して、必要なページを ディスクから読み出してくるという(無駄な)動作をせざるを得ないこと になります。この結果、ページングの異常な増加を招き、性能が著しく低 下します。これが、いわゆる「スラッシング(thrashing)」と呼ばれる状態 です。(ドイツ人の読者のために補足:これは "thrashing" ("dreschen", "schlagen", "haemmern")のことで "trashing" ("muellen") のことではありません。) スラッシング状態のマシンでは実質的にプロセスが RAM 上でなくディスク 上で動いています。従って予測される性能の低下は、だいたいメモリアク セスの速度とディスクアクセスの速度の比となります。 PDP や Vax の時代のとても古い経験則ではプログラムのワーキングセット のサイズはその仮想サイズのおよそ25%でした。それゆえRAMの3倍以上の スワップは、意味がありません。 しかし、これは経験則でしかないということを覚えておいてください。あ るプログラムのワーキングセットが非常に大きいとか、あるいはとても小 さい、なんてことはしょっちゅうあります。例えば、非常にさまざまな方 法でアクセスされる大きなデータセットを扱うシミュレーションプログラ ムでは、そのデータセグメント中に局所参照性はほとんど存在しません。 したがって、そのワーキングセットは非常に大きいでしょう。 一方、同時にたくさんの JPEG ファイルを開いた、しかし1つを除いてアイ コン化された xv は非常に大きなデータセグメントを持ちます。しかし、 全てのイメージ変換は(同時には)1つのイメージでのみなされているので xv で占められるメモリーのほとんどは扱われていません。同じことがエ ディットウインドウをたくさん開いた、しかも同時に変更するのは1つのウ インドウのみというエディタにもあてはまります。これらのプログラムは( もしもそれらが正しく設計されていたら)とてもたかい局所参照性を持ち、 パフォーマンスにそれほど重大な影響をあたえずにそれらの多くの部分を スワップアウトしておけます。 コマンドラインの時代からの 25% という数字は、複数のドキュメントを編 集するような現代の GUI プログラムにとってもはや正しくないと予想でき ます。しかし、これらの数字を確かめようとする新しい文書をみたことは ありません。 ですから 16MB RAM のばあい、最小限の設定ではスワップは必要ではないし、 48MB を越えるスワップはたぶん無用でしょう。正確な必要メモリ量はマシン 上のアプリケーションによります。(なにを期待してたんですか?) 3.3. どこにスワップスペースを置くべきか? o メカニクスは遅く、エレクトロニクスは速い。 最近のハードディスクはたくさんのヘッドを持っています。同じトラック のヘッド間のスイッチは高速です。それはそれが純粋に電気的なことだか らです。トラック間のスイッチは低速です、それは現実の物質世界中を動 くからです。 なので、ヘッドの多いディスクとヘッドの少ないディスクを比べると、他 の要素が同一の場合、多くのヘッドを持つディスクの方が高速でしょう。 しかし、スワップを分割し、双方のディスクに配置するとさらに速くなり ます。 o 昔のディスクには全てのトラック上に同じ数のセクタがありました。この ようなディスクの場合、ディスクヘッドがランダムなトラックからスワッ プ領域に移動することを考えると、スワップをディスクの真中に置くと最 も高速です。 o 最近のディスクでは ZBR (zone bit recording)が用いられています。こ れは外側のトラックにたくさんセクタを配置します。したがって回転速度 が一定なら、外側のトラックは内側に比べてずっと性能が高くなります。 スワップは高速なトラックに配置しましょう。 o もちろんディスクヘッドは必ずしもランダムに動くわけではありません。 常に忙しい home パーティションの真中と、ほとんど使われない保管用 パーティションの真中にスワップ領域を取った場合をくらべれば、ヘッド の動きが最小で済む home パーティション の真中にスワップがあるほうが より高速です。まあ、もう一方の使ってないディスク上にもスワップがあ ればより速いですが。 まとめ:他の仕事に忙しくなく、多くのヘッドを持った、高速なディスク上に スワップ領域を取りましょう。複数のディスクを持っているとき:全てのディ スク上、異なるコントローラがあればそれらでもスワップを分割、分散しま しょう。 さらに良い方法:RAMをもっと買いましょう。 3.4. ファイルシステムとフラグメンテーションに関するいくつかの事実 ディスクスペースはオペレーティングシステムによってブロック単位やブロッ クのフラグメントで管理されています。ext2 ではフラグメントとブロックは 同じサイズでなければなりません。そこでわれわれは議論をブロックに限るこ とができます。 ファイルはいかなるサイズでもありえます。それらはブロック境界では終りま せん。そこで全てのファイルではファイルの最後のブロックの一部が無駄とな ります。ファイルサイズが不規則だとすれば、ディスク上のファイルのそれぞ れにブロックの半分の(サイズの)無駄があると予想できます。Tanenbaum 教授 はこれを"Operating Systems"のなかで"internal fragmentation"と呼んでい ます。 ディスク上で占められるinodeの数からファイル数が推測できます。私の場合 は: ______________________________________________________________________ # df -i Filesystem Inodes IUsed IFree %IUsed Mounted on /dev/hda3 64256 12234 52022 19% / /dev/hda5 96000 43058 52942 45% /var ______________________________________________________________________ 約12000のファイルが/(ルート)に、約44000のファイルが/var にあります。1 KBのブロックサイズでは 6+22 = 28 MB のディスク容量がファイルの尻尾の部 分として失われています。ブロックサイズを 4KB とした場合、この容量の4倍 を失うことになります。 データ転送速度はおおきくて連続したデータのかたまりのほうが速いです。そ こで ext2 はサイズが大きくなりつつあるファイルのために8つの連続したブ ロックごとにあらかじめ領域を割り当てようとします。あらかじめとっておい た領域の使われない部分はこのファイルが閉じられたときに解放されます。 1つのファイルが不連続なブロックに配置されているのはパフォーマンスの点 でよくないことです。なぜならファイルはしばしば連続的にアクセスされるか らです。ファイルが不連続だとオペレーティングシステムにディスクアクセス を分割しなければならず、ディスクはヘッドを動かさなければなりません。こ れは"external fragmentation"とか単純に"フラグメンテーション (fragmentation)"と呼ばれ DOSファイルシステム上と共通の問題です。 ext2 は external fragmentation を避けるためにいくつかの戦略を持ってい ます。普通、フラグメンテーションは USENET ニューススプールの様に酷使さ れない限り、ext2 にとって大きな問題ではありません。ext2 ファイルシステ ム用のデフラグツールがあるのですが、ext2 の現リリースに追い付いていま せん。これを使うときは、自分の責任で行ってください。 MS-DOS ファイルシステムはディスクスペースの異常な管理でよく知られてい ます。MS-DOS のバッファキャッシュの使い方がひどく悪いことと相まってパ フォーマンスに及ぼすファイルフラグメンテーションの影響は際だっていま す。 DOS ユーザー達はほとんど毎週ディスクをデフラグすることに慣れてい て、デフラグすることに関して儀式的な信仰に達している人すらいます。この ような習慣は Linux と ext2 に持ちこむべきではありません。Linux のネイ ティブなファイルシステムは普通の使い方ではデフラグを必要としません。 ディスク上の空き領域がすくなくとも 5% ある状況なら「普通の使い方」の範 疇です。 MS-DOS ファイルシステムはまた、internal fragmentation によりディスク領 域の大きな部分を失うことも知られています。256MB より大きなパーティショ ンでは DOS のブロックサイズはもはや使い難いほど大きくなります。(このこ とは FAT32 による拡張などにもあてはまります) ext2 は、小さなブロックサイズが役立たずになる0.5TB (テラバイトと読み 1TB は 1024GB になります)とかそれ以上の巨大なファイルシステム以外は、 大きなファイルシステムのために大きなブロックサイズを選ばなければならな い、ということはありません。ですので DOS と違って、ブロックサイズを小 さくするために大きなディスクを複数のパーティションに分ける必要はありま せん。可能ならば、デフォルトのブロックサイズ 1KBを使ってください。いく つかのパーティションを実験的に 2KB のブロックサイズにしてみたくなるか もしれませんが、まれなバグに遭遇することを覚悟しておいてください。ほと んどの人がデフォルトを使っているので。 3.5. パーティション分けの判断基準となるファイル寿命とバックアップサイ クル ext2 のもとでは、パーティション分けはバックアップを考慮したり異なる ファイル寿命から生じる external fragmentation を避けるためなどから決め るべきです。 ファイルには寿命があります。ファイルが作られたあと、それはしばらくシス テム上に保持され、のちに削除されます。ファイルの寿命はシステム内で様々 ですし、ある程度ファイルのパスに依存します。例えば、/bin, /sbin, /usr/sbin, /usr/bin とか同じようなディレクトリ中のファイルはおそらく大 変長い寿命(数ヶ月とかそれ以上)を持つでしょう。/home のファイルは数週間 かそこらの中くらいの寿命を持つでしょう。/var のファイルは普通、寿命が 短いです。 /var/spool/news 中のファイルは数日以上は残らないでしょう。 /var/spool/lpd 中のファイルは数分とかそれ以下の単位で寿命が計れます。 もし「デイリーバックアップ」の量がバックアップメディア1枚の容量以下な らばバックアップはやりやすいです。「デイリーバックアップ」とはフルバッ クアップまたはインクリメンタルバックアップです。 パーティションサイズを1枚のバックアップメディアに収まるように、十分小 さくしておくようにすることもできます(毎日フルバックアップするようにし ましょう) 。そうでない場合でも、パーティションは毎日の増加分(変更され た全てのファイル)が1枚のバックアップメディアに十分収まる程度の大きさに しておくべきです。(インクリメンタルバックアップを選択し、毎週/毎月の フルバックアップ -無人では作業できないバックアップ- の度にバックアップ メディアを交換するようにしましょう)。 あなたのバックアップ戦略はこれらの決定に依存しています。 ディスク領域に関し計画したり、ディスクを購入するときは、バックアップの ために十分なお金を用意することに留意しておいてください。バックアップさ れていないデータは価値がないのです!データを作り直すコストはほとんどす べての人にとってバックアップのコストよりずっと大きいのです。 異なった寿命を持つファイルを異なったパーティションに置いておくのはパ フォーマンスにとってよいことです。このやりかただとニュースパーティショ ン上の短命なファイルはフラグメントが大きいです。このことが / や /home パーティションのパフォーマンスに影響をおよぼすことはありません。 4. 例 4.1. 意欲のある初心者のための推奨モデル 一般的なモデルでは /, /home, /var パーティションを上記のように作成しま す。このことはインストールや維持を単純なものにし、ファイル寿命の違いか らくる不都合な点を避けるのに十分な区分けです。これはバックアップモデル にもよくあてはまります。ほとんどの人は USENET ニューススプールはバック アップしないでしょうし、/var の中でバックアップする価値があるのはいく つかのファイルだけでしょう (/var/spool/mail が思い浮かぶでしょう)。一 方、/ はあまり変更されませんから、必要なときにだけ(設定を変更したあと だけ)バックアップすれば良いでしょう。またほとんどの現代的なバックアッ プメディアにフルバックアップできるほど十分小さいです。(インストールす るソフトウェアの大きさによって250から500MB割り当てましょう)。/home は 変化するユーザーデータが含まれるので毎日バックアップすべきです。インス トール状態によっては巨大な /home があり、インクリメンタルバックアップ をしなければなりません。 そのうえ、/tmp を 分割したパーティションに置いているシステムもありま す。また別のシステムでは /var/tmp にシンボリックリンクをはったり(これ はシングルユーザーモードに影響を及ぼし、手動で /tmp を1つ作るか /var をマウントするまでシステムは /tmp を持たないことに注意)、RAM ディスク にそれを置くことで(たとえば Solalis がこれ)同様の効果を狙っています。 このことは / のそとに /tmp を置いておけるので良い考えです。 加えて、このモデルはアップグレードや再インストールの場合も便利です:設 定ファイル(または /etc 全体)を /home ディレクトリのどこかに保存してお けば、 / の再生や、再インストール、古い設定を /home にある保存しておい たディレクトリから取り出す、などができます。 5. 私の場合 ここに古い ISA バスの 386/40 マシンがもう取り上げるものもなく棚に2年ま えから放棄されていました。で、家庭内LANのために簡素なXなしのサーバに変 身させることを考えました。 以下、私のやったことです: 386 を手にいれ 16MB RAM をのせました。安く て今手にはいる最小の (800MB)EIDE ディスクとイーサネットカードを追加し ました。さらに古いヘラクレスのビデオカードを追加しました。それにつなげ るモニターがあったからです。 Linux をインストールすれば、ローカルな NFS, SMB, HTTP, LPD/LPR, NNTP サーバーの出来上がりです。メールサーバや POP3 サーバにもできます。別のモデムや ISDN カードがあれば TCP/IP ルー タやファイアウォールにもなります。 このマシンで使われるディスク領域のほとんどは /var ディレクトリにありま す。 /var/spool/mail, /var/spool/news, /var/httpd/html などです。/var を分離したパーティションに置き、これに大きな領域をあてがいます。このマ シン上にはほとんどユーザー領域はいらないので、 /home は作らず他のワー クステーションから NFS でマウントしました。 X といくつかのユーティリティをのぞいた Linux システムは / にあてがった 250MB のパーティションに充分入るでしょう。このマシンは 16 MB の RAM を 持っていますが多くのサーバーを動かします。 16MB のスワップがおそらく必 要で、32MB あれば十分でしょう。ここではディスクスペースが不足している わけではないので32MBとします。センチメンタルな気分は捨てて、 MS-DOS パーティションは20MBぐらいにしました。他のマシンから /home をインポー トすると決めたので、500MB以上 /var として残ります。これなら家庭内 USENET ニュースサービスとしては十分以上でしょう。 でこうなりました。 ______________________________________________________________________ Device Mounted on Size /dev/hda1 /dos_c 25 MB /dev/hda2 - (Swapspace) 32 MB /dev/hda3 / 250 MB /dev/hda4 - (Extended Container) 500 MB /dev/hda5 /var 500 MB homeserver:/home /home 1.6 GB ______________________________________________________________________ バックアップはホームサーバーのテープを用いてネットワーク経由でおこない ます。このマシン上の全ては CD-ROM からインストールしたものなので、保存 しておかなければならないのは カスタマイズした /etc 以下の設定ファイル や /root/Source/Installed からインストールした *.tgz ファイ ル、/var/spool/mail 、/var/httpd/html などだけです。これらのファイルを 毎晩ホームサーバーの /home/backmeup にコピーします。そうすればホーム サーバーのバックアップの際、それらもバックアップできます。