Ext3

提供: ArchWiki
2017年12月29日 (金) 23:22時点におけるKusakata (トーク | 投稿記録)による版 (翻訳)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

Third Extended ("ext3") ファイルシステムには長所がたくさんあります。ext3 のカーネル内のコードやユーザー空間のツールは他の Linux 対応のファイルシステムよりも多く使われ、テストされ、修正が施され、改善が加えられています。ext3 はシンプルかつ強固でありながら、拡張性もあります。この記事ではファイルシステムのパフォーマンスと信頼性の両方を良くするためのヒントを説明しています。

このドキュメントでは一般的なパーティションを /dev/hdXY と表記します。あなたの使用している実際のデバイスノードに適宜置き換えてください。例えば、スレーブディスクの一番目のパーティションなら /dev/hdb1、一番目の SCSI または Serial ATA ディスクの二番目のパーティションなら /dev/sda2 になります。

tune2fs と e2fsck を使う

まず最初に、tune2fs ユーティリティを使って ext2 や ext3 パーティションのファイルシステムオプションを変更できる (もしくは ext2 を ext3 に変換する) ことを確認する必要があります。tune2fsman ページを見て下さい。

ファイルシステムに変更を加えた後は e2fsck ユーティリティを使ってファイルシステムのチェックを実行すると良いでしょう。ファイルシステムが問題ないか確認して、必要であれば修正を行います。まだ使ったことがないのであれば e2fsck ユーティリティの man ページを読んで下さい。

警告: 実行するときはファイルシステムをアンマウントする必要があります。tune2fse2fsck ユーティリティを使って変更を加える前に必ずファイルシステムがアンマウントされていることを確認してください。マウント中のファイルシステムを弄った場合、ファイルシステムが破損する可能性があります。必要であれば Parted Magic や Arch Linux のインストールメディアなどの LiveCD から起動するようにしてください。

ディレクトリインデックスを使う

この機能は、ハッシュ化されたバイナリツリーを使ってディレクトリの情報を保存することで、巨大なディレクトリや、多数のファイルを含んでいるディレクトリでのファイルアクセスを高速化します。完全に安全に使うことができ、ほとんとの場合で、劇的にアクセス速度が向上します。したがって有効化すると良いでしょう:

# tune2fs -O dir_index /dev/hdXY

ディレクトリインデックスは tune2fs を実行した後に、ファイルシステムに作成されたディレクトリにだけ影響を与えます。既存のディレクトリに適用したいときは、e2fsck ユーティリティを使ってファイルシステム上のディレクトリを最適化して再インデックスする必要があります:

# e2fsck -D -f /dev/hdXY
ノート:
  • 上記のコマンドは ext2, ext3, ext4 ファイルシステムで使うことができます。ファイルシステムのサイズによって、長い時間がかかることもあります。
  • Arch Linux では /etc/mke2fs.conf によってディレクトリインデックスはデフォルトで有効になっています。

フルジャーナリングの有効化

警告: 遅延アロケーションとフルジャーナリング (例: journal=data) の両方を有効にしている場合、ext4 パーティションがマウントされません。

デフォルトでは、ext3 パーティションは 'ordered' データモードでマウントされます。このモードでは、全てのデータはメインのファイルシステムに書き込まれ、メタデータがジャーナルに送られます。ジャーナルのブロックは論理的にトランザクションにグループ化されディスク I/O を削減します。大抵の場合、これで問題は発生しませんが、(特定の状況下で) 信頼性とパフォーマンスの両方を向上させる方法があります: ファイルデータそのものを含む、全てのデータをジャーナリングさせるのです (別名 'journal' データモード)。通常、全てのデータをジャーナリングするのはパフォーマンスが落ちるように思われます。データがディスクに二回書き込まれることになるからです: 一度はジャーナルに、そしてメインのファイルシステムに。しかしながら、そうではない場合があります。読み書きを同時にたくさん行うようなファイルシステムではパフォーマンスが改善された例があります。詳しくは Daniel Robbins によって IBM のウェブサイトに書かれた この記事 を読んで下さい。

