/etc/fstabをマスターする:起動に失敗しないディスクの自動マウント設定ガイド

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

午前2時のブラックスクリーン:サーバーが起動しない恐怖

火曜日の午前2時、私の監視ダッシュボードが赤く染まりました。本番環境のデータベースサーバーで定期的なカーネルアップデートと再起動が予定されていましたが、一向に応答が返ってきません。IPMIコンソールにログインすると、すべてのシステム管理者が最も恐れるメッセージが表示されていました。You are in emergency mode. After logging in, type "journalctl -xb" to view system logs.(エマージェンシーモードです。ログイン後、”journalctl -xb”と入力してシステムログを確認してください。)

原因は何だったのでしょうか?それは /etc/fstab ファイル内の単純なタイプミスでした。その日の早い時間に、2TBのバックアップドライブを追加していたのです。エントリの検証を怠ったため、ディスクが見つからず、起動プロセス中にシステム全体がハングアップしてしまいました。これがLinux管理における緊張感のある現実です。/etc/fstab ファイルはストレージ設定のバックボーンですが、たった1文字の書き間違いがインフラ全体をオフラインにする可能性があります。

なぜ /etc/fstab が単一障害点(SPOF)になるのか

/etc/fstab (File System Table) ファイルは、どのパーティションをマウントし、それらをどのように処理するかをLinuxカーネルに伝えます。起動プロセス中、systemd はこのファイルを読み取ってファイルシステムツリーを構築します。リストされたデバイスが見つからないか、パラメータが正しくない場合、通常、起動プロセスは停止します。これは、システムが不整合な状態で実行されたり、データが破損したりするリスクを防ぐためです。

ほとんどの失敗は、次の3つの一般的なミスから生じます:

  • 不安定なデバイス名: UUIDの代わりに /dev/sdb1 を使用している。SATAケーブルを差し替えたりUSBドライブを追加したりすると、sdb1sdc1 に変わる可能性があり、マウントに失敗します。
  • ネットワークのタイミング問題: ネットワークスタックが完全に初期化される前にNFS共有をマウントしようとする。デフォルトでは、システムは返ってこないかもしれない応答を待ち続けます。
  • 構文エラー: 列を忘れたり、defaults のようなマウントオプションの綴りを間違えたりする。

/etc/fstab エントリの構造

/etc/fstab の各行は、厳格な6列構造に従います。ここでは正確さが不可欠です。

# <ファイルシステム>   <マウントポイント>   <タイプ>   <オプション>       <ダンプ>  <パス>
UUID=abc-123      /data           ext4     defaults        0       2
  1. ファイルシステム: パーティションの一意識別子です(UUIDがゴールドスタンダードです)。
  2. マウントポイント: ディスクが表示されるディレクトリ(例:/mnt/storage)。
  3. タイプ: ディスクのフォーマット(ext4xfsnfs など)。
  4. オプション: rw(読み書き可能)や noexec(バイナリの実行を禁止)などの特定の動作設定。
  5. ダンプ: レガシーなバックアップフラグ。通常は 0 に設定します。
  6. パス: fsck チェックの順序を決定します。ルートには 1、その他の物理ディスクには 2、ネットワーク共有には 0 を使用します。

プロのテクニック:ローカルストレージにはUUIDを使用する

/dev/sda1 のようなデバイスパスの使用はやめましょう。これらは動的で危険です。代わりに、ハードドライブを別のポートに移動しても変わらないUniversally Unique Identifier (UUID) を使用してください。UUIDを確認するには、次のコマンドを実行します:

lsblk -f

エントリは次のようになります:

UUID=550e8400-e29b-41d4-a716-446655440000  /storage  ext4  defaults  0  2

起動を妨げないNFS共有のマウント方法

NFSマウントは、起動を失敗させる原因として悪名高いものです。リモートサーバーがダウンしている場合、クライアントはデフォルトの90秒のタイムアウトまで画面が止まったままになるか、完全に失敗する可能性があります。システムの回復力を維持するために、_netdevnofail フラグを使用してください。

  • _netdev: マウントを試行する前に、ネットワークがアクティブになるまで待機するようシステムに強制します。
  • nofail: ディスクが見つからない場合でも、システムの起動を継続できるようにします。
# 安全なNFSマウント
192.168.1.50:/exports/data  /mnt/nfs_share  nfs  defaults,_netdev,nofail  0  0

Tmpfsによるパフォーマンス向上

セッションデータやキャッシュのように、アプリケーションが数千の小さな一時ファイルを書き込む場合は、SSDの書き換え寿命を無駄にしないでください。tmpfs を使用して、それらのファイルをRAMに保存します。これにより、レイテンシを大幅に削減し、ハードウェアの寿命を延ばすことができます。

# /tmp を2GB制限でRAM上にマウント
tmpfs  /tmp  tmpfs  rw,size=2G,nodev,nosuid  0  0

黄金のルール:テストなしで再起動してはいけない

50台以上のLinuxサーバーを管理してきた経験から、fstab を編集した直後の再起動はギャンブルだということを学びました。システムが稼働している間に、安全に変更を確認できます。まずターゲットドライブをアンマウントし、次に以下を実行します:

sudo mount -a

このコマンドは、システムに /etc/fstab 内のすべてのエントリのマウントを試行するよう指示します。構文エラーや誤ったUUIDがある場合、アクティブなシェルに即座にエラーメッセージが表示されます。コマンドが何も出力せずに終了すれば、設定は有効であり、安全に再起動できます。

リカバリ:エマージェンシーモードからの脱出

もしエマージェンシーモードに陥ってしまっても、慌てないでください。修正は通常2分程度で終わります:

  1. rootパスワードを入力してシェルを取得します。
  2. ルートパーティションを読み書き可能として再マウントします:
    mount -o remount,rw /
  3. ファイルを開きます:nano /etc/fstab
  4. 最近追加した行の先頭に # を置いてコメントアウトします。
  5. 保存して終了し、reboot と入力します。

推奨されるマウントオプションのまとめ

ストレージの種類 推奨オプション
内蔵SSD/HDD defaults
外付けUSBドライブ defaults,nofail
NFS/Samba共有 _netdev,nofail,x-systemd.automount
機密データ defaults,nosuid,nodev,noexec

/etc/fstab をマスターすることは、単にディスクをマウントすること以上の意味があります。それは、ハードウェアの不具合にも耐えられるシステムを構築することです。UUIDを優先し、重要でないボリュームには nofail を活用し、常に mount -a でテストすることで、午前2時に何かが起きてもサーバーをオンラインに保つことができます。

Share: