2020年4月8日水曜日

【LVM入門】LinuxのLVMで作成済みのVGやLVの名前を変更する

LVMで設定した後、VGやLVの名称を変更したい場合がある。LVMにおいては名前変更は柔軟に対応することが可能であり、一応オンラインでも変更可能である。
※後述するが、実際は再起動しなければ反映されない設定がある。

今回は、VG、LVの名前変更手順と、PVのストレージデバイス名が変更となった際の動作を確認した結果を記載する。

※今までのLVM関連記事はこちら。↓
手順 記事
LVM領域作成 【LVM入門】LinuxのLVM領域を最短で作成する
LVM領域削除 【LVM入門】LinuxのLVMで作成したディスクを削除する
LVM領域拡張 【LVM入門】LinuxのLVMでディスク容量を拡張する
LVM領域縮小 【LVM入門】LinuxのLVMでディスク容量を縮小する
VG・LV名前変更 【LVM入門】LinuxのLVMで作成済みのVGやLVの名前を変更する←★本記事

環境

環境情報は以下の通り。この状態からVGとLVの名前変更とPVのストレージデバイスの変更を実施する。
  • OS : Red Hat Enterprise Linux 7.6
  • PV : /dev/sdb1
  • VG : vg_sdb1
  • LV : lv_sdb1
  • マウントポイント : /mnt

VG名の変更

VG名の変更はvgrenameコマンドで実施する。
# vgrename --help
  vgrename - Rename a volume group

  Rename a VG.
  vgrename VG VG_new

~(以下略)~
実際にVG名を「vg_sdb1」→「vg_sdb1_rename」に変更してみよう。本作業はLVをマウントした状態で実施可能である。
# vgs
  VG      #PV #LV #SN Attr   VSize   VFree
  rhel      1   2   0 wz--n- <15.00g    0
  vg_sdb1   1   1   0 wz--n-  <5.00g    0

# vgrename vg_sdb1 vg_sdb1_rename
  Volume group "vg_sdb1" successfully renamed to "vg_sdb1_rename"

# vgs
  VG             #PV #LV #SN Attr   VSize   VFree
  rhel             1   2   0 wz--n- <15.00g    0
  vg_sdb1_rename   1   1   0 wz--n-  <5.00g    0

# lvs
  LV      VG             Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    rhel           -wi-ao---- 13.39g                                      
  swap    rhel           -wi-ao----  1.60g                                      
  lv_sdb1 vg_sdb1_rename -wi-ao---- <5.00g                                      
VG名変更後、/mntにマウントしたLVにファイルを書き込んでみると問題なく書き込みすることができた。
# touch /mnt/test.txt
# ls -l /mnt/
合計 0
-rw-r--r--. 1 root root 0  3月 28 13:02 test.txt
ただし、LVのデバイスファイル名の変更はマウント情報に反映はされないため、名前変更後はLVを一度アンマウントし再度マウントした方が安全と思われる。また、本記事では省略するが、/etc/fstabの修正も適宜実施する必要がある。
# umount /mnt/
# mount /dev/mapper/vg_sdb1_rename-lv_sdb1 /mnt/

LV名の変更

LV名の変更はlvrenameコマンドで実施する。lvrenameはVG名を指定する方法とLVのデバイス名を指定する2つの記述方法がある。今回は後者のコマンド記述方法で実行する。
  • 記述方法①:lvrename <VG名> <LV名> <新LV名>
  • 記述方法②:lvrename /dev/<VG名>/<LV名> <新LV名>
# lvrename --help
  lvrename - Rename a logical volume

  lvrename VG LV LV_new
        [ COMMON_OPTIONS ]

  lvrename LV LV_new
        [ COMMON_OPTIONS ]

~(以下略)~
実際にVG名を「lv_sdb1」→「lv_sdb1_rename」に変更してみよう。本作業はLVをマウントした状態で実施可能である。
# lvs
  LV      VG             Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    rhel           -wi-ao---- 13.39g                                      
  swap    rhel           -wi-ao----  1.60g                                      
  lv_sdb1 vg_sdb1_rename -wi-ao---- <5.00g                                      

# lvrename /dev/vg_sdb1_rename/lv_sdb1 lv_sdb1_rename
  Renamed "lv_sdb1" to "lv_sdb1_rename" in volume group "vg_sdb1_rename"

# lvs
  LV             VG             Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root           rhel           -wi-ao---- 13.39g                               
  swap           rhel           -wi-ao----  1.60g                               
  lv_sdb1_rename vg_sdb1_rename -wi-ao---- <5.00g                               
ただし、VG名変更時と同様にLVのデバイスファイル名の変更はマウント情報に反映はされないため、名前変更後はLVを一度アンマウントし再度マウントした方が安全と思われる。また、本記事では省略するが、/etc/fstabの修正も適宜実施する必要がある。
# umount /mnt/
# mount /dev/mapper/vg_sdb1_rename-lv_sdb1_rename /mnt/

PVが変更された際の動作

最後にPVのストレージデバイス名が変更された際の、OSの認識状況について確認してみよう。

