kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

LVMでPVディスク名が変わった場合、ボリュームはどうなるのか?

ちょっと疑問に思ったので試してみた。例えばこういう状況があって、

  • /dev/sda
    • ローカルディスク(LVM)
  • /dev/sdb
    • ローカルディスク(LVM)
  • /dev/sdc
    • ローカルディスク(LVM)
  • /dev/sdd
    • ローカルディスク(非LVM)
  • /dev/sde
    • ローカルディスク(非LVM)

ここにディスクを追加してLVMに参加させる

  • /dev/sda
    • ローカルディスク(LVM)
  • /dev/sdb
    • ローカルディスク(LVM)
  • /dev/sdc
    • ローカルディスク(LVM)
  • /dev/sdd
    • ローカルディスク(非LVM)
  • /dev/sde
    • ローカルディスク(非LVM)
  • /dev/sdf
    • ローカルディスク(LVM)

そして、途中にある非LVMな/dev/sdd, /dev/sdeを取り除いて再起動する。再起動後のディスク名はこうなるはず。

  • /dev/sda
    • ローカルディスク(LVM)
  • /dev/sdb
    • ローカルディスク(LVM)
  • /dev/sdc
    • ローカルディスク(LVM)
  • /dev/sdd
    • ローカルディスク(LVM)

こうなった場合、LVMはどうなるのだろうか?という話。

やってみる

  • VirtualBox
  • Ubuntu 18.04LTS
  • インストール時にLVMを有効化
  • ディスクを2本追加してSATAコントローラに接続

こういう状態

# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               965M     0  965M   0% /dev
tmpfs                              200M  760K  199M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   19G  3.7G   14G  21% /
tmpfs                              997M     0  997M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              997M     0  997M   0% /sys/fs/cgroup
/dev/sda2                          976M   80M  830M   9% /boot
tmpfs                              200M     0  200M   0% /run/user/1000

# fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B69B2A9B-16EA-41DE-8A34-E46EB4477426

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 41940991 39839744  19G Linux filesystem


Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 19 GiB, 20396900352 bytes, 39837696 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

インストーラでは/dev/sda3を使ってLVMボリュームが構成されている。/dev/sdbと/dev/sdcが新たに追加したディスク。こいつを普通にLVMに参加させるのはとてもかんたん。

まずパーティションを切る。

# parted /dev/sdb -s mklabel gpt
# parted /dev/sdb -s mkpart primary ext4 0% 100%
# parted /dev/sdb -s set 1 lvm on

# parted /dev/sdc -s mklabel gpt
# parted /dev/sdc -s mkpart primary ext4 0% 100%
# parted /dev/sdc -s set 1 lvm on

PV作成

# pvs -v
    Wiping internal VG cache
    Wiping cache of LVM-capable devices
  PV         VG        Fmt  Attr PSize   PFree   DevSize PV UUID
  /dev/sda3  ubuntu-vg lvm2 a--  <19.00g      0  <19.00g eE0Pw0-XSAw-E170-zwpF-wAJH-i8d8-88Gj5W

# pvcreate /dev/sdb1
# pvcreate /dev/sdc1

# pvs -v
    Wiping internal VG cache
    Wiping cache of LVM-capable devices
  PV         VG        Fmt  Attr PSize   PFree   DevSize PV UUID
  /dev/sda3  ubuntu-vg lvm2 a--  <19.00g      0  <19.00g eE0Pw0-XSAw-E170-zwpF-wAJH-i8d8-88Gj5W
  /dev/sdb1            lvm2 ---  <10.00g <10.00g <10.00g fovUGe-k8ab-Ff55-KHO8-SfKc-qPnG-kQ2TmB
  /dev/sdc1            lvm2 ---  <10.00g <10.00g <10.00g vltXDY-QR0h-eq52-Q6mj-SW39-Cn1M-Hn22Sc

VGにPVを追加

