Red Hat Certified System Administrator (RHCSA) #7 ファイルシステム: XFS、ext4、mount/fstab、NFS、AutoFS

読了 10分

#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/lv01

ext4: mkfs.ext4 #

ext4 が必要な作業なら mkfs.ext4 を使います。

sudo mkfs.ext4 /dev/vg01/lv02

mkfs -t xfsmkfs -t ext4 の形でも同じ作業ができます。試験ではどちらを使っても結果さえ合っていれば構いません。

sudo mkfs -t xfs /dev/vg01/lv01
sudo mkfs -t ext4 /dev/vg01/lv02

作られたファイルシステムの確認 #

lsblk -f は各デバイスのファイルシステムタイプと UUID、LABEL を一目で見せてくれます。マウントと fstab 作業の出発点になるコマンドです。

lsblk -f
NAME            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-abcdef012345

blkid でも 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」エラーが出た場合は、そのディレクトリの中にいるか、その中のファイルを開いたままのプロセスがあることを意味します。lsoffuser で誰が使っているかを確認します。

sudo lsof /data
sudo fuser -vm /data

マウント状態の確認: findmnt #

findmnt は現在のマウントツリーをきれいに見せてくれます。特定のポイントだけを見るには引数で渡します。

findmnt
findmnt /data

mount コマンドを引数なしで打つか df -h を使ってもマウント状況は見られますが、findmnt はオプションまではっきり見せてくれるので検証に向いています。

df -h /data

ここまでの mountメモリにのみ適用される一時マウント です。再起動すると消えます。RHCSA で失点しないためには、必ず次の段階である fstab 永続登録まで進む必要があります。

fstab で永続マウント #

/etc/fstab に 1 行登録すると、起動するたびに自動でマウントされます。fstab は空白で区切られた 6 つの欄で構成されます。

<デバイス>  <マウントポイント>  <タイプ>  <オプション>  <dump>  <fsck 順序>
意味
デバイスUUID・LABEL・デバイスパスのいずれか。UUID 推奨
マウントポイント付けるディレクトリ
タイプxfs・ext4・nfs など
オプションdefaultsnofail などのマウントオプション
dumpバックアップ表示。通常 0
fsck 順序起動時の検査順序。root は 1、残りは 0 または 2

デバイスパスの代わりに UUID を使う理由 #

/dev/sdb1 のようなデバイスパスは、ディスクの追加・削除によって変わることがあります。UUID はファイルシステムに固定されて変わらないので、fstab には UUID を使うのが安全です。UUID は lsblk -fblkid で確認します。

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 0

LV のように名前が安定している場合は、デバイスマッパーのパスをそのまま使っても問題ありません。

/dev/vg01/lv01  /data  xfs  defaults  0 0

LABEL で登録する #

ファイルシステムにラベルを付けておくと、fstab で LABEL= で参照できます。XFS は xfs_admin -L、ext4 は e2label でラベルを指定します。

sudo xfs_admin -L data /dev/vg01/lv01
sudo e2label /dev/vg01/lv02 logs
LABEL=data  /data  xfs   defaults  0 0
LABEL=logs  /logs  ext4  defaults  0 0

mount -a で検証する #

fstab を直したら、再起動する前に 必ず検証する必要があります。mount -a は fstab のすべての項目のうち、まだマウントされていないものをマウントします。エラーなく終わり、findmnt でマウントが見えれば成功です。

sudo mount -a
findmnt /data

エラーが出たら、fstab のその行にタイプミスがあるか、デバイス・オプションが間違っています。この場で捕まえることで起動失敗を防ぎます。

defaults オプションの意味 #

defaultsrw,suid,dev,exec,auto,nouser,async をまとめた標準オプションセットです。ほとんどの一般的なマウントには defaults だけで十分です。必要なら追加オプションをカンマで付け足します。

LABEL=data  /data  xfs  defaults,noexec  0 0

nofail: デバイスがなくても起動を止めない #

fstab に登録したデバイスが起動時点でないと、デフォルトの動作は 起動を止めて緊急モードに落ちること です。NFS や USB のように常に存在すると保証できないデバイスには nofail を与え、ないときに静かにスキップさせます。

LABEL=backup  /backup  xfs  defaults,nofail  0 0

nofail は「このマウントが失敗してもシステムの起動は続ける」という安全装置です。外部ストレージの項目には付けておくのがよいです。

NFS クライアントマウント #

NFS はネットワークの向こうのディレクトリを自分のシステムにマウントして、ローカルディレクトリのように使う方式です。RHCSA は クライアント側のマウント を主に問います。サーバー構成ではなく、与えられた NFS サーバーの共有を自分のシステムに付ける作業です。

クライアントパッケージ #

NFS クライアントツールは nfs-utils パッケージが提供します。通常はデフォルトでインストールされていますが、ない場合はインストールします。

sudo dnf install -y nfs-utils

showmount で共有を確認 #

サーバーがどのディレクトリを export しているかを showmount -e で確認します。

showmount -e nfs.example.com
Export 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/shared

fstab で永続マウント #

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/shared

AutoFS のオンデマンドマウント #

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.masterauto.misc) が大きな助けになります。

まとめ #

この記事で押さえたこと:

  • ファイルシステムの作成mkfs.xfs (標準) と mkfs.ext4、そして lsblk -fblkid でタイプと UUID を確認
  • マウントと解除mount で付けて umount で外し、findmnt で状態を検証。このマウントは一時的
  • fstab の永続マウント。UUID・LABEL で登録し、defaultsnofail オプションを活用し、mount -a で再起動前に検証
  • NFS クライアントshowmount -e で共有を確認、mount -t nfs で一時マウント、fstab に nfs_netdevnofail で永続登録
  • AutoFS。マスターマップとマップファイルでオンデマンドマウントを構成し、ワイルドカードマップで NFS ホームディレクトリを自動マウント

次へ — パッケージと repository #

ストレージとファイルシステムの領域を #5 からここまで仕上げました。ここからシステムにソフトウェアを載せる領域に移ります。

#8 パッケージと repository: dnf、modules、AppStream では、dnf でパッケージをインストール・検索・削除し、ローカルとリモートの repository を登録し、RHEL 9 の AppStream と module stream で同じソフトウェアの複数バージョンを扱う方法まで、直接打ち込みながら整理します。

X