fstabとUUID
101 試験で /etc/fstab は必ず出ます。問われるのは、6つのフィールドが左から何の順に並ぶか、第5と第6の数字の意味、ルートファイルシステムの fsck 順序、そして UUID や LABEL で書く理由です。数字を取り違えると失点が続くので、表ごと覚えます。
6つのフィールド
| 位置 | 名前 | 何を書くか |
|---|---|---|
| 第1 | デバイス | マウントするもの。デバイス名か UUID= か LABEL= |
| 第2 | マウントポイント | 繋ぎ先のディレクトリ。swap のときは swap と書く |
| 第3 | 種類 | ext4 や xfs や swap や auto |
| 第4 | マウントオプション | defaults や ro や noexec をカンマで並べる |
| 第5 | dump | dump コマンドのバックアップ対象にするかどうか |
| 第6 | fsck | 起動時のファイルシステム検査の順序 |
プレーンテキスト
UUID=8b1f4c2e-0d3a-4f57-9c11-2a6d7e8f0b45 /srv/photos ext4 defaults 0 2
LABEL=backup /bak ext4 ro,noexec 0 2
/dev/sda2 swap swap defaults 0 0第5の dump は 0 が対象外、1 が対象です。今どき dump を使う現場はほとんどありませんが、試験には出ます。
本命は第6の fsck です。0 が検査しない、1 がルートで最初に単独で検査、2 がルート以外でまとめて検査を意味します。swap やネットワーク越しのファイルシステムは 0 です。1 を2つ以上書くと検査が競合するので、1 はルートだけという点も狙われます。
第4フィールドのオプション
| 値 | 意味 |
|---|---|
| defaults | rw と suid と dev と exec と auto と nouser と async をまとめたもの |
| ro / rw | 読み取り専用 / 読み書き可能 |
| noexec | 中の実行ファイルを実行させない |
| noauto | 起動時に自動でマウントしない。手で mount したときだけ繋ぐ |
| user | 一般ユーザーにもマウントを許す |
| noatime | 読んだだけではアクセス時刻を書き戻さない。書き込みが減る |
noauto と user は組み合わせて使われ、光学ドライブや USB の行でよく見ます。
デバイス名で書くと入れ替わります
デバイス名は、その機械が起動したときに認識した順に付きます。ディスクを足したり挿す口を変えたりすると、昨日まで /dev/sdb1 だったものが今日は /dev/sdc1 になります。fstab にデバイス名を直接書いていると、別のファイルシステムが別の場所に繋がるか、繋がらずに起動が止まります。
UUID はファイルシステムを作ったときに焼き込まれる固有の識別子で、どの口に挿しても付いて回ります。LABEL は人間が付ける名前で、読みやすい代わりに重複させる危険があります。実務では UUID が既定です。
ターミナル
blkid
lsblk -f
findmnt /
tune2fs -L backup /dev/sdb1blkid は各デバイスの UUID と TYPE と LABEL を返します。fstab を書く前に必ず打つコマンドです。lsblk -f は木の形で種類と UUID とマウント先を見せ、findmnt は現在のマウント状態を調べます。ext 系のラベルを付け替えるのが tune2fs -L、-l が情報の一覧です。xfs なら xfs_admin -L を使います。
書き間違いは次の起動で牙をむきます
fstab の誤りは、書いた瞬間ではなく再起動のときに顕在化します。存在しないデバイスを指していたり種類を間違えていたりすると、起動の途中で止まって緊急モードに落ち、画面の前に人がいないサーバーでは復旧に物理アクセスが要ります。
だから編集したら、再起動の前に mount -a を打って確かめます。fstab の行のうち noauto が付いていないものをまとめてマウントするコマンドです。ただしこれ自体も既存のマウントを動かしうるので、本番機で軽い気持ちで打つものではありません。
よくある引っかけ
フィールドの順番はデバイス、マウントポイント、種類、オプション、dump、fsck です。オプションと種類を入れ替えた選択肢が必ず出ます。
fsck の 0 は「検査しない」であって「最優先」ではありません。swap の行は第2フィールドに swap と書き、第6フィールドは 0 です。そして noauto を書いた行は mount -a では繋がりません。