TT Lab
はじめる
学ぶ 学習パス コース

LFCS — Linux Foundation認定システム管理者

LVM から autofs まで — ストレージを手で作る

TT Labで続きを見る

目標

ループデバイス2つの上にLVMを構築し、ext4をUUIDでfstabに登録し、オンラインで拡張し、スワップファイルを有効にし、同じVMの中でNFSサーバーとautofsクライアントを構成したあと、iostat・vmstatで指標を残します。すべて本当にマウントされます。

なぜ重要なのか

LFCSのStorageドメイン(20%)は、Podでは1行もできませんでした。pvcreateもmountも、capabilityがなくて塞がれます。このラボはUbuntu 24.04のVMで、rootで動作します。その代わり、空きディスクはありません。スクラッチディスクは、プラットフォームがすでにext4でフォーマットして取り付けているので、ファイルをブロックデバイスのように見せるループデバイス(losetup)から始めます。実務でディスクなしにLVMやRAIDを試すときに使う、まさにその方法です。

3つが、このラボの骨格です。1つ目、LVMはPV → VG → LVの3つの層で、拡張は2つの層で別々に起こります(lvextendのあとにresize2fs)。2つ目、fstabには、デバイス名ではなくUUIDを書きます。デバイスの順序は、起動のたびに変わることがあります。3つ目、設定ファイルを変更することと、デーモンがそれを知ることは別です(exportfs -ra、systemctl restart autofs)。

セッションは60分で始まり、最大180分まで延長でき、VMはセッションが終わると消えます。

ステップ

  1. /var/lib/lfcs/disk1.imgと/var/lib/lfcs/disk2.imgを、それぞれ1GiBのサイズで作成し(スパースファイルでかまいません)、どちらもループデバイスとして取り付けてください。取り付けたあと、losetup -aの出力を/root/lfcs/storage/loop.txtに保存してください。
  2. 2つのループデバイスをLVMの物理ボリューム(PV)として初期化し、2つを合わせてボリュームグループvg_lfcsを作成してください。
  3. vg_lfcsから600MiBの論理ボリュームlv_dataを作成し、ext4でフォーマットしてください。
  4. lv_dataを/srv/dataにマウントし、再起動後も取り付けられるように、/etc/fstabにUUID= で始まる行(タイプext4、オプションdefaults、dump 0、pass 2)を追加してください。findmnt --verifyで、fstabにエラーがない必要があります。
  5. lv_dataを300MiB追加で拡張し(合計900MiB以上)、マウントを外さないまま、ext4ファイルシステムも一緒に大きくしてください。dfで見た/srv/dataのサイズが大きくなっている必要があります。
  6. /var/swap/lfcs.swapを256MiBのスワップファイルとして作成して、有効にしてください。権限は600である必要があり、/etc/fstabに、再起動後も有効になるように行(タイプswap)を追加してください。
  7. /srv/shareをNFSでエクスポートします。ただし、127.0.0.1にだけ許可してください(オプションrw,sync,no_subtree_check)。/srv/share/hello.txtに任意の内容を書き、その共有を/mnt/shareにNFSでマウントして、同じファイルが見えるようにしてください。
  8. 同じ共有を、autofsがアクセスした瞬間に取り付けるようにしてください。マスターマップ/etc/auto.master.d/lfcs.autofsで/nfsをマップ/etc/auto.lfcsに接続し、そのマップに、キーshareが127.0.0.1:/srv/shareをnfs4で指すように書いてください。autofsを再起動したあと、ls /nfs/shareがhello.txtを表示する必要があります。(サーバーが自分自身の場合、autofsはNFSの代わりにbindで取り付けます。findmnt /nfs/shareのSOURCEが[/srv/share]と表示されても、正常です。)
  9. iostat -dxk 1 3の出力を/root/lfcs/storage/iostat.txtに、vmstat 1 3の出力を/root/lfcs/storage/vmstat.txtに保存してください。そして、/root/lfcs/storage/summary.txtを4行で作成してください: VG=vg_lfcs、PVS=<vg_lfcs 의 PV 개수>、LV_MB=<lv_data 의 크기(MiB, 정수)>、SWAP=<켜져 있는 스왑 파일 경로>(プレースホルダーは順に、vg_lfcsのPVの数、整数で表したlv_dataのMiB単位のサイズ、有効になっているスワップファイルのパスです)。

参考

ループデバイスを2つ作る

/var/lib/lfcs/disk1.imgと/var/lib/lfcs/disk2.imgを、それぞれ1GiBのサイズで作成し(スパースファイルでかまいません)、どちらもループデバイスとして取り付けてください。取り付けたあと、losetup -aの出力を/root/lfcs/storage/loop.txtに保存してください。

