Red Hat Certified System Administrator (RHCSA) #7 ファイルシステム: XFS、ext4、mount/fstab、NFS、AutoFS
#5 と #6 でパーティションと LVM を使ってブロックデバイスを作り、広げたなら、その上に ファイルシステムを載せてマウントする作業 が今回の主題です。RHCSA は空のブロックデバイスを作るだけでは終わりません。その上に XFS や ext4 を作り、ディレクトリにマウントし、再起動後も同じ場所に再び付くように fstab に永続登録するところまでが 1 つの作業です。
これに加えて、RHCSA の定番出題領域である NFS クライアントマウント と AutoFS のオンデマンドマウント も一緒に扱います。どちらも「外部ストレージを自分のシステムに付ける」という点は同じですが、NFS は fstab で常に付けておき、AutoFS はアクセスするときだけ自動で付けて外すという違いがあります。
ファイルシステムを作る #
ブロックデバイス (パーティションや LV) の上にデータを置くには、まずファイルシステムを作る必要があります。RHEL 9 の標準ファイルシステムは XFS で、ext4 も一緒にサポートされます。
XFS: mkfs.xfs #
XFS は RHEL の標準ファイルシステムであり、大容量と並列 I/O に強いです。LV /dev/vg01/lv01 に XFS を作るコマンドは次のとおりです。
sudo mkfs.xfs /dev/vg01/lv01すでにファイルシステムがあるデバイスに作り直そうとすると拒否されます。本当に上書きするには -f (force) を付けます。
sudo mkfs.xfs -f /dev/vg01/lv01ext4: mkfs.ext4 #
ext4 が必要な作業なら mkfs.ext4 を使います。
sudo mkfs.ext4 /dev/vg01/lv02mkfs -t xfs や mkfs -t ext4 の形でも同じ作業ができます。試験ではどちらを使っても結果さえ合っていれば構いません。
sudo mkfs -t xfs /dev/vg01/lv01
sudo mkfs -t ext4 /dev/vg01/lv02作られたファイルシステムの確認 #
lsblk -f は各デバイスのファイルシステムタイプと UUID、LABEL を一目で見せてくれます。マウントと fstab 作業の出発点になるコマンドです。
lsblk -fNAME FSTYPE FSVER LABEL UUID MOUNTPOINTS
vda
├─vda1 xfs a1b2c3d4-... /boot
└─vda2 LVM2_member ...
└─...
vg01-lv01 xfs 1f2e3d4c-5b6a-7980-1234-567890abcdef
vg01-lv02 ext4 1.0 9876fedc-ba98-7654-3210-abcdef012345blkid でも UUID とタイプを確認できます。
sudo blkid /dev/vg01/lv01マウントと解除 #
ファイルシステムを作ったら、ディレクトリに付ける (マウントする) ことで初めて実際に使えます。
ディレクトリにマウント: mount #
まずマウントポイントになるディレクトリを作り、その上にデバイスを付けます。
sudo mkdir -p /data
sudo mount /dev/vg01/lv01 /data解除: umount #
マウントを外すときは umount にデバイスかマウントポイントのどちらかを渡します。
sudo umount /data「target is busy」エラーが出た場合は、そのディレクトリの中にいるか、その中のファイルを開いたままのプロセスがあることを意味します。lsof や fuser で誰が使っているかを確認します。
sudo lsof /data
sudo fuser -vm /dataマウント状態の確認: findmnt #
findmnt は現在のマウントツリーをきれいに見せてくれます。特定のポイントだけを見るには引数で渡します。
findmnt
findmnt /datamount コマンドを引数なしで打つか df -h を使ってもマウント状況は見られますが、findmnt はオプションまではっきり見せてくれるので検証に向いています。
df -h /dataここまでの mount は メモリにのみ適用される一時マウント です。再起動すると消えます。RHCSA で失点しないためには、必ず次の段階である fstab 永続登録まで進む必要があります。
fstab で永続マウント #
/etc/fstab に 1 行登録すると、起動するたびに自動でマウントされます。fstab は空白で区切られた 6 つの欄で構成されます。
<デバイス> <マウントポイント> <タイプ> <オプション> <dump> <fsck 順序>| 欄 | 意味 |
|---|---|
| デバイス | UUID・LABEL・デバイスパスのいずれか。UUID 推奨 |
| マウントポイント | 付けるディレクトリ |
| タイプ | xfs・ext4・nfs など |
| オプション | defaults・nofail などのマウントオプション |
| dump | バックアップ表示。通常 0 |
| fsck 順序 | 起動時の検査順序。root は 1、残りは 0 または 2 |
デバイスパスの代わりに UUID を使う理由 #
/dev/sdb1 のようなデバイスパスは、ディスクの追加・削除によって変わることがあります。UUID はファイルシステムに固定されて変わらないので、fstab には UUID を使うのが安全です。UUID は lsblk -f や blkid で確認します。
sudo blkid /dev/vg01/lv01/dev/vg01/lv01: UUID="1f2e3d4c-5b6a-7980-1234-567890abcdef" TYPE="xfs"確認した UUID で fstab に 1 行を追加します。
UUID=1f2e3d4c-5b6a-7980-1234-567890abcdef /data xfs defaults 0 0LV のように名前が安定している場合は、デバイスマッパーのパスをそのまま使っても問題ありません。
/dev/vg01/lv01 /data xfs defaults 0 0LABEL で登録する #
ファイルシステムにラベルを付けておくと、fstab で LABEL= で参照できます。XFS は xfs_admin -L、ext4 は e2label でラベルを指定します。
sudo xfs_admin -L data /dev/vg01/lv01
sudo e2label /dev/vg01/lv02 logsLABEL=data /data xfs defaults 0 0
LABEL=logs /logs ext4 defaults 0 0mount -a で検証する #
fstab を直したら、再起動する前に 必ず検証する必要があります。mount -a は fstab のすべての項目のうち、まだマウントされていないものをマウントします。エラーなく終わり、findmnt でマウントが見えれば成功です。
sudo mount -a
findmnt /dataエラーが出たら、fstab のその行にタイプミスがあるか、デバイス・オプションが間違っています。この場で捕まえることで起動失敗を防ぎます。
defaults オプションの意味 #
defaults は rw,suid,dev,exec,auto,nouser,async をまとめた標準オプションセットです。ほとんどの一般的なマウントには defaults だけで十分です。必要なら追加オプションをカンマで付け足します。
LABEL=data /data xfs defaults,noexec 0 0nofail: デバイスがなくても起動を止めない #
fstab に登録したデバイスが起動時点でないと、デフォルトの動作は 起動を止めて緊急モードに落ちること です。NFS や USB のように常に存在すると保証できないデバイスには nofail を与え、ないときに静かにスキップさせます。
LABEL=backup /backup xfs defaults,nofail 0 0nofail は「このマウントが失敗してもシステムの起動は続ける」という安全装置です。外部ストレージの項目には付けておくのがよいです。
NFS クライアントマウント #
NFS はネットワークの向こうのディレクトリを自分のシステムにマウントして、ローカルディレクトリのように使う方式です。RHCSA は クライアント側のマウント を主に問います。サーバー構成ではなく、与えられた NFS サーバーの共有を自分のシステムに付ける作業です。
クライアントパッケージ #
NFS クライアントツールは nfs-utils パッケージが提供します。通常はデフォルトでインストールされていますが、ない場合はインストールします。
sudo dnf install -y nfs-utilsshowmount で共有を確認 #
サーバーがどのディレクトリを export しているかを showmount -e で確認します。
showmount -e nfs.example.comExport list for nfs.example.com:
/exports/shared *
/exports/home 192.168.0.0/24一時マウント #
マウントポイントを作り、mount -t nfs で付けます。
sudo mkdir -p /mnt/shared
sudo mount -t nfs nfs.example.com:/exports/shared /mnt/shared付いた結果は findmnt で確認します。
findmnt /mnt/sharedfstab で永続マウント #
NFS も fstab に登録すると起動時に自動でマウントされます。タイプは nfs で、デバイスの欄には サーバー:パス を書きます。ネットワークやサーバーの事情でマウントが失敗することがあるので、nofail を一緒に与えるのが安全です。
nfs.example.com:/exports/shared /mnt/shared nfs defaults,_netdev,nofail 0 0_netdev オプションは「このマウントはネットワークが上がってから試みよ」というヒントです。NFS のようにネットワークに依存するマウントに付けます。登録後 mount -a で検証します。
sudo mount -a
findmnt /mnt/sharedAutoFS のオンデマンドマウント #
fstab のマウントは起動時に常に付いています。一方 AutoFS は、そのディレクトリに アクセスする瞬間にだけ 自動でマウントし、一定時間使わないと再び外します。ユーザーホームディレクトリを NFS で提供する環境のように、必要なときだけ付くマウントが有利な場合に使います。
autofs のインストールと有効化 #
sudo dnf install -y autofs
sudo systemctl enable --now autofsマスターマップ: /etc/auto.master #
AutoFS の設定は マスターマップ と マップファイル の 2 段階で構成されます。マスターマップ (/etc/auto.master または /etc/auto.master.d/ 以下のファイル) は「どのディレクトリをどのマップファイルが管理するか」を定義します。
/etc/auto.master.d/shared.autofs ファイルを作り、次の 1 行を置きます。
/shares /etc/auto.sharedこの行は「/shares 以下のマウントは /etc/auto.shared マップファイルが管理する」という意味です。
マップファイル: /etc/auto.shared #
マップファイルは「マウントポイント名、オプション、出所」を定義します。/etc/auto.shared に次を置きます。
data -rw,sync nfs.example.com:/exports/sharedこうすると、/shares/data にアクセスする瞬間に AutoFS が nfs.example.com:/exports/shared をその場所にマウントします。/shares ディレクトリは自分で作る必要はありません。AutoFS が管理します。
設定を読み直すには autofs を再起動します。
sudo systemctl restart autofs動作の確認 #
アクセスする前はマウントが見えず、ディレクトリに入るとそこで初めてマウントされるのが AutoFS の核心です。
ls /shares/data
findmnt /shares/dataホームディレクトリの自動マウント #
RHCSA の代表的なシナリオは NFS ホームディレクトリを AutoFS で自動マウントする ことです。たとえばサーバーが /exports/home/ユーザー名 の形で各ユーザーホームを export するなら、ワイルドカードマップで 1 行で処理します。
マスターマップ /etc/auto.master.d/home.autofs に次を置きます。
/home/guests /etc/auto.homeマップファイル /etc/auto.home にはワイルドカード * と置換変数 & を使います。
* -rw,sync nfs.example.com:/exports/home/&* はアクセスする下位ディレクトリ名と一致し、& はその名前に置換されます。ユーザー jdoe が /home/guests/jdoe にアクセスすると、AutoFS が nfs.example.com:/exports/home/jdoe をその場所にマウントします。
sudo systemctl restart autofs
ls /home/guests/jdoe
findmnt /home/guests/jdoeこのパターンは試験で「ユーザー X のホームを NFS サーバーから自動マウントせよ」という形でよく出ます。マスターマップ 1 行とワイルドカードマップ 1 行という構造を手に馴染ませておきます。
試験ポイント #
- fstab のタイプミスは起動失敗につながります。 1 行でも間違うと、次の起動で緊急モードに落ちることがあります。fstab を直したら、再起動する前に必ず
sudo mount -aで検証し、エラーがないか確認します。 - ローカルマウントは UUID か LABEL で、NFS は
サーバー:パスで 登録します。デバイスパスは変わることがあるので UUID を優先します。 - 外部・ネットワークマウントには
nofail(NFS なら_netdevも) を付け、デバイスやサーバーがないときに起動が止まらないようにします。 - AutoFS はマスターマップ + マップファイル の 2 段階です。マスターマップはディレクトリとマップファイルをつなぎ、マップファイルはマウントオプションと出所を定義します。設定を直したら
systemctl restart autofsで反映します。 - man page で詰まったときは
/usr/share/doc/autofsの例ファイル (auto.master・auto.misc) が大きな助けになります。
まとめ #
この記事で押さえたこと:
- ファイルシステムの作成。
mkfs.xfs(標準) とmkfs.ext4、そしてlsblk -f・blkidでタイプと UUID を確認 - マウントと解除。
mountで付けてumountで外し、findmntで状態を検証。このマウントは一時的 - fstab の永続マウント。UUID・LABEL で登録し、
defaults・nofailオプションを活用し、mount -aで再起動前に検証 - NFS クライアント。
showmount -eで共有を確認、mount -t nfsで一時マウント、fstab にnfs・_netdev・nofailで永続登録 - AutoFS。マスターマップとマップファイルでオンデマンドマウントを構成し、ワイルドカードマップで NFS ホームディレクトリを自動マウント
次へ — パッケージと repository #
ストレージとファイルシステムの領域を #5 からここまで仕上げました。ここからシステムにソフトウェアを載せる領域に移ります。
#8 パッケージと repository: dnf、modules、AppStream では、dnf でパッケージをインストール・検索・削除し、ローカルとリモートの repository を登録し、RHEL 9 の AppStream と module stream で同じソフトウェアの複数バージョンを扱う方法まで、直接打ち込みながら整理します。