# vgs -v
  VG        Attr   Ext   #PV #LV #SN VSize   VFree VG UUID                                VProfile
  ubuntu-vg wz--n- 4.00m   1   1   0 <19.00g    0  bdUp1Q-y1ED-3fKi-KuSJ-ksRt-t6Il-FXRBeb

# vgextend ubuntu-vg  /dev/sdb1
# vgextend ubuntu-vg  /dev/sdc1

# vgs -v
  VG        Attr   Ext   #PV #LV #SN VSize   VFree  VG UUID                                VProfile
  ubuntu-vg wz--n- 4.00m   3   1   0 <38.99g 19.99g bdUp1Q-y1ED-3fKi-KuSJ-ksRt-t6Il-FXRBeb

LVを拡張

# lvs -v
  LV        VG        #Seg Attr       LSize   Maj Min KMaj KMin Pool Origin Data%  Meta%  Move Cpy%Sync Log Convert LV UUID                                LProfile
  ubuntu-lv ubuntu-vg    1 -wi-ao---- <19.00g  -1  -1  253    0                                                     hAfmud-82vu-xhHd-mnTB-mfXP-2lqW-RDl1I2

# lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

# lvs -v
  LV        VG        #Seg Attr       LSize   Maj Min KMaj KMin Pool Origin Data%  Meta%  Move Cpy%Sync Log Convert LV UUID                                LProfile
  ubuntu-lv ubuntu-vg    3 -wi-ao---- <38.99g  -1  -1  253    0                                                     hAfmud-82vu-xhHd-mnTB-mfXP-2lqW-RDl1I2

ファイルシステムを拡張

# resize2fs /dev/ubuntu-vg/ubuntu-lv

# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               965M     0  965M   0% /dev
tmpfs                              200M  760K  199M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   39G  3.7G   33G  11% /    ★19GBから39GBに増えている
tmpfs                              997M     0  997M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              997M     0  997M   0% /sys/fs/cgroup
/dev/sda2                          976M   80M  830M   9% /boot
tmpfs                              200M     0  200M   0% /run/user/1000

問題なし。

でここに非LVMなディスクを2本追加することとする。

Disk /dev/sdd: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sde: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

順番にディスク名が振られていることがわかる。

では、改めてLVMを拡張するためにディスクを追加する。

Disk /dev/sdf: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

続けてsdfとして認識されている。ではこいつをLVMに参加させる。

# parted /dev/sdf -s mklabel gpt
# parted /dev/sdf -s mkpart primary ext4 0% 100%
# parted /dev/sdf -s set 1 lvm on

# pvcreate /dev/sdf1

# vgextend ubuntu-vg  /dev/sdf1

# lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

# resize2fs /dev/ubuntu-vg/ubuntu-lv

# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               965M     0  965M   0% /dev
tmpfs                              200M  776K  199M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   49G  3.8G   43G   9% /  ★さらに10GB増えてる
tmpfs                              997M     0  997M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              997M     0  997M   0% /sys/fs/cgroup
/dev/sda2                          976M   80M  830M   9% /boot
tmpfs                              200M     0  200M   0% /run/user/1000

ではPVがいなくなったと想定して、/dev/sddと/dev/sdeをVirtualBoxマネージャーから取り除いてやる。

f:id:kun432:20210715025220p:plain

3と4がないのがわかると思う。ではこの状態でrebootしてみる。どうなるか?

$ sudo fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B69B2A9B-16EA-41DE-8A34-E46EB4477426

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 41940991 39839744  19G Linux filesystem


Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AB3F4A27-6E98-49C5-9837-B6F902D930B5

Device     Start      End  Sectors Size Type
/dev/sdb1   2048 20969471 20967424  10G Linux LVM


Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 57BDD116-BEB8-402E-8832-882DD1345CA8

Device     Start      End  Sectors Size Type
/dev/sdc1   2048 20969471 20967424  10G Linux LVM


Disk /dev/sdd: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: CA56E550-1BDE-48FA-9503-0F3549DEC04F