PVにはPV名というものは存在せず、あくまでストレージデバイスがPV名となるが、OS起動時などにストレージデバイスが付与される関係から、pvcreateコマンドでPV作成した際に指定したストレージデバイスが意図せず変更される場合がありうる。しかし、PVのストレージデバイスが変更となっても、問題なくVG、LVは当初と同じ設定でOSは認識してくれる

以下に実際に検証した結果を記載する。まず、変更前のPVのストレージデバイスを確認する。変更前は以下の通りになっている。
PV VG LV
/dev/sda2 rhel root, swap
/dev/sdb1 vg_sdb1_rename lv_sdb1_rename
/dev/sdc1 vg_sdc1 lv_sdc1
# pvs
  PV         VG             Fmt  Attr PSize   PFree
  /dev/sda2  rhel           lvm2 a--  <15.00g    0
  /dev/sdb1  vg_sdb1_rename lvm2 a--   <5.00g    0
  /dev/sdc1  vg_sdc1        lvm2 a--   <3.00g    0

# lsblk -l
NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                             8:0    0   16G  0 disk
sda1                            8:1    0    1G  0 part /boot
sda2                            8:2    0   15G  0 part
rhel-root                     253:0    0 13.4G  0 lvm  /
rhel-swap                     253:1    0  1.6G  0 lvm  [SWAP]
sdb                             8:16   0    5G  0 disk
sdb1                            8:17   0    5G  0 part
vg_sdb1_rename-lv_sdb1_rename 253:3    0    5G  0 lvm
sdc                             8:32   0    3G  0 disk
sdc1                            8:33   0    3G  0 part
vg_sdc1-lv_sdc1               253:2    0    3G  0 lvm
sr0                            11:0    1  4.2G  0 rom

# blkid | grep /dev/sd
/dev/sda1: UUID="68f1f8f7-ab56-410a-aa4c-8401fc6f7894" TYPE="xfs"
/dev/sda2: UUID="nkMf2a-kLcr-vkqe-DVzU-Pjus-xejR-isMH90" TYPE="LVM2_member"
/dev/sdb1: UUID="hRgzZI-kGbg-SfPF-wAb9-kRzf-hEY3-wsEFJM" TYPE="LVM2_member" PARTUUID="fa5082ea-b59a-416c-b5b5-294d8cce323a"
/dev/sdc1: UUID="6RCfuZ-1hjc-LMmC-1k7K-SaSh-bOBu-q3rNn6" TYPE="LVM2_member" PARTUUID="5d7b5900-860f-4348-902b-0bb15f69210c"
ストレージデバイスはSCSIデバイスの認識順で決まるようだ。仮想環境の場合はSCSIコントローラへの接続順で決まるので、容易に変更することができる。

今回は、/dev/sdb1の仮想ハードディスクである「Hard disk 2」のSCSIコントローラの接続設定を「SCSI (0:1)」から「SCSI (0:3)」に変更する。


仮想ハードディスクの設定変更後にOSを起動した際のPV、VG、LVの状態は以下の通りとなる。/dev/sdb1と/dev/sdc1のPVが入れ替わっている(★箇所)が、VG名、LV名は正しく引き継がれていることがわかる。
PV VG LV
/dev/sda2 rhel root, swap
/dev/sdc1★ vg_sdb1_rename lv_sdb1_rename
/dev/sdb1★ vg_sdc1 lv_sdc1
# pvs
  PV         VG             Fmt  Attr PSize   PFree
  /dev/sda2  rhel           lvm2 a--  <15.00g    0
  /dev/sdb1  vg_sdc1        lvm2 a--   <3.00g    0
  /dev/sdc1  vg_sdb1_rename lvm2 a--   <5.00g    0

# lsblk -l
NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                             8:0    0   16G  0 disk
sda1                            8:1    0    1G  0 part /boot
sda2                            8:2    0   15G  0 part
rhel-root                     253:0    0 13.4G  0 lvm  /
rhel-swap                     253:1    0  1.6G  0 lvm  [SWAP]
sdb                             8:16   0    3G  0 disk
sdb1                            8:17   0    3G  0 part
vg_sdc1-lv_sdc1               253:2    0    3G  0 lvm
sdc                             8:32   0    5G  0 disk
sdc1                            8:33   0    5G  0 part
vg_sdb1_rename-lv_sdb1_rename 253:3    0    5G  0 lvm
sr0                            11:0    1  4.2G  0 rom

# blkid | grep /dev/sd
/dev/sda1: UUID="68f1f8f7-ab56-410a-aa4c-8401fc6f7894" TYPE="xfs"
/dev/sda2: UUID="nkMf2a-kLcr-vkqe-DVzU-Pjus-xejR-isMH90" TYPE="LVM2_member"
/dev/sdb1: UUID="6RCfuZ-1hjc-LMmC-1k7K-SaSh-bOBu-q3rNn6" TYPE="LVM2_member" PARTUUID="5d7b5900-860f-4348-902b-0bb15f69210c"
/dev/sdc1: UUID="hRgzZI-kGbg-SfPF-wAb9-kRzf-hEY3-wsEFJM" TYPE="LVM2_member" PARTUUID="fa5082ea-b59a-416c-b5b5-294d8cce323a"

