ある朝、Webサイトを開こうとしたら全く表示されない。
「また何かおかしくなったのか!?」と原因を調査したところ、恐ろしい事実が判明しました。
データ保存用の「ファイルストレージ(専用HDD)」が正常にマウントされておらず、すべてのデータがメインHDDに書き込まれていたのです。
その結果、メインHDDの容量が100%に達し、システムが正常に動かなくなってしまいました……。
今回はこの反省を踏まえ、サーバー再起動時にも自動でファイルストレージがマウントされるよう、/etc/fstab の設定を正しく行う手順を備忘録としてまとめます。
1. マウントポイント(フォルダ)の作成
まずは、該当するHDDをマウントするための空フォルダを作成します。今回は /storage フォルダを作成します。
mkdir /storage2. デバイスにラベル(e2label)を付与する
/etc/fstab を開いて /dev/sdb1 を指定しようと思ったのですが、最近のLinuxでは仕様が変わり、デバイス名(/dev/sdb1など)の直書きではなく「ラベル(LABEL)」または「UUID」を使って指定するのが一般的になっているようです。
まずは対象のデバイスに e2label コマンドでラベルを付与します。
e2label /dev/sdb1 /storage3. /etc/fstab の編集と注意点
ラベルを付与したら、/etc/fstab に以下の1行を追記します。
# デバイス マウントポイント ファイルシステム オプション dump fsck
LABEL=/storage /storage ext4 defaults 1 2【重要】再起動前のマウントテスト fstab の記述ミス(ラベルのスペルミス等)があると、最悪の場合Linux自体が起動不能になります(過去にfstabによるサーバー起動エラーで地獄を見た経験があります…)。
そのため、いきなり再起動するのではなく、一時的にfsckオプション(一番右の数字)を 0 にしてテストするか、記述後に mount -a コマンドを叩いてエラーが出ないか必ず確認してください。
4. 再起動後の確認
サーバーを再起動したら、df コマンドで正常にマウントされているか、容量が反映されているかを確認します。
$ df -h
ファイルシステム サイズ 使用 残り 使用% マウント位置
/dev/sdb1 1.8T 75G 1.7T 5% /storage無事にマウントされました!
補足資料:fstabの書式とオプション一覧
OS起動時にマウントを行うデバイスと場所を指定する fstab の書式と、便利なマウントオプションをまとめました。
fstabの基本書式
| デバイス | マウントポイント | ファイルシステム | マウントオプション | dumpオプション | fsckオプション |
| LABEL=/storage | /storage | ext4 | defaults | 1 | 2 |
- デバイス: e2labelで指定したラベル、またはUUIDを記載。
- マウントポイント:
mkdirで作成したマウント先の空ディレクトリ。 - ファイルシステム: HDDのフォーマット形式(ext4など)。
- マウントオプション: 複数指定する場合はカンマ区切りで入力(下記表を参照)。
- dumpオプション:
dumpコマンド(バックアップ)の対象にするか(0: 対象外 /1: 対象)。 - fsckオプション: 起動時のファイルシステムチェックの順序(
0: 行わない /1: ルートディレクトリ用 /2: それ以外)。※同一HDDで同じ数値を指定するとチェックが遅くなる場合があります。迷ったら2が無難です。
マウントオプション一覧
マウントオプションに defaults を指定すると、標準的な設定(rw, suid, dev, exec, auto, nouser, async)が一括で有効になります。個別で制御したい場合は以下を指定します。
| オプション | 概要 | 備考 |
| async | すべてのデータ読み書きを非同期処理で行います。 | 同期処理で行う場合は sync を指定。 |
| atime | アクセスする度にinodeのアクセス日時を更新します。 | 更新しない場合は noatime を指定。 |
| auto | mount -a 実行時にマウントの対象にします。 | 対象外にする場合は noauto を指定。 |
| codepage | 文字コードを指定します。(例: Shift_JISは 932、UTF-8は 65001) | WindowsフォーマットのHDD等で使用。 |
| defaults | rw, suid, dev, exec, auto, nouser, async を一括で有効にします。 | 基本的なマウントに推奨。 |
| dev | ファイルシステムのデバイスを利用できるようにします。 | 利用させない場合は nodev を指定。 |
| exec | バイナリの実行を許可します。 | 許可しない場合は noexec を指定。 |
| gid | マウントポイント以下のグループを指定したID(数字)に変更します。 | |
| iocharset | マウントする際、システムの文字コードを指定します。(例: utf-8) | |
| nosuid | SUID・SGIDを無効にします。 | 有効にする場合は suid を指定。 |
| nouser | root(管理者)のみマウント可能にします。 | 一般ユーザーにも許可する場合は user。 |
| ro | 読み込み専用でマウントします。 | |
| rw | 読み込み・書き込み可能な状態でマウントします。 | |
| uid | マウントするユーザーID(数字)を指定します。 |