RHEL 中級 #3 ストレージ深化 — Stratis、NFS、Samba
#2 で LVM により単一マシンのディスク運用を整理しました。この記事ではその上で動作する Stratis、Linux 同士の標準共有である NFS、そして Windows と互換のある Samba を扱います。1 マシンを越えて複数マシンが同じデータを一緒に使う方法を整理します。
RHEL 中級 シリーズでこの記事の位置:
- #1 SELinux 入門 — Enforcing/Permissive、ラベル、トラブルシューティング
- #2 LVM — PV/VG/LV、スナップショット、拡張
- #3 ストレージ深化 — Stratis、NFS、Samba ← この記事
- #4 ネットワーキング — NetworkManager (nmcli)、bonding、teaming
- #5 ログ管理 — journald、rsyslog、log rotation
- #6 ジョブスケジューリング — cron、systemd timer、at
- #7 コンテナ入門 — Podman/Buildah/Skopeo (Docker との違い)
Stratis — LVM の次の役割 #
基礎 #6 で押さえたとおり RHEL 8 から Stratis がストレージ管理の新しい選択肢として入りました。Stratis は新しいファイルシステムではなく LVM と XFS の上に乗せたマネージャー です。2 つのツールを直接扱うのではなく、1 つのコマンド群 (stratis) にまとめて thin provisioning とスナップショットを日常的に使えるようにしてくれます。
ユーザーコマンド: stratis pool create / fs create / snapshot
│
▼
┌───────────────┐
│ stratisd │ ← デーモン
└───────┬───────┘
│
┌─────────┴─────────┐
│ │
▼ ▼
[device-mapper] [thin pool / XFS]
│ │
▼ ▼
物理ディスク ファイルシステムStratis の目標は、運用者が thin provisioning と スナップショット を日常的に扱えるようにすることにあります。LVM を直接扱うと PV/VG/LV の 3 層を意識しなければなりませんが、Stratis は pool と filesystem の 2 つの概念だけで済みます。
インストールと有効化 #
$ sudo dnf install -y stratisd stratis-cli
$ sudo systemctl enable --now stratisd
$ sudo stratis daemon version
3.x.xstratisd がバックグラウンドデーモン、stratis が私たちが叩く CLI です。
Pool を作る #
$ sudo stratis pool create data_pool /dev/vdb /dev/vdc
$ sudo stratis pool list
Name Total / Used / Free Properties
data_pool 30 GiB / 564 MiB / 29.4 GiB Cr,~Ca
$ sudo stratis blockdev list data_pool
Pool Name Device Node Physical Size Tier
data_pool /dev/vdb 20 GiB Data
data_pool /dev/vdc 10 GiB DataLVM の PV/VG に該当する役割です。1 つの pool に複数のディスクを入れることができ、後から追加も可能です (stratis pool add-data)。
ファイルシステムを作る #
$ sudo stratis filesystem create data_pool myfs
$ sudo stratis filesystem list
Pool Filesystem Total / Used / Free Created Device
data_pool myfs 1 TiB / 546 MiB / 1023 GiB Apr 18 ... /dev/stratis/data_pool/myfsここで興味深い点 — fs のサイズが 1 TiB に見えます。 実際の pool は 30 GiB なのにどうやって? これが thin provisioning です。Stratis は fs を作るときに仮想サイズを大きく取り、実使用に応じて pool から差し引きます。pool 自体が満杯になるまで 拡大できます。
マウント #
$ sudo mkdir -p /myfs
$ sudo mount /dev/stratis/data_pool/myfs /myfs
# 実際の /etc/fstab には pool UUID helper を使います。
$ sudo stratis pool list
Name Total / Used / Free Properties
data_pool 30 GiB / 564 MiB / 29.4 GiB Cr,~Ca/dev/stratis/data_pool/myfs /myfs xfs defaults,x-systemd.requires=stratis-fstab-setup@<pool-uuid>.service,x-systemd.after=stratis-fstab-setup@<pool-uuid>.service 0 0Stratis は起動時のマウントのために pool UUID 基準の systemd helper を使う必要があります。x-systemd.requires=stratis-fstab-setup@<pool-uuid>.service と x-systemd.after=stratis-fstab-setup@<pool-uuid>.service を付けなければならず、この設定があってこそ起動中のマウントが安定して上がります。
スナップショット #
$ sudo stratis filesystem snapshot data_pool myfs myfs_snap
$ sudo stratis filesystem list
Pool Filesystem ... Device
data_pool myfs ... /dev/stratis/data_pool/myfs
data_pool myfs_snap ... /dev/stratis/data_pool/myfs_snapスナップショットが新しい fs として作られて即座にマウント可能です。LVM の lvcreate -s よりずっと直感的です。
Pool 拡張 #
$ sudo stratis pool add-data data_pool /dev/vdd
$ sudo stratis pool list
Name Total / Used / Free ...
data_pool 40 GiB / 1.2 GiB / 38.8 GiBLVM の vgextend に該当。fs はすでに thin なので、自動で拡張されたプールを活用します。xfs_growfs を別途叩く必要がありません。
Stratis vs LVM どちらを? #
| 役割 | LVM 直接 | Stratis |
|---|---|---|
| 単一 fs / 安定性優先 | ✅ 運用標準 | 可能だが新ツール |
| Thin provisioning 日常化 | 可能だが複雑 | ✅ デフォルト |
| スナップショットを頻繁に取る | 可能だが手順多 | ✅ 1 行 |
| 複雑な RAID 構成 | ✅ raid5/6 など | 未サポート |
| RHEL 9 デフォルト | ✅ | 別途インストール |
| 自動化 / Ansible 統合 | ✅ 成熟 | 採用進行中 |
運用の デフォルト選択 は依然として LVM。Stratis は thin / スナップショットが日常になる役割 (コンテナホスト、仮想マシンディスクプール、ストレージワークステーション) で価値が大きいです。
2026 年現在 — Stratis 3.x が安定段階に入り、RHEL 9 / 10 両方でサポートされます。ただし運用の多くは依然として LVM 直接にとどまっています。新規システムを設計するならワークロードパターンに応じて選びます。
NFS — Linux 同士の標準ファイル共有 #
複数のサーバーに同じディレクトリを見せたいときに最もよく使うツール。1 つのマシンがディレクトリを export すると、別のマシンがそのディレクトリを mount して自分のファイルシステムのように使います。
┌────────────────┐ ┌────────────────┐
│ NFS サーバー │ │ NFS クライアント│
│ (exports) │ │ (mount) │
├────────────────┤ ├────────────────┤
│ /var/nfs/share │ ─── network ─→ │ /mnt/share │
└────────────────┘ └────────────────┘サーバーセットアップ #
$ sudo dnf install -y nfs-utils
$ sudo systemctl enable --now nfs-server
$ systemctl status nfs-server共有するディレクトリを作って権限を緩めます。
$ sudo mkdir -p /var/nfs/share
$ sudo chown nobody:nobody /var/nfs/share
$ sudo chmod 775 /var/nfs/share/etc/exports に共有定義を書きます。
# ディレクトリ クライアント(オプション)
/var/nfs/share 192.168.64.0/24(rw,sync,no_subtree_check)
/var/nfs/ro *(ro,sync,no_subtree_check)よく使うオプション:
| オプション | 意味 |
|---|---|
rw / ro | 読み書き / 読み込みのみ |
sync | 同期書き込み (安全、デフォルト) — 比較: async は速いが危険 |
no_root_squash | クライアントの root をサーバーの root にマッピング (セキュリティリスク、ほぼ使わない) |
root_squash | クライアントの root を nobody にマッピング (デフォルト) |
no_subtree_check | ディレクトリツリー検証をスキップ — 推奨 |
変更後の適用:
$ sudo exportfs -rav
exporting 192.168.64.0/24:/var/nfs/share
exporting *:/var/nfs/ro
$ sudo exportfs -v # 現在の export 一覧ファイアウォール / SELinux #
$ sudo firewall-cmd --permanent --add-service=nfs
$ sudo firewall-cmd --permanent --add-service=mountd
$ sudo firewall-cmd --permanent --add-service=rpc-bind
$ sudo firewall-cmd --reload$ sudo setsebool -P nfs_export_all_rw onNFS は通常ディレクトリ権限と /etc/exports が中心で、SELinux は共有パターンに応じて追加調整が必要な場合があります。特定のディレクトリだけを export する基本構成は概ね追加設定なしで動作します。
クライアントからマウント #
$ sudo dnf install -y nfs-utils
$ sudo mkdir -p /mnt/share
$ sudo mount -t nfs 192.168.64.10:/var/nfs/share /mnt/share
$ df -hT /mnt/share
Filesystem Type Size Used Avail Use% Mounted on
192.168.64.10:/var/nfs/share nfs4 20G 175M 20G 1% /mnt/share-t nfs は自動検出時には省略可能。永続マウントは /etc/fstab:
192.168.64.10:/var/nfs/share /mnt/share nfs defaults,_netdev,nofail 0 0_netdev オプションが要点。ネットワークが上がってからマウントを試行 するように systemd に教えるオプションです。書かないと起動時にネットワークの前にマウントを試行して失敗します。
autofs — 必要なときだけマウント #
複数の NFS 共有を常にマウントしておくのは負担です。autofs は誰かがそのパスにアクセスしたときだけ自動でマウントし、一定時間使わないと自動で解除します。
$ sudo dnf install -y autofs
# /etc/auto.master.d/share.autofs
/mnt/auto /etc/auto.share
# /etc/auto.share
share -fstype=nfs,rw 192.168.64.10:/var/nfs/share
$ sudo systemctl enable --now autofsこれで /mnt/auto/share にアクセスする瞬間に自動で NFS マウントが起こります。デスクトップ / 多数サーバー環境でよく使います。
NFS バージョン #
| バージョン | 特徴 |
|---|---|
| NFSv3 | UDP ベース可能、ステートレス、古いシステム互換 |
| NFSv4 | TCP のみ、ステートフル、セキュリティ / 性能改善 (RHEL 9 デフォルト) |
| NFSv4.2 | 最新、サーバー側コピー (copy_file_range)、スパースファイルサポート |
デフォルトは v4 ですが、互換のため v3 クライアントも受け入れます。明示的に強制したいなら mount -o vers=4.2 ...。
Samba — Windows と互換のあるファイル共有 #
NFS は Linux 同士では良いですが Windows クライアントはうまく使えません。Windows の標準は SMB / CIFS、その Linux 実装が Samba です。
$ sudo dnf install -y samba samba-client
$ sudo systemctl enable --now smb nmb共有定義 — /etc/samba/smb.conf
#
[global]
workgroup = WORKGROUP
server string = RHEL 9 Samba
security = user
map to guest = bad user
netbios name = RHEL9LAB
[share]
comment = Shared folder
path = /var/samba/share
browseable = yes
read only = no
guest ok = no
valid users = curtis, aliceよく使うオプション:
| オプション | 意味 |
|---|---|
path | 共有するディレクトリ |
read only | no なら書き込み可能 |
guest ok | yes なら非認証アクセスを許可 |
valid users | アクセス許可ユーザー一覧 |
browseable | ネットワーク探索で見えるか |
Samba ユーザーを作る #
Linux ユーザーと Samba ユーザーは別物です。Linux ユーザーにマッピングされた Samba パスワードを別途設定しなければなりません。
$ sudo useradd -s /sbin/nologin curtis # すでにあれば省略
$ sudo smbpasswd -a curtis
New SMB password: ...
Retype new SMB password: ...
$ sudo pdbedit -L # 登録済み Samba ユーザー一覧
curtis:1000:Curtis Kimディレクトリ / SELinux / ファイアウォール #
$ sudo mkdir -p /var/samba/share
$ sudo chown -R curtis:curtis /var/samba/share
$ sudo chmod 770 /var/samba/share$ sudo semanage fcontext -a -t samba_share_t "/var/samba/share(/.*)?"
$ sudo restorecon -Rv /var/samba/share
$ sudo setsebool -P samba_export_all_rw on$ sudo firewall-cmd --permanent --add-service=samba
$ sudo firewall-cmd --reloadクライアントから接続 #
Windows から: エクスプローラーのアドレスバーに \\<server-ip>\share を入力 → ユーザー名 / パスワード入力。
Linux クライアントから: cifs-utils でマウント。
$ sudo dnf install -y cifs-utils
$ sudo mkdir -p /mnt/smbshare
$ sudo mount -t cifs //192.168.64.10/share /mnt/smbshare \
-o username=curtis,uid=$(id -u),gid=$(id -g)/etc/fstab 永続登録:
//192.168.64.10/share /mnt/smbshare cifs credentials=/root/.smbcreds,_netdev,nofail 0 0/root/.smbcreds に認証情報を分けて保存 (username=curtis / password=...)、モード 600。
testparm で設定検証 #
$ sudo testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE
...
[global]
...
[share]
...文法エラーや衝突を即座に捕まえてくれます。設定変更後は必ず testparm を一度回して適用します。
NFS vs Samba どちらを? #
| 役割 | NFS | Samba |
|---|---|---|
| Linux 同士 | ✅ 標準 | 可能 |
| Windows クライアント | 制限的 | ✅ 標準 |
| 設定の単純さ | ✅ | ユーザー管理が別途必要 |
| Active Directory 連携 | 制限的 | ✅ 強力 |
| 性能 (大きなファイル) | ✅ | やや遅い |
| 権限 / ACL 互換 | UNIX 基準 | Windows ACL フレンドリー |
運用ガイドはシンプルです。Linux 同士は NFS、Windows クライアントが混じれば Samba。 両方を立ち上げて両側を受けるサーバーもよくあります。
AlmaLinux / Rocky の違い #
この記事のすべてのコマンドが そのまま動作します。Stratis は stratisd と stratis-cli パッケージで、NFS と Samba は RHEL デフォルトパッケージで使えます。
よく出会う落とし穴 #
「NFS クライアントで権限拒否」 #
サーバーのディレクトリ権限がロックされているか、exports のオプション (ro / root_squash) のせいです。サーバーで ls -ld <dir> と cat /etc/exports を一緒に見てください。
「stratisd が立ち上がっていないのに起動が止まる」 #
/etc/fstab に pool UUID 用の helper オプションを書いていない場合です。このオプションがないと systemd が Stratis 準備の前にマウントを試行します。
「Samba 接続時にパスワードが違うと出る」 #
smbpasswd -a で Samba パスワードを別途設定したか確認。Linux パスワードとは別です。
「ファイアウォールは開けたのに NFS マウントを拒否」 #
mountd / rpc-bind まで一緒に開ける必要があります。firewall-cmd --add-service=nfs だけでは不足です。
「Windows から Samba 共有に空のユーザー名でアクセスしようとして拒否」 #
smb.conf の map to guest = bad user と共有定義の guest ok = yes の両方があってこそゲストアクセスが許可されます。
よく使うコマンド一覧 #
| ツール | コマンド |
|---|---|
| Stratis | stratis pool create / list / add-data |
| Stratis | stratis filesystem create / snapshot / list |
| NFS サーバー | systemctl enable --now nfs-server |
| NFS サーバー | exportfs -rav (exports 適用) |
| NFS サーバー | exportfs -v (現在の export 一覧) |
| NFS クライアント | mount -t nfs <server>:<path> <mount> |
| NFS クライアント | showmount -e <server> (サーバーの export 一覧) |
| Samba | systemctl enable --now smb nmb |
| Samba | testparm (設定検証) |
| Samba | smbpasswd -a <user> (Samba ユーザー追加) |
| Samba | pdbedit -L (Samba ユーザー一覧) |
| CIFS クライアント | mount -t cifs //<server>/<share> <mount> |
まとめ #
この記事で扱ったフロー:
- Stratis は LVM + XFS の上に乗せたマネージャー。pool / filesystem の 2 つの概念で thin provisioning とスナップショットを簡単に扱えます。新しいワークステーションやコンテナホストで特に有用。
- NFS は Linux 同士の標準。サーバー
/etc/exports+exportfs -rav、クライアントmount -t nfs。_netdevオプション を忘れないこと。 - autofs は必要なときだけマウントして多重共有の負担を減らす。
- Samba は Windows 互換。Linux ユーザーとは別の Samba ユーザー (
smbpasswd -a) が必要で、testparmで常に検証。 - 運用ガイド — Linux 同士は NFS、Windows が混じれば Samba。
次 — ネットワーキング #
ストレージを整理したら、次はその上をつなぐネットワークを見る番です。RHEL 9 のネットワーキングの標準は NetworkManager です。
#4 ネットワーキング — NetworkManager (nmcli)、bonding、teaming では、NetworkManager の動作モデル、nmcli で静的 IP / DNS / ゲートウェイを設定するフロー、2 つの NIC を束ねて障害に備える bonding、そして仮想マシン・コンテナネットワークの基盤である bridge まで整理します。