2020年4月1日水曜日

【LVM入門】LinuxのLVMでディスク容量を縮小する

LVMで容量を縮小する手順を記載する。以下RHELのマニュアルにある通り、xfsのファイルシステムは容量の拡張はできるが縮小はできない
XFS ファイルシステムの作成後にサイズを縮小することはできません。ただし、xfs_growfs コマンドを使ってサイズを拡大することはできます。詳細は「XFS ファイルシステムのサイズの拡大」を参照してください。
したがって、縮小前にバックアップを取得し、ファイルシステムを壊したうえで領域を縮小したのち、バックアップファイルからリストアすることで対処する。

※今までのLVM関連記事はこちら。↓
手順 記事
LVM領域作成 【LVM入門】LinuxのLVM領域を最短で作成する
LVM領域削除 【LVM入門】LinuxのLVMで作成したディスクを削除する
LVM領域拡張 【LVM入門】LinuxのLVMでディスク容量を拡張する
LVM領域縮小 【LVM入門】LinuxのLVMでディスク容量を縮小する←★本記事
VG・LV名前変更 【LVM入門】LinuxのLVMで作成済みのVGやLVの名前を変更する

LVM容量縮小手順

1. ディスクの状態確認

/mntにマウントしている/dev/mapper/vg_sdb1-lv_sdb1を4GBから2GBに縮小する。
[root@localhost ~]# df -h
ファイルシス                サイズ  使用  残り 使用% マウント位置
/dev/mapper/rhel-root          14G  1.4G   13G   11% /
devtmpfs                      908M     0  908M    0% /dev
tmpfs                         920M     0  920M    0% /dev/shm
tmpfs                         920M  8.9M  911M    1% /run
tmpfs                         920M     0  920M    0% /sys/fs/cgroup
/dev/sda1                    1014M  146M  869M   15% /boot
tmpfs                         184M     0  184M    0% /run/user/0
/dev/mapper/vg_sdb1-lv_sdb1   4.0G   33M  4.0G    1% /mnt

2. xfs領域のデータバックアップ

バックアップはxfsdumpコマンドで実施する。RHELを最小インストールした状態では導入されていないので、追加でパッケージのインストールを行う。
[root@localhost Packages]# rpm -ivh xfsdump-3.1.7-1.el7.x86_64.rpm attr-2.4.46-13.el7.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:attr-2.4.46-13.el7               ################################# [ 50%]
   2:xfsdump-3.1.7-1.el7              ################################# [100%]
バックアップ前にI/Oを停止するため、アンマウントしておく。
[root@localhost ~]# umount /mnt/
バックアップを取得する。最後に「SUCCESS」と表示されていればOK。
[root@localhost ~]# xfsdump - /dev/vg_sdb1/lv_sdb1 | gzip > /root/backup_sdb1.gz
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0)
xfsdump: level 0 dump of localhost.localdomain:/mnt
xfsdump: dump date: Sun Feb  9 15:52:17 2020
xfsdump: session id: 04f700d5-3dc4-4528-be4d-92b4461e333e
xfsdump: session label: ""
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 21120 bytes
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 21672 bytes
xfsdump: dump size (non-dir files) : 0 bytes
xfsdump: dump complete: 0 seconds elapsed
xfsdump: Dump Status: SUCCESS ←★バックアップ成功

2. LV容量縮小

LVの容量縮小はlvreduceコマンドで行う。
[root@localhost ~]# lvreduce -L -2g /dev/vg_sdb1/lv_sdb1
  WARNING: Reducing active logical volume to <2.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg_sdb1/lv_sdb1? [y/n]: y
  Size of logical volume vg_sdb1/lv_sdb1 changed from <4.00 GiB (1023 extents) to <2.00 GiB (511 extents).
  Logical volume vg_sdb1/lv_sdb1 successfully resized.

[root@localhost ~]# lvdisplay /dev/vg_sdb1/lv_sdb1
  --- Logical volume ---
  LV Path                /dev/vg_sdb1/lv_sdb1
  LV Name                lv_sdb1
  VG Name                vg_sdb1
  LV UUID                WBUK0w-La44-rff0-DLIY-QpWK-a72w-cfzOEF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-02-08 19:53:50 +0900
  LV Status              available
  # open                 0
  LV Size                <2.00 GiB
  Current LE             511
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

3. PV容量縮小

PVの容量縮小はpvresizeコマンドで行う。
[root@localhost ~]# pvdisplay /dev/sdb1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg_sdb1
  PV Size               <4.00 GiB / not usable 1.98 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1023
  Free PE               512
  Allocated PE          511
  PV UUID               pmrFQB-o1oh-VGLc-Aogy-tOoC-PYdz-qizm2I

