LVMでディスク追加してOSから使用できるようにするまでの設定

物理的にディスクを追加しておく

まず、物理サーバであれば、物理的に追加用のディスクを接続しておきます。仮想サーバであれば、管理コンソールより新規ディスクを追加しておきます。(追加手順についてはここでは割愛します)

その前提で、fdiskコマンドを実行して、追加したディスクがOSから参照できることを確認します。

# fdisk -l
ディスク /dev/sda: 20 GiB, 21474836480 バイト, 41943040 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x8f271ec5

デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/sda1  *        2048  2099199  2097152     1G 83 Linux
/dev/sda2        2099200 41943039 39843840    19G 8e Linux LVM

ディスク /dev/sdb: 3 GiB, 3221225472 バイト, 6291456 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

ディスク /dev/mapper/almalinux-root: 17 GiB, 18249416704 バイト, 35643392 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

ディスク /dev/mapper/almalinux-swap: 2 GiB, 2147483648 バイト, 4194304 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

今回、追加したディスクは、/dev/sdb で、容量は3GBあることが確認できます。

ラベルの割り当て

追加したディスクにラベルを割り当てします。fdiskコマンドでディスクを指定して実行します。パーティションのタイプは、Linux LVMにします。

# fdisk /dev/sdb

fdisk (util-linux 2.32.1) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。

デバイスには認識可能なパーティション情報が含まれていません。
新しい DOS ディスクラベルを作成しました。識別子は 0x8b88bd1c です。

コマンド (m でヘルプ): p
ディスク /dev/sdb: 3 GiB, 3221225472 バイト, 6291456 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x8b88bd1c

コマンド (m でヘルプ): n
パーティションタイプ
   p   基本パーティション (0 プライマリ, 0 拡張, 4 空き)
   e   拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p
パーティション番号 (1-4, 既定値 1):
最初のセクタ (2048-6291455, 既定値 2048):
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-6291455, 既定値 6291455):

新しいパーティション 1 をタイプ Linux、サイズ 3 GiB で作成しました。

コマンド (m でヘルプ): t
パーティション 1 を選択
16 進数コード (L で利用可能なコードを一覧表示します): 8e
パーティションのタイプを 'Linux' から 'Linux LVM' に変更しました。

コマンド (m でヘルプ): w

パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。

ここでラベルが追加されたか確認します。

# fdisk -l
ディスク /dev/sda: 20 GiB, 21474836480 バイト, 41943040 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x8f271ec5

デバイス   起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/sda1  *        2048  2099199  2097152     1G 83 Linux
/dev/sda2        2099200 41943039 39843840    19G 8e Linux LVM

ディスク /dev/sdb: 3 GiB, 3221225472 バイト, 6291456 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x8b88bd1c

デバイス   起動 開始位置 終了位置  セクタ サイズ Id タイプ
/dev/sdb1           2048  6291455 6289408     3G 8e Linux LVM

(以下略)

/dev/sda1として、Linux LVMとして認識されていることが確認できます。

物理ボリュームへ反映

まず現在の物理ボリュームを確認します。

# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               almalinux
  PV Size               <19.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4863
  Free PE               0
  Allocated PE          4863
  PV UUID               MNSWJH-eC1J-NcBS-mLSy-LMLi-YPMu-J33eOG

次のコマンドで、物理ボリュームを作成します。

# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.

ボリュームの作成に成功しましたら、確認します。

# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               almalinux
  PV Size               <19.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4863
  Free PE               0
  Allocated PE          4863
  PV UUID               MNSWJH-eC1J-NcBS-mLSy-LMLi-YPMu-J33eOG

  "/dev/sdb1" is a new physical volume of "<3.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               <3.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               ebEtlo-gJXJ-Madj-UcrW-G6n9-ImtP-OC9AkR

/dev/sdb1が追加されたことが確認できました。

VG(Volume Group)の作成

ボリュームグループを作成します。ここでは、「home」という名前にしました。

# vgcreate home /dev/sdb1
  Volume group "home" successfully created

LV(Logical Volume)作成

次に論理ボリュームを作成します。ここでは、「homedir」という名前で、容量は最大容量の3GBを指定しました。

# lvcreate -n homedir --size 3G home
  Volume group "home" has insufficient free space (767 extents): 768 required.

すると、スペースが足りない旨のエラーが出ました。ですので、容量を少し減らして、2.9GBに指定して再度コマンドを実行しました。

# lvcreate -n homedir --size 2.9G home
  Rounding up size to full physical extent 2.90 GiB
  Logical volume "homedir" created.

今後は問題なく作成できましたので、確認を行います。

# lvdisplay
  --- Logical volume ---
  LV Path                /dev/home/homedir
  LV Name                homedir
  VG Name                home
  LV UUID                kruqsq-l9S8-XABd-9Y4l-tvx6-FBD4-HvpBTq
  LV Write Access        read/write
  LV Creation host, time vhost01, 2024-05-05 23:06:16 +0900
  LV Status              available
  # open                 0
  LV Size                2.90 GiB
  Current LE             743
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

 (以下略)

作成したLV領域をファイルシステムxfsでフォーマットします。

# mkfs.xfs /dev/home/homedir
meta-data=/dev/home/homedir      isize=512    agcount=4, agsize=190208 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=760832, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

OSで使用できるようにマウントする

最後にOSで使用できるようにしていきます。

今回は /home にしようと新たなディスクを追加したので、もともと/homeにあるファイルを別領域(ここでは、/tmp/home.mv)にいったん退避したのち、/homeを作成して、今回追加した領域を/homeにマウントして、もともとのファイルを移動させます。最後にhome.mvを削除しています。

# mv /home /tmp/home.mv
# mkdir /home
# mount /dev/home/homedir /home
# mv /tmp/home.mv/* /home/
# rmdir /tmp/home.mv/

ここで、いったん確認を行います。

# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 962M 0 962M 0% /dev
tmpfs 980M 0 980M 0% /dev/shm
tmpfs 980M 17M 963M 2% /run
tmpfs 980M 0 980M 0% /sys/fs/cgroup
/dev/mapper/almalinux-root 17G 6.4G 11G 38% /
/dev/sda1 1014M 240M 775M 24% /boot
tmpfs 196M 0 196M 0% /run/user/0
/dev/mapper/home-homedir 2.9G 54M 2.9G 2% /home

最後の行に、/homeがマウントされていることが確認できます。このままではOSを再起動すると、マウントが外れてしまいますので、fstabに記載します。

# cp -p /etc/fstab /etc/fstab.org
# vi /etc/fstab
# diff /etc/fstab /etc/fstab.org
15d14
< /dev/mapper/home-homedir /home xfs defaults 0 0

OSを再起動して、問題なくマウントされているか確認しましょう。

# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 962M 0 962M 0% /dev
tmpfs 980M 0 980M 0% /dev/shm
tmpfs 980M 8.5M 971M 1% /run
tmpfs 980M 0 980M 0% /sys/fs/cgroup
/dev/mapper/almalinux-root 17G 6.4G 11G 38% /
/dev/sda1 1014M 240M 775M 24% /boot
/dev/mapper/home-homedir 2.9G 54M 2.9G 2% /home
tmpfs 196M 0 196M 0% /run/user/0

今回はここまでです。最後までお読みいただきありがとうございました。