Device     Start      End  Sectors Size Type
/dev/sdd1   2048 20969471 20967424  10G Linux LVM


Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 49 GiB, 52596572160 bytes, 102727680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

/dev/sdfだったディスクは/dev/sddとして認識されている。

$ sudo vgdisplay -v
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               48.98 GiB
  PE Size               4.00 MiB
  Total PE              12540
  Alloc PE / Size       12540 / 48.98 GiB
  Free  PE / Size       0 / 0
  VG UUID               bdUp1Q-y1ED-3fKi-KuSJ-ksRt-t6Il-FXRBeb

  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                hAfmud-82vu-xhHd-mnTB-mfXP-2lqW-RDl1I2
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2021-07-14 16:02:56 +0000
  LV Status              available
  # open                 1
  LV Size                48.98 GiB
  Current LE             12540
  Segments               4
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Physical volumes ---
  PV Name               /dev/sda3
  PV UUID               eE0Pw0-XSAw-E170-zwpF-wAJH-i8d8-88Gj5W
  PV Status             allocatable
  Total PE / Free PE    4863 / 0

  PV Name               /dev/sdb1
  PV UUID               fovUGe-k8ab-Ff55-KHO8-SfKc-qPnG-kQ2TmB
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

  PV Name               /dev/sdc1
  PV UUID               vltXDY-QR0h-eq52-Q6mj-SW39-Cn1M-Hn22Sc
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

  PV Name               /dev/sdd1
  PV UUID               0L1Rfr-ve3M-OcP4-1kIG-coUi-R3fX-j0oZ3W
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

普通にディスク名の順序が詰められて認識されていて、LVM的にはなんの問題もなかった。

今度はさきほど取り外したディスクを追加して起動してみる。fdiskでみてみると、

Disk /dev/sdd: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sde: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdf: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: CA56E550-1BDE-48FA-9503-0F3549DEC04F

もとに戻ってる。vgdisplayでも見てみたけどなんの問題もなかった。

$ sudo vgdisplay -v
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               48.98 GiB
  PE Size               4.00 MiB
  Total PE              12540
  Alloc PE / Size       12540 / 48.98 GiB
  Free  PE / Size       0 / 0
  VG UUID               bdUp1Q-y1ED-3fKi-KuSJ-ksRt-t6Il-FXRBeb

  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                hAfmud-82vu-xhHd-mnTB-mfXP-2lqW-RDl1I2
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2021-07-14 16:02:56 +0000
  LV Status              available
  # open                 1
  LV Size                48.98 GiB
  Current LE             12540
  Segments               4
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Physical volumes ---
  PV Name               /dev/sda3
  PV UUID               eE0Pw0-XSAw-E170-zwpF-wAJH-i8d8-88Gj5W
  PV Status             allocatable
  Total PE / Free PE    4863 / 0

  PV Name               /dev/sdb1
  PV UUID               fovUGe-k8ab-Ff55-KHO8-SfKc-qPnG-kQ2TmB
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

  PV Name               /dev/sdc1
  PV UUID               vltXDY-QR0h-eq52-Q6mj-SW39-Cn1M-Hn22Sc
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

  PV Name               /dev/sdf1
  PV UUID               0L1Rfr-ve3M-OcP4-1kIG-coUi-R3fX-j0oZ3W
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

前後のvgdisplayの結果を見比べてみると、PV UUIDは同じなのでディスク名が変わってもちゃんと管理されているのかもしれない。しらんけど。

  PV Name               /dev/sdd1
  PV UUID               0L1Rfr-ve3M-OcP4-1kIG-coUi-R3fX-j0oZ3W
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

  PV Name               /dev/sdf1
  PV UUID               0L1Rfr-ve3M-OcP4-1kIG-coUi-R3fX-j0oZ3W
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

とはいえ、udevを使って一意な名前にしておくのが良いような気はする。

incarose86.hatenadiary.org