[root@localhost ~]# pvresize --setphysicalvolumesize 2g /dev/sdb1
/dev/sdb1: Requested size 2.00 GiB is less than real size <4.00 GiB. Proceed?  [y/n]: y
  WARNING: /dev/sdb1: Pretending size is 4194304 not 8386527 sectors.
  Physical volume "/dev/sdb1" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

[root@localhost ~]# pvdisplay /dev/sdb1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg_sdb1
  PV Size               <2.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              511
  Free PE               0
  Allocated PE          511
  PV UUID               pmrFQB-o1oh-VGLc-Aogy-tOoC-PYdz-qizm2I

4. パーティションの容量縮小

partedコマンドで実施する。単位をGiBに設定しないと、きれいに容量が合わないので注意する。
[root@localhost ~]# parted /dev/sdb unit MB print free
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 4295MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
      0.02MB  1.05MB  1.03MB  空き容量
 1    1.05MB  4295MB  4294MB                          lvm

[root@localhost ~]# parted /dev/sdb unit GiB resizepart 1 2GiB
警告: Shrinking a partition can cause data loss, are you sure you want to
continue?
はい(Y)/Yes/いいえ(N)/No? y
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。

[root@localhost ~]# parted /dev/sdb unit GiB print free
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 4.00GiB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始     終了     サイズ   ファイルシステム  名前  フラグ
      0.00GiB  0.00GiB  0.00GiB  空き容量
 1    0.00GiB  2.00GiB  2.00GiB                          lvm
      2.00GiB  4.00GiB  2.00GiB  空き容量

5. xfs領域のデータリストア

xfsのファイルシステムが壊れている可能性が高いため、mkfs.xfs -fコマンドを実行し、xfsファイルシステムの上書きでの再作成を行う。
[root@localhost ~]# mkfs.xfs -f /dev/vg_sdb1/lv_sdb1
meta-data=/dev/vg_sdb1/lv_sdb1   isize=512    agcount=4, agsize=130816 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=523264, 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
xfsrestoreコマンドでリストアする。リストアはマウントした状態にて行う。
[root@localhost ~]# mount /dev/vg_sdb1/lv_sdb1 /mnt/

[root@localhost ~]# ls -l /mnt/
合計 0

[root@localhost ~]# gzip -dc /root/backup_sdb1.gz | xfsrestore - /mnt/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0)
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: localhost.localdomain
xfsrestore: mount point: /mnt
xfsrestore: volume: /dev/mapper/vg_sdb1-lv_sdb1
xfsrestore: session time: Sun Feb  9 15:52:17 2020
xfsrestore: level: 0
xfsrestore: session label: ""
xfsrestore: media label: ""
xfsrestore: file system id: 4e681c60-916e-4d0c-a2fd-278dc611fe43
xfsrestore: session id: 04f700d5-3dc4-4528-be4d-92b4461e333e
xfsrestore: media id: 94500b5c-ad43-4ec5-9321-a9fbdc8e29d6
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 1 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Status: SUCCESS

[root@localhost ~]# ls -l /mnt/
合計 0
-rw-r--r--. 1 root root 0  2月  8 19:55 test.txt
リストア後のファイルシステムを確認する。2GBの容量で/mntにマウントできていることが確認できる。
[root@localhost ~]# df -h
ファイルシス                サイズ  使用  残り 使用% マウント位置
/dev/mapper/rhel-root          14G  1.4G   13G   11% /
devtmpfs                      908M     0  908M    0% /dev
tmpfs                         920M     0  920M    0% /dev/shm
tmpfs                         920M  8.9M  911M    1% /run
tmpfs                         920M     0  920M    0% /sys/fs/cgroup
/dev/sda1                    1014M  146M  869M   15% /boot
tmpfs                         184M     0  184M    0% /run/user/0
/dev/sr0                      4.2G  4.2G     0  100% /media
/dev/mapper/vg_sdb1-lv_sdb1   2.0G   33M  2.0G    2% /mnt
以上で作業は完了となる。

参考

2020年3月25日水曜日

【LVM入門】LinuxのLVMでディスク容量を拡張する

本記事ではLVM拡張手順の例として、2GBの容量を持つ/dev/sdbを拡張して5GBに拡張してみる。なお、LVMの領域はマウントした状態のままオンラインで拡張を行う。
※今までのLVM関連記事はこちら。↓
手順 記事
LVM領域作成 【LVM入門】LinuxのLVM領域を最短で作成する
LVM領域削除 【LVM入門】LinuxのLVMで作成したディスクを削除する
LVM領域拡張 【LVM入門】LinuxのLVMでディスク容量を拡張する←★本記事
LVM領域縮小 【LVM入門】LinuxのLVMでディスク容量を縮小する
VG・LV名前変更 【LVM入門】LinuxのLVMで作成済みのVGやLVの名前を変更する

環境

環境情報は以下の通り。下から順に削除していくイメージとなる。
  • OS : Red Hat Enterprise Linux 7.6
  • PV : /dev/sdb1
  • VG : vg_sdb1
  • LV : lv_sdb1
  • マウントポイント : /mnt
