lvm でボリューム作るまでの一連の操作

たまにしかやらないからコマンド忘れるシリーズです。

まずパーティションを作ります。

# gdisk /dev/vdb
  • x エキスパートモードに切り替え。
  • n protective mbr を造る。
  • d セクタアラインメントを表示。(2048 になってるかな)
  • l セクタアラインメントを変更。 8 を入力。
    • Enter the sector alignment value (1-65536, default = 2048): 8
  • m エキスパートモードを抜ける。
  • n 新規パーティションを作成。今回はディスク丸ごと pv にする予定なのでほとんど default の値を使用してます。ただしパーティションタイプは 8e00 Linux LVM を選択する。
    • Partition number (1-128, default 1):
    • First sector (34-16777182, default = 40) or {+-}size{KMGTP}:
    • Last sector (40-16777182, default = 16777182) or {+-}size{KMGTP}:
    • Current type is 'Linux filesystem'
    • Hex code or GUID (L to show codes, Enter = 8300): 8e00
    • Changed type of partition to 'Linux LVM'
  • w 書き込んで終了

-M は lvm のメタデータのバージョン(1 | 2)を指定します。ちなみに -t を付けてテストするとすごくダメっぽいエラーが出力されますが、本番はあっさり通ります。

 # pvcreate -M2 /dev/vdb1
  Physical volume "/dev/vdb1" successfully created.
# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/vdb1       lvm2 ---  8.00g 8.00g

-M は pv と同じくメタデータのバージョンです。-s はエクステントサイズを指定するオプションで、今後 lv 作る時にはこのサイズのエクステントを何個割り当てるか……という考え方になります。要は最小単位のサイズです。1つの lv には最大で 65534 個のエクステントまでしか割り当てられないため、例えばデフォルトのエクステントサイズ 4MiB を指定した場合、1つの lv のサイズは最大 256GiB になります。用途にもよりますが、あんまり小さいサイズを指定しても制限がキツくなるだけなので、うちの環境ではちょっと大きめの値を指定するようにしています1)

そしてコマンドの末尾は <vg の名前> <使用する pv> と続きます。

# vgcreate -M2 -s 128m vg001 /dev/vdb1
  Volume group "vg001" successfully created
# vgs
  VG          #PV #LV #SN Attr   VSize VFree
  vg001         1   0   0 wz--n- 7.88g 7.88g

128MiB 以下の lv 作る要件はこのサーバーにはまず無いでしょう……という考え方で、できるだけ大きな値を指定した方が良い気がします。

-L でサイズ(今回は2GiB)、-n で lv の名前を指定して、最後に lv を作る先の vg を指定します。

# lvcreate -L2g -n lv001 vg001
  Logical volume "lv001" created.

ちなみにパフォーマンスを求めて物理的に連続した領域を確保したい場合は -Cy とか付けると良いみたいです。

-L はファイルシステムのラベルを指定します。なくても問題ありません。

# mkfs.ext4 -Lpostgres /dev/vg001/lv001
mke2fs 1.43.3 (04-Sep-2016)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 09904288-70b0-4a1c-80b8-af5116156663
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

ひととおり作りました。これでマウントして使うことができるようになります。

1)
あんまり細かいエクステントサイズにすると “遅い” なんてはなしも?
https://manimani.cc/lib/plugins/linkback/exe/trackback.php/wiki:linux:create_partition_pv_vg_lv