Linux command – lvreduce & lvextend

Loading

測試環境為 CentOS 6.10 (虛擬機)

如果你使用的是 CentOS8 x86_64 (虛擬機) ,其預設的檔案格式為 XFS , LVM 方式略有不同請參考 – https://benjr.tw/102355

LVM 的磁區可以透過 lvreduce & lvextend 來放大縮小,但還是有一些限制.先來看看什麼是 LVM

什麼是 LVM

傳統的硬碟空間在切割完時就決定了大小,如果要重新規劃必須將資料先備份下來,硬碟磁區重新切割才可能有改變原來的硬碟磁區環境.透過 LVM (Logical Volume Manager) 就不同了,LVM 是一種可以動態變更 Volume 大小的方式 (由 LVM 所切割出來的空間稱為 Volume),它可以讓我們更容易管理硬碟空間.

如果磁區空間不夠了,我們可以把使用率低的磁區空間縮小再將空間不夠的磁區放大 (放大縮小時皆都不影響硬碟上的資料).

LVM 說明:

  • Physical Volume (PV)
    這就是硬碟切割出來的實體 Partition (/dev/sdb1,/dev/sdc1)
  • volume group (VG)
    接下來再由多個(可以單一) PV (/dev/sdb1,/dev/sdc1) 的磁區再組合成一個虛擬的磁碟 ( /dev/volum00 ) ,使用上如同一般磁碟 ( /dev/sda) ,但不同於一般磁碟他是可以做縮放的.
  • Logical Volume (LV)
    由 VG 這個虛擬磁碟所切割出來的 Partition ( /dev/volum00/LVOL1 ) 使用時就如同一般磁區 ( /dev/sda1 ),但不同於一般磁區他是可以做縮放的.
  • Physical Extent (PE)
    PE 就如同是磁碟機在格式化時,每個 Block 的大小.而 PE 系統預設大小為 4M 而一個 VG 最多可以擁有 65534 個 PE ( LVM2 已經沒有這個限制了 ) ,所以當系統預設時,ㄧ個 VG 最大尺寸為 65534*4M 大概為256G.對於現在大硬碟 的狀況下很快就無法再延伸了.所以建議在設定PE時指定大小.除了預設的 4M 外只要是 2的倍數在 8k-16GB 都是可以的範圍.

傳統硬碟分割區的放大縮小磁區可以透過 parted + resize2fs 做放大縮小磁區 – https://benjr.tw/94843

LVM 架構如下:
lvm00
整個架構就是將許多的 partition(/dev/sdb1 /dev/sdc1) 組成一個虛擬的磁碟(/dev/vg).之後就可以將它動態切割成你需要大小的 partition(/dev/vg/lv1,/dev/vg/lv2).就可以像一般的 partition 來使用.

  • Physical Volume (PV)
    A physical volume is typically a hard disk, though it may well just be a device that 'looks' like a hard disk (eg. a software raid device).
    這就是硬碟切割出來的實體partition(/dev/sdb1,/dev/sdc1)
  • volume group (VG)
    The Volume Group is the highest level abstraction used within the LVM. It gathers together a collection of Logical Volumes and Physical Volumes into one administrative unit.
    接下來再由多個 PV(/dev/sdb1,/dev/sdc1)建立出的磁區再組合成一個虛擬的磁碟(/dev/volum00,將來使用時這就像是/dev/sda一個真實的磁碟機一樣,但不同於一般磁碟機的是他的大小是可以縮放)
    Logical Volume (LV)
    The equivalent of a disk partition in a non-LVM system. The LV is visible as a standard block device; as such the LV can contain a file system (eg. /home).
    由VG這個虛擬磁碟所切割出來的 partition(/dev/volum00/LVOL1,將來使用時就像/dev/sda1一個真實的磁區一樣,但不同於一般磁區他是可以縮放的)
  • Physical Extent (PE)
    Each physical volume is divided chunks of data, known as physical extents, these extents have the same size as the logical extents for the volume group.
    PE就如同是磁碟機在格式化時,每個block的大小.而 PE系統預設大小為4M而一個VG最多可以擁有65534個PE,所以當系統預設時,ㄧ個VG最大尺寸為65534*4M大概為256G.對於現在大硬碟 的狀況下很快就無法再延伸了.所以建議在設定PE時指定大小.除了預設的4M外只要是2的倍數在8k-16GB都是可以的範圍.