作業前のdfコマンドの状態を以下に記載しておく。/dev/mapper/vg_sdb1-lv_sdb1となっている2GBの領域を拡張し4GBにする。
[root@localhost ~]# df -h
ファイルシス                サイズ  使用  残り 使用% マウント位置
/dev/mapper/rhel-root          14G  1.4G   13G   11% /
devtmpfs                      908M     0  908M    0% /dev
tmpfs                         920M     0  920M    0% /dev/shm
tmpfs                         920M  8.9M  911M    1% /run
tmpfs                         920M     0  920M    0% /sys/fs/cgroup
/dev/sda1                    1014M  146M  869M   15% /boot
tmpfs                         184M     0  184M    0% /run/user/0
/dev/mapper/vg_sdb1-lv_sdb1   2.0G   33M  2.0G    2% /mnt

LVM容量拡張手順

1. 拡張前のディスク状態を確認

[root@localhost ~]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: gpt
Disk identifier: B383352C-EF95-49AC-AA28-A6A99BB2A11C


#         Start          End    Size  Type            Name
 1         2048      4192255      2G  Linux LVM

[root@localhost ~]# ls -l /mnt/
合計 0
-rw-r--r--. 1 root root 0  2月  8 19:55 test.txt

2. ストレージやVMware上でディスクを拡張

ストレージやVMwareの仮想マシンの設定などで、ディスクの拡張を行う。今回はVMware Host Clientにて拡張作業を実施した。


拡張しただけでは容量を認識しないので、ディスク容量は変わらず2GBのままとなる。
[root@localhost ~]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: gpt
Disk identifier: B383352C-EF95-49AC-AA28-A6A99BB2A11C


#         Start          End    Size  Type            Name
 1         2048      4192255      2G  Linux LVM

3. 拡張後OSでリスキャンし、容量を認識させる

リスキャンコマンドはecho 1 > /sys/class/block/_device-name_/device/rescanとなる。_device-name_は今回の場合はsdbとなる。
[root@localhost ~]# echo 1 > /sys/class/block/sdb/device/rescan
リスキャンしてfdisk -lで確認すると、「Disk label type」がgptではなくdosとなり表示がおかしくなるが、これは次の手順で修正する。
[root@localhost ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos ←★gptではなくdosになっている
ディスク識別子: 0x00000000

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1               1     4194303     2097151+  ee  GPT

4. GPTテーブルの修復

リスキャンし、parted -lコマンドで確認しようとすると、「あるべき GPT テーブルのバックアップがディスクの最後にありません」というエラーが表示される。そのまま修正することができるので「F」を入力して修正すること。
[root@localhost ~]# parted -l
モデル: VMware Virtual disk (scsi)
ディスク /dev/sda: 17.2GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  1075MB  1074MB  primary  xfs               boot
 2    1075MB  17.2GB  16.1GB  primary                    lvm


エラー: あるべき GPT テーブルのバックアップがディスクの最後にありません。他の OS
がディスクはもっと小さいものだと思っているのかもしれません。バックアップを最後に持ってきて(古いバックアップを削除して)修復しますか?
修正/Fix/無視(I)/Ignore/取消(C)/Cancel? F ←★Fを入力
警告: /dev/sdb で利用可能な領域の一部が利用されていません。GPT を修正して全ての 領域を利用可能にするか(4194304
ブロック増えます)、このままで続行することができますが、どうしますか?
修正/Fix/無視(I)/Ignore? F ←★Fを入力
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 4295MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
 1    1049kB  2146MB  2145MB                          lvm


~(以下略)~
fdiskコマンドも表示が正常に戻る。
[root@localhost ~]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sdb: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: gpt
Disk identifier: B383352C-EF95-49AC-AA28-A6A99BB2A11C


#         Start          End    Size  Type            Name
 1         2048      4192255      2G  Linux LVM

5. パーティションの拡張

partedコマンドでパーティションを拡張する。
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.1
/dev/sdb を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) p ←★現在のパーティション情報を確認
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 4295MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
 1    1049kB  2146MB  2145MB                          lvm

(parted) p free ←★現在のパーティションの空き容量を確認
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 4295MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
      17.4kB  1049kB  1031kB  空き容量
 1    1049kB  2146MB  2145MB                          lvm
      2146MB  4295MB  2149MB  空き容量

(parted) resizepart ←★パーティション容量拡張
パーティション番号? 1
終了?  [2146MB]? 100%
(parted) p free
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 4295MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
      17.4kB  1049kB  1031kB  空き容量
 1    1049kB  4295MB  4294MB                          lvm

(parted) q ←★parted終了
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。
なお、resizeコマンドは、RHEL 7.6に付属しているpartedコマンドのバージョン3.0では使えなくなったので注意。
(parted) resize
エラー: The resize command has been removed in parted 3.0

6. PV容量拡張

pvresizeコマンドでPVの容量を拡張する。
[root@localhost ~]# pvdisplay /dev/sdb1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg_sdb1
  PV Size               <2.00 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              511
  Free PE               0
  Allocated PE          511
  PV UUID               pmrFQB-o1oh-VGLc-Aogy-tOoC-PYdz-qizm2I