truncate -sでスパースファイルを作れます。ループ番号はsnapがすでにいくつか使っているので、固定せず、空いているものを受け取ってください(losetup -f --show)。

PV 2つでVGを作る

2つのループデバイスをLVMの物理ボリューム(PV)として初期化し、2つを合わせてボリュームグループvg_lfcsを作成してください。

pvcreateはデバイスごとに、vgcreateはVG名の後ろにデバイスを並べます。どのループデバイスかは、losetup -j <ファイル>で見つけ直せます。

LVを切り出してext4でフォーマット

vg_lfcsから600MiBの論理ボリュームlv_dataを作成し、ext4でフォーマットしてください。

lvcreateの-Lでサイズ、-nで名前を指定します。デバイスパスは、/dev//または/dev/mapper/-の2通りで見えます。

マウントしてfstabにUUIDで書く

lv_dataを/srv/dataにマウントし、再起動後も取り付けられるように、/etc/fstabにUUID= で始まる行(タイプext4、オプションdefaults、dump 0、pass 2)を追加してください。findmnt --verifyで、fstabにエラーがない必要があります。

UUIDはblkidで確認します。デバイスパス(/dev/loopN)は起動のたびに変わることがあるので、fstabに書いてはいけません。書いたあと、systemctl daemon-reloadとmount -aで、fstabの行自体が動作するかを確認してください。

オンラインでLVとファイルシステムを拡張

lv_dataを300MiB追加で拡張し(合計900MiB以上)、マウントを外さないまま、ext4ファイルシステムも一緒に大きくしてください。dfで見た/srv/dataのサイズが大きくなっている必要があります。

lvextend -L +300MでLVを拡張しても、ファイルシステムは知りません。resize2fsを別に実行するか、lvextendに-rを付けないと、dfが変わりません。

スワップファイルを作って有効にする

/var/swap/lfcs.swapを256MiBのスワップファイルとして作成して、有効にしてください。権限は600である必要があり、/etc/fstabに、再起動後も有効になるように行(タイプswap)を追加してください。

fallocateまたはddでファイルを作り、chmod 600 → mkswap → swaponの順序です。swapon --showで有効になったかを見ます。fstabの行は6つのフィールドで、マウントポイントの位置はnone、タイプはswapです(例: /var/swap/sample.swap none swap sw 0 0)。

ローカルNFSサーバーでエクスポートしてマウント

/srv/shareをNFSでエクスポートします。ただし、127.0.0.1にだけ許可してください(オプションrw,sync,no_subtree_check)。/srv/share/hello.txtに任意の内容を書き、その共有を/mnt/shareにNFSでマウントして、同じファイルが見えるようにしてください。

/etc/exportsの1行 → exportfs -ra → mount -t nfs4 127.0.0.1:/srv/share /mnt/shareの順序です。exportfs -vで実際にエクスポートされたかを確認してください。ファイルを変更しただけでは、サーバーは知りません。

autofsでアクセスしたときに取り付ける

同じ共有を、autofsがアクセスした瞬間に取り付けるようにしてください。マスターマップ/etc/auto.master.d/lfcs.autofsで/nfsをマップ/etc/auto.lfcsに接続し、そのマップに、キーshareが127.0.0.1:/srv/shareをnfs4で指すように書いてください。autofsを再起動したあと、ls /nfs/shareがhello.txtを表示する必要があります。(サーバーが自分自身の場合、autofsはNFSの代わりにbindで取り付けます。findmnt /nfs/shareのSOURCEが[/srv/share]と表示されても、正常です。)

マスターマップの行は「マウントポイント マップファイル」、マップの行は「キー -fstype=nfs4 サーバー:/パス」です。マップを変更したあと、systemctl restart autofsを忘れると、/nfsはただの空のディレクトリです。

iostat・vmstatで性能指標を残す

iostat -dxk 1 3の出力を/root/lfcs/storage/iostat.txtに、vmstat 1 3の出力を/root/lfcs/storage/vmstat.txtに保存してください。そして、/root/lfcs/storage/summary.txtを4行で作成してください: VG=vg_lfcs、PVS=<vg_lfcs 의 PV 개수>、LV_MB=<lv_data 의 크기(MiB, 정수)>、SWAP=<켜져 있는 스왑 파일 경로>(プレースホルダーは順に、vg_lfcsのPVの数、整数で表したlv_dataのMiB単位のサイズ、有効になっているスワップファイルのパスです)。

iostatはsysstatパッケージにあります。最初のサンプルは起動後の累積値なので、3回取得します。値は手で書かずに、vgs・lvs --units m --nosuffix・swapon --showから取り出してください。