我的 LVM 磁區分割如下,想要把 /home 縮小,然後放大 / (root) .

[root@localhost ~]# lvscan 
  ACTIVE            '/dev/VolGroup/home' [9.76 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_root' [7.81 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_swap' [1.94 GiB] inherit

lvreduce

先來縮小 /home 這個 LVM 磁區到 5G,需要 umount , resize2fs , lvreduce , mount 這幾個動作.

[root@localhost ~]# umount /dev/mapper/VolGroup-home 
[root@localhost ~]# resize2fs /dev/mapper/VolGroup-home 5G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/VolGroup-home to 1310720 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-home is now 1310720 blocks long.

有時候會遇到要先做 e2fsck ,系統會提示.

[root@localhost ~]# lvreduce -l 5G /dev/mapper/VolGroup-home 
  WARNING: Reducing active logical volume to 5.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce VolGroup/home? [y/n]: y
  Size of logical volume VolGroup/home changed from 9.76 GiB (2498 extents) to 5.00 GiB (1280 extents).
  Logical volume home successfully resized.
[root@localhost ~]# e2fsck -f /dev/mapper/VolGroup-home
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/VolGroup-home: 11/323840 files (0.0% non-contiguous), 58102/1310720 blocks
[root@localhost ~]# mount /dev/mapper/VolGroup-home /home/

可以看到 /dev/VolGroup/home 從 9.76 GiB 變成 5 GiB (lvscan 與 df 算法不一樣所以會有誤差,使用 1000 與 1024 的差別)

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      7.6G  3.9G  3.3G  55% /
tmpfs                 490M   76K  490M   1% /dev/shm
/dev/sda1             477M   66M  386M  15% /boot
/dev/sr0              3.8G  3.8G     0 100% /media/CentOS_6.10_Final
/dev/mapper/VolGroup-home
                      4.8G   20M  4.6G   1% /home
[root@localhost ~]# lvscan 
  ACTIVE            '/dev/VolGroup/home' [5.00 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_root' [7.81 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_swap' [1.94 GiB] inherit

lvextend

放大 / (root) 這個 LVM 磁區,就不需要 umount 直接透過 lvextend, resize2fs 即可.

剛剛把 /home 磁區減少了,我們可以透過 pvscan 看目前 free 的空間.

[root@localhost ~]# pvscan
  PV /dev/sda2   VG VolGroup        lvm2 [19.51 GiB / 4.76 GiB free]
  Total: 1 [19.51 GiB] / in use: 1 [19.51 GiB] / in no VG: 0 [0   ]

我們可以指定多少空間或是把 +100%FREE 的空間都給 / (root).

[root@localhost ~]# lvextend -l +100%FREE /dev/mapper/VolGroup-lv_root 
  Size of logical volume VolGroup/lv_root changed from 7.81 GiB (2000 extents) to 12.57 GiB (3218 extents).
  Logical volume lv_root successfully resized.

最後再透過 resize2fs 即可.

[root@localhost ~]# resize2fs -p /dev/mapper/VolGroup-lv_root 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/VolGroup-lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mapper/VolGroup-lv_root to 3295232 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-lv_root is now 3295232 blocks long.

可以看到 /dev/VolGroup/home 從 7.81 GiB 變成 12.57 GiB (lvscan 與 df 算法不一樣所以會有誤差,使用 1000 與 1024 的差別)

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       13G  3.9G  7.8G  34% /
tmpfs                 490M   76K  490M   1% /dev/shm
/dev/sda1             477M   66M  386M  15% /boot
/dev/sr0              3.8G  3.8G     0 100% /media/CentOS_6.10_Final
/dev/mapper/VolGroup-home
                      4.8G   20M  4.6G   1% /home
[root@localhost ~]# lvscan 
  ACTIVE            '/dev/VolGroup/home' [5.00 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_root' [12.57 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_swap' [1.94 GiB] inherit

要注意系統給的訊息,步驟不對可能會造成系統重開機失敗.

沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料