[root@localhost ~]# pvresize /dev/sdb1
  Physical volume "/dev/sdb1" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

[root@localhost ~]# pvdisplay /dev/sdb1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg_sdb1
  PV Size               <4.00 GiB / not usable 1.98 MiB ←★容量が4.00GiBに増えている
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              1023
  Free PE               512
  Allocated PE          511
  PV UUID               pmrFQB-o1oh-VGLc-Aogy-tOoC-PYdz-qizm2I

7. VG確認

PVの容量が拡張されれば、自動的にVGの容量も増えるので、確認だけしておく。
[root@localhost ~]# vgdisplay vg_sdb1
  --- Volume group ---
  VG Name               vg_sdb1
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <4.00 GiB ←★容量が4.00GiBに増えている
  PE Size               4.00 MiB
  Total PE              1023
  Alloc PE / Size       511 / <2.00 GiB
  Free  PE / Size       512 / 2.00 GiB
  VG UUID               rV0GBn-DK2o-5STl-LJCX-y3yF-1kB0-eoqTP9

8. LV容量拡張

lvextendコマンドで容量を拡張する。空き容量をすべて拡張するので**+100%FREEを指定して拡張する(+を付けないと拡張されないので注意)**。
[root@localhost ~]# lvdisplay /dev/vg_sdb1/lv_sdb1
  --- Logical volume ---
  LV Path                /dev/vg_sdb1/lv_sdb1
  LV Name                lv_sdb1
  VG Name                vg_sdb1
  LV UUID                WBUK0w-La44-rff0-DLIY-QpWK-a72w-cfzOEF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-02-08 19:53:50 +0900
  LV Status              available
  # open                 1
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

[root@localhost ~]# lvextend -l +100%FREE /dev/vg_sdb1/lv_sdb1
  Size of logical volume vg_sdb1/lv_sdb1 changed from 2.00 GiB (512 extents) to <4.00 GiB (1023 extents).
  Logical volume vg_sdb1/lv_sdb1 successfully resized.

[root@localhost ~]# lvdisplay /dev/vg_sdb1/lv_sdb1
  --- Logical volume ---
  LV Path                /dev/vg_sdb1/lv_sdb1
  LV Name                lv_sdb1
  VG Name                vg_sdb1
  LV UUID                WBUK0w-La44-rff0-DLIY-QpWK-a72w-cfzOEF
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-02-08 19:53:50 +0900
  LV Status              available
  # open                 1
  LV Size                <4.00 GiB ←★容量が4.00GiBに増えている
  Current LE             1023
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

9. ファイルシステム拡張

xfsの領域は、xfs_growfsコマンドで拡張する。xfs_growfsコマンドはファイルシステムをマウントした状態で実行すること。また、xfs_growfsコマンドでは、デバイス名ではなくマウントポイントを指定すること。
[root@localhost ~]# xfs_growfs /mnt
meta-data=/dev/mapper/vg_sdb1-lv_sdb1 isize=512    agcount=4, agsize=130816 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=523264, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 523264 to 1047552
dfコマンドで確認すると、/mnt領域の容量が4.0GBに拡張していることが確認できる。
[root@localhost ~]# df -h
ファイルシス                サイズ  使用  残り 使用% マウント位置
/dev/mapper/rhel-root          14G  1.4G   13G   11% /
devtmpfs                      908M     0  908M    0% /dev
tmpfs                         920M     0  920M    0% /dev/shm
tmpfs                         920M  8.9M  911M    1% /run
tmpfs                         920M     0  920M    0% /sys/fs/cgroup
/dev/sda1                    1014M  146M  869M   15% /boot
tmpfs                         184M     0  184M    0% /run/user/0
/dev/mapper/vg_sdb1-lv_sdb1   4.0G   33M  4.0G    1% /mnt ←★容量が4.00GiBに増えている

ちなみに、xfs_growfsを実行した際に、マウントポイントではなくデバイス名をした場合、「デバイス is not a mounted XFS filesystem」のエラーが出る場合がある (成功する場合もある)。

[root@localhost ~]# xfs_growfs /dev/mapper/rhel-root
xfs_growfs: /dev/mapper/rhel-root is not a mounted XFS filesystem

この場合は、デバイスではなくマウントポイントを指定して再実行してみよう。以下は「/」を拡張する際のコマンド実行例となる。

[root@localhost ~]# xfs_growfs /
meta-data=/dev/mapper/cl-root    isize=512    agcount=4, agsize=839424 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=3357696, 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
data blocks changed from 3357696 to 14892032
なお、xfsの領域拡張はresize2fsではできないので注意。resize2fsで実施しようとすると、「Bad magic number in super-block」というエラーで失敗する。
[root@localhost ~]# resize2fs /dev/vg_sdb1/lv_sdb1
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/vg_sdb1/lv_sdb1
Couldn't find valid filesystem superblock.
以上で作業は完了となる。
2020年3月18日水曜日

【LVM入門】LinuxのLVMで作成したディスクを削除する