journal データモードを有効化する方法は2つあります。1つは /etc/fstab でマウントオプションとして data=journal を追加する方法です。この方法を使う場合、root ファイルシステムで journal データモードを使うときはブートローダーの設定で rootflags=data=journal をカーネルパラメータとして設定する必要があります。二番目の方法は、tune2fs を使ってファイルシステムのスーパーブロックのデフォルトマウントオプションを変更します:

# tune2fs -O has_journal -o journal_data /dev/hdXY

古いカーネルでは二番目の方法は使えないことがあるので注意してください。特に Linux 2.4.20 以下ではスーパーブロックのデフォルトマウントオプションが無視されます。さらに大胆に、ジャーナルのサイズを変更することもできます。ジャーナルを大きくすればパフォーマンスが良くなる可能性があります (そのかわりディスクの消費量は増えてリカバリにかかる時間は長くなります)。以下を実行する前に tune2fs マニュアルをよく読むようにしてください:

# tune2fs -J size=$SIZE /dev/hdXY

長ったらしいブート時のチェックを無効化

警告: チェックを無効化するのは ext3/4 などのジャーナリングファイルシステムだけにしてください。ReiserFS や XFS などの他のジャーナリングファイルシステムでも無効化できたりできなかったりしますが、テストはされていません。チェックを無効化するとファイルシステムに損害を与えたり破損してしまう可能性があります。自己責任で設定してください。

ext3 ファイルシステムは30回マウントされるたびにチェックが走ります。IDE/SATA/SCSI の配線に問題が生じたときや電源の供給が止まったときなどハードウェアに問題が発生した場合に、ファイルシステムが破損することを防げるため基本的には良いことです。ジャーナリングファイルシステムはトランザクションを再生して簡単にファイルシステムを元の状態に復帰できるようにするために作られました。したがって、必要なときにジャーナルを復元してファイルシステムを元に戻してデータを失わないようにすることができるのであれば、一定のマウント回数で行うチェックは無効にしても安全です。無効化する前に /etc/fstab のファイルシステムエントリの6番目のフィールド (pass) が正数 (起動時に自動的にチェック) になっていることを確認してください。以下のコマンドで無効化できます:

# tune2fs -c 0 -i 0 /dev/hdXY

完全に無効化するのではなく (安全のために) 発生回数を減らしたい場合、カウントチェックからタイムフレームチェックに変更すると良いでしょう。1ヶ月毎にチェックするように変更するには:

# tune2fs -c 0 -i 1m /dev/hdXY

予約済みのファイルシステム領域を回収する

Ext3 パーティションはデフォルトで使用領域の 5% を特殊な目的のために使います。主な目的はファイルシステムの断片化を抑えるためです。ファイルシステムの使用量が 100% に達しても root がログインできるように領域を残しているという理由もあります。領域が全く残っていないとログを書き出すことすらできず、システムが不安定になって root ユーザーがログインできなくなる可能性があります。

ハードディスクの容量が大きくなると、たとえ 5% でもかなり無駄な領域を消費することになります (例えば 100 GB のハードディスクなら 5 GB が予約されます)。/home などのファイルシステムを分割している場合はオプションを調整して浪費されている領域を回収すると良いでしょう (詳しくは こちらのメール を参照)。ルートファイルシステムなどは 5% の予約領域をそのままにしておくほうが安全です。/var/tmp ファイルシステムが含まれているファイルシステムの予約領域をなくしてしまうと問題になるでしょう。

ルートファイルシステム以外のファイルシステムで予約領域をドライブの 1% に変更するには:

# tune2fs -m 1 /dev/sdXY

ラベルを割り当てる

パーティションを作成・フォーマットしたら、e2label コマンドを使ってラベルを割り当てることができます。ラベルを割り当てることでデバイスパスの代わりにラベルを使って /etc/fstab にパーティションを追加できるようになります (USB ドライブなどで有用です)。パーティションにラベルを追加するには、root で以下のコマンドを実行:

# e2label /dev/sdXY new-label

任意の引数 new-label を指定しなかった場合、e2label は現在のファイルシステムのラベルを表示します。任意の引数 new-label を指定した場合、e2label はファイルシステムのラベルを new-label に設定します。Ext2 と ext3 ファイルシステムのラベルは最大で16文字まで設定できます。new-label が16文字よりも長い場合、e2label は末端を切り取り警告メッセージを出力します。