RHEL 中級 #3 ストレージ深化 — Stratis、NFS、Samba

読了 10分

#2 で LVM により単一マシンのディスク運用を整理しました。この記事ではその上で動作する Stratis、Linux 同士の標準共有である NFS、そして Windows と互換のある Samba を扱います。1 マシンを越えて複数マシンが同じデータを一緒に使う方法を整理します。

RHEL 中級 シリーズでこの記事の位置:

Stratis — LVM の次の役割 #

基礎 #6 で押さえたとおり RHEL 8 から Stratis がストレージ管理の新しい選択肢として入りました。Stratis は新しいファイルシステムではなく LVM と XFS の上に乗せたマネージャー です。2 つのツールを直接扱うのではなく、1 つのコマンド群 (stratis) にまとめて thin provisioning とスナップショットを日常的に使えるようにしてくれます。

Stratis が上にある形
   ユーザーコマンド: stratis pool create / fs create / snapshot
                    ┌───────────────┐
                    │   stratisd    │   ← デーモン
                    └───────┬───────┘
                  ┌─────────┴─────────┐
                  │                   │
                  ▼                   ▼
            [device-mapper]      [thin pool / XFS]
                  │                   │
                  ▼                   ▼
              物理ディスク       ファイルシステム

Stratis の目標は、運用者が thin provisioningスナップショット を日常的に扱えるようにすることにあります。LVM を直接扱うと PV/VG/LV の 3 層を意識しなければなりませんが、Stratis は poolfilesystem の 2 つの概念だけで済みます。

インストールと有効化 #

インストール
$ sudo dnf install -y stratisd stratis-cli
$ sudo systemctl enable --now stratisd
$ sudo stratis daemon version
3.x.x

stratisd がバックグラウンドデーモン、stratis が私たちが叩く CLI です。

Pool を作る #

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          Data

LVM の PV/VG に該当する役割です。1 つの pool に複数のディスクを入れることができ、後から追加も可能です (stratis pool add-data)。

ファイルシステムを作る #

fs 生成
$ 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 自体が満杯になるまで 拡大できます。

マウント #

mount + pool UUID 確認
$ 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
/etc/fstab — Stratis 推奨オプション
/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  0

Stratis は起動時のマウントのために pool UUID 基準の systemd helper を使う必要があります。x-systemd.requires=stratis-fstab-setup@<pool-uuid>.servicex-systemd.after=stratis-fstab-setup@<pool-uuid>.service を付けなければならず、この設定があってこそ起動中のマウントが安定して上がります。

スナップショット #

スナップショット 1 行
$ 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 GiB

LVM の 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 サーバー  │                │  NFS クライアント│
   │  (exports)     │                │  (mount)        │
   ├────────────────┤                ├────────────────┤
   │ /var/nfs/share │ ─── network ─→ │ /mnt/share      │
   └────────────────┘                └────────────────┘

サーバーセットアップ #

NFS サーバーインストール / 有効化
$ 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 に共有定義を書きます。

/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ディレクトリツリー検証をスキップ — 推奨

変更後の適用:

exports を読み直す
$ sudo exportfs -rav
exporting 192.168.64.0/24:/var/nfs/share
exporting *:/var/nfs/ro

$ sudo exportfs -v       # 現在の export 一覧

ファイアウォール / SELinux #

firewalld
$ 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
SELinux boolean — NFS ディレクトリへの書き込み許可
$ sudo setsebool -P nfs_export_all_rw on

NFS は通常ディレクトリ権限と /etc/exports が中心で、SELinux は共有パターンに応じて追加調整が必要な場合があります。特定のディレクトリだけを export する基本構成は概ね追加設定なしで動作します。

クライアントからマウント #

手動 mount
$ 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:

/etc/fstab — NFS
192.168.64.10:/var/nfs/share  /mnt/share  nfs  defaults,_netdev,nofail  0  0

_netdev オプションが要点。ネットワークが上がってからマウントを試行 するように systemd に教えるオプションです。書かないと起動時にネットワークの前にマウントを試行して失敗します。

autofs — 必要なときだけマウント #

複数の NFS 共有を常にマウントしておくのは負担です。autofs は誰かがそのパスにアクセスしたときだけ自動でマウントし、一定時間使わないと自動で解除します。

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 バージョン #

バージョン特徴
NFSv3UDP ベース可能、ステートレス、古いシステム互換
NFSv4TCP のみ、ステートフル、セキュリティ / 性能改善 (RHEL 9 デフォルト)
NFSv4.2最新、サーバー側コピー (copy_file_range)、スパースファイルサポート

デフォルトは v4 ですが、互換のため v3 クライアントも受け入れます。明示的に強制したいなら mount -o vers=4.2 ...

Samba — Windows と互換のあるファイル共有 #

NFS は Linux 同士では良いですが Windows クライアントはうまく使えません。Windows の標準は SMB / CIFS、その Linux 実装が Samba です。

Samba インストール
$ sudo dnf install -y samba samba-client
$ sudo systemctl enable --now smb nmb

共有定義 — /etc/samba/smb.conf #

/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 onlyno なら書き込み可能
guest okyes なら非認証アクセスを許可
valid usersアクセス許可ユーザー一覧
browseableネットワーク探索で見えるか

Samba ユーザーを作る #

Linux ユーザーと Samba ユーザーは別物です。Linux ユーザーにマッピングされた Samba パスワードを別途設定しなければなりません。

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
SELinux
$ 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
firewalld
$ sudo firewall-cmd --permanent --add-service=samba
$ sudo firewall-cmd --reload

クライアントから接続 #

Windows から: エクスプローラーのアドレスバーに \\<server-ip>\share を入力 → ユーザー名 / パスワード入力。

Linux クライアントから: cifs-utils でマウント。

Linux で CIFS mount
$ 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 永続登録:

/etc/fstab — Samba
//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 どちらを? #

役割NFSSamba
Linux 同士✅ 標準可能
Windows クライアント制限的✅ 標準
設定の単純さユーザー管理が別途必要
Active Directory 連携制限的✅ 強力
性能 (大きなファイル)やや遅い
権限 / ACL 互換UNIX 基準Windows ACL フレンドリー

運用ガイドはシンプルです。Linux 同士は NFS、Windows クライアントが混じれば Samba。 両方を立ち上げて両側を受けるサーバーもよくあります。

AlmaLinux / Rocky の違い #

この記事のすべてのコマンドが そのまま動作します。Stratis は stratisdstratis-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.confmap to guest = bad user と共有定義の guest ok = yes の両方があってこそゲストアクセスが許可されます。

よく使うコマンド一覧 #

ツールコマンド
Stratisstratis pool create / list / add-data
Stratisstratis 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 一覧)
Sambasystemctl enable --now smb nmb
Sambatestparm (設定検証)
Sambasmbpasswd -a <user> (Samba ユーザー追加)
Sambapdbedit -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 まで整理します。

X