Windowsなどでは、ディスクを追加・削除をするとOSが何も言わず自動で処理してくれる(実際はストレージのデバイスが残ったりする)が、Red Hat Enterprise LinuxやCentOSなどのLinuxの場合は、単純にディスクを削除するだけではゴミ設定が残るため、少し複雑な手順が必要となる。

Red Hat Enterprise Linux 7に付けたLVMで構成済みとなる物理ディスクをLVMの設定と合わせてOS上から削除する手順を記載する。

※今までのLVM関連記事はこちら。↓

手順 記事
LVM領域作成 【LVM入門】LinuxのLVM領域を最短で作成する
LVM領域削除 【LVM入門】LinuxのLVMで作成したディスクを削除する←★本記事
LVM領域拡張 【LVM入門】LinuxのLVMでディスク容量を拡張する
LVM領域縮小 【LVM入門】LinuxのLVMでディスク容量を縮小する
VG・LV名前変更 【LVM入門】LinuxのLVMで作成済みのVGやLVの名前を変更する

環境

環境情報は以下の通り。下から順に削除していくイメージとなる。
  • OS : Red Hat Enterprise Linux 7.6
  • PV : /dev/sdb1
  • VG : vg_sdb
  • LV : lv_sdb
  • マウントポイント : /mnt
作業前のdfコマンドの状態を以下に記載しておく。/dev/mapper/vg_sdb-lv_sdbとなっている5GBの領域を削除する。
[root@localhost ~]# df -h
ファイルシス              サイズ  使用  残り 使用% マウント位置
/dev/mapper/rhel-root        14G  1.4G   13G   11% /
devtmpfs                    908M     0  908M    0% /dev
tmpfs                       920M     0  920M    0% /dev/shm
tmpfs                       920M  8.9M  911M    1% /run
tmpfs                       920M     0  920M    0% /sys/fs/cgroup
/dev/sda1                  1014M  146M  869M   15% /boot
tmpfs                       184M     0  184M    0% /run/user/0
/dev/mapper/vg_sdb-lv_sdb   5.0G   33M  5.0G    1% /mnt

LVMの削除手順

1. ファイルシステムをアンマウント

[root@localhost ~]# umount /mnt/

2. VGおよびLVを削除する。

削除前にデバイスファイルやVGの状態を確認しておく。
[root@localhost ~]# ls -ld /dev/vg_sdb/
drwxr-xr-x. 2 root root 60  2月  4 07:12 /dev/vg_sdb/
[root@localhost ~]# ls -l /dev/mapper/
合計 0
crw-------. 1 root root 10, 236  2月  3 12:59 control
lrwxrwxrwx. 1 root root       7  2月  3 13:02 rhel-root -> ../dm-0
lrwxrwxrwx. 1 root root       7  2月  3 13:02 rhel-swap -> ../dm-1
lrwxrwxrwx. 1 root root       7  2月  4 07:12 vg_sdb-lv_sdb -> ../dm-2
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  rhel     1   2   0 wz--n- <15.00g    0
  vg_sdb   1   1   0 wz--n-  <5.00g    0
vgremoveコマンドでVGを削除を実行するとLVも一緒に削除することができるので、特に理由がなければVGをいきなり削除してしまえばよい。
[root@localhost ~]# vgremove vg_sdb
Do you really want to remove volume group "vg_sdb" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume vg_sdb/lv_sdb? [y/n]: y
  Logical volume "lv_sdb" successfully removed
  Volume group "vg_sdb" successfully removed
削除後にデバイスファイルとVGの状態を確認し、問題なく削除されていることを見ておこう。
[root@localhost ~]# ls -ld /dev/vg_sdb/
ls: /dev/vg_sdb/ にアクセスできません: そのようなファイルやディレクトリはありま せん
[root@localhost ~]# ls -l /dev/mapper/
合計 0
crw-------. 1 root root 10, 236  2月  3 12:59 control
lrwxrwxrwx. 1 root root       7  2月  3 13:02 rhel-root -> ../dm-0
lrwxrwxrwx. 1 root root       7  2月  3 13:02 rhel-swap -> ../dm-1
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  rhel   1   2   0 wz--n- <15.00g    0

3. PVを削除する。

PVを削除する前に確認しておく。
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda2  rhel lvm2 a--  <15.00g     0
  /dev/sdb1       lvm2 ---   <5.00g <5.00g
PV削除はpvremoveコマンドとなる。
[root@localhost ~]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped.
以下のようにPVが削除されていればOK。
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda2  rhel lvm2 a--  <15.00g    0

4. ストレージデバイスの削除

fdiskコマンドで削除対象を確認しておく。
[root@localhost ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Red Hat社のマニュアル通りecho 1 > /sys/block/_device-name_/device/deleteのコマンドで、ストレージデバイスを削除する。_device-name_は今回の場合/dev/sdbを指定する。
[root@localhost ~]# echo 1 > /sys/block/sdb/device/delete
削除後、以下の通り/dev/sdbがなくなっていれば削除完了となる。
[root@localhost ~]# fdisk -l /dev/sdb
fdisk: /dev/sdb を open できません: そのようなファイルやディレクトリはありません
以上で作業は完了となる。

参考

2020年3月12日木曜日

【LVM入門】LinuxのLVM領域を最短で作成する

以前以下記事で、partedコマンドを使ったLVM領域を作成する方法を記載した。

RHEL 7でpartedコマンドを使って、2TB以上のディスクをLVMとして使えるようにする

上記と流れは同一となるが、可能な限り効率化して短い手順でLVM領域を作成する方法を検討したので、以下に記載する。

その他、LVMを使った各種作業手順を確認してみたので、数回に分けて記載していくことにする。

手順 記事
LVM領域作成 【LVM入門】LinuxのLVM領域を最短で作成する←★本記事
LVM領域削除 【LVM入門】LinuxのLVMで作成したディスクを削除する
LVM領域拡張 【LVM入門】LinuxのLVMでディスク容量を拡張する
LVM領域縮小 【LVM入門】LinuxのLVMでディスク容量を縮小する
VG・LV名前変更 【LVM入門】LinuxのLVMで作成済みのVGやLVの名前を変更する

partedコマンドを使って1行でパーティションを作成

今回の肝は、partedコマンドを使って1行でLVMのパーティションを作成することだ。以下のように-sオプションを付与して、設定に必要なコマンドを羅列する。
[root@localhost ~]# parted -s /dev/sdb "mklabel gpt mkpart ' ' 0% 100% set 1 lvm on print"
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 2147MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
 1    1049kB  2146MB  2145MB                          lvm

LVMとファイルシステムの設定

上記partedコマンドを考慮しつつ、最短でLVMとファイルシステムの設定を行い、マウントまで行うことを目標とする。

結果、以下7行のコマンドとなった。devは変数とし、設定したいディスクデバイスを指定する。
dev="/dev/sdb"
parted -s ${dev} "mklabel gpt mkpart ' ' 0% 100% set 1 lvm on print"
pvcreate "${dev}1"
vgcreate "vg_${dev##*/}1" "${dev}1"
lvcreate -n "lv_${dev##*/}1" -l 100%FREE "vg_${dev##*/}1"
mkfs.xfs /dev/"vg_${dev##*/}1"/"lv_${dev##*/}1"
mount /dev/mapper/"vg_${dev##*/}1"-"lv_${dev##*/}1" /mnt/
実際の実行結果は以下となる。
[root@localhost ~]# dev="/dev/sdb"

[root@localhost ~]# parted -s ${dev} "mklabel gpt mkpart ' ' 0% 100% set 1 lvm on print"
モデル: VMware Virtual disk (scsi)
ディスク /dev/sdb: 2147MB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前  フラグ
 1    1049kB  2146MB  2145MB                          lvm

[root@localhost ~]# pvcreate "${dev}1"
  Physical volume "/dev/sdb1" successfully created.

[root@localhost ~]# vgcreate "vg_${dev##*/}1" "${dev}1"
  Volume group "vg_sdb1" successfully created

[root@localhost ~]# lvcreate -n "lv_${dev##*/}1" -l 100%FREE "vg_${dev##*/}1"
  Logical volume "lv_sdb1" created.

[root@localhost ~]# mkfs.xfs /dev/"vg_${dev##*/}1"/"lv_${dev##*/}1"
meta-data=/dev/vg_sdb1/lv_sdb1   isize=512    agcount=4, agsize=130816 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=523264, 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

[root@localhost ~]# mount /dev/mapper/"vg_${dev##*/}1"-"lv_${dev##*/}1" /mnt/
一通り確認コマンドを打っておく。
[root@localhost ~]# pvs
  PV         VG      Fmt  Attr PSize   PFree
  /dev/sda2  rhel    lvm2 a--  <15.00g    0
  /dev/sdb1  vg_sdb1 lvm2 a--   <2.00g    0

[root@localhost ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree
  rhel      1   2   0 wz--n- <15.00g    0
  vg_sdb1   1   1   0 wz--n-  <2.00g    0

[root@localhost ~]# lvs
  LV      VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root    rhel    -wi-ao---- 13.39g                                             
  swap    rhel    -wi-ao----  1.60g                                             
  lv_sdb1 vg_sdb1 -wi-ao---- <2.00g                                             

[root@localhost ~]# df -h
ファイルシス                サイズ  使用  残り 使用% マウント位置
/dev/mapper/rhel-root          14G  1.2G   13G    9% /
devtmpfs                      908M     0  908M    0% /dev
tmpfs                         920M     0  920M    0% /dev/shm
tmpfs                         920M  8.9M  911M    1% /run
tmpfs                         920M     0  920M    0% /sys/fs/cgroup
/dev/sda1                    1014M  146M  869M   15% /boot
tmpfs                         184M     0  184M    0% /run/user/0
/dev/mapper/vg_sdb1-lv_sdb1   2.0G   33M  2.0G    2% /mnt
以上となる。

人気の投稿