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
以上で作業は完了となる。

参考

0 件のコメント:

コメントを投稿

人気の投稿