oldyang博客

这里是oldyang(老杨)的博客,欢迎光临!

LVM磁盘扩容

发表日期为: 2024-6-24

前言

偶然看到我的pve虚拟机,磁盘快满了,这才想起上一次这个主机死机的事情,可能又是磁盘问题。这倒让我想起了之前看书的时候,好多篇章都在讲磁盘满了怎么办,当时的我不理解,“磁盘那么容易满吗?”,现在发现最近要处理的问题都是如此。

磁盘要满了
磁盘要满了

这次记录下来,也算是学习lvm的过程,下次可以参考这个教程。

如何处理

首先,我面临的是虚拟机的问题,因为第一步是在pve平台中给磁盘扩大容量,这一步可以通过GUI完成。然后就是复杂的,如何把扩大的容量给到需要的地方。这里我使用GPT辅助来完成了第一步,使用fdisk把空白的磁盘容量通过分区修改先给到了vda2分区。sudo fdisk /dev/vda然后通过p查看分区表,依次通过d,2,n,p,2,w来修改分区(起始扇区号相同,结尾扇区保持默认)。最后sudo partprobe /dev/vda

最常用的两个命令是lsblkdu -hT这两个命令可以查看磁盘容量。

$ df -hT
Filesystem          Type      Size  Used Avail Use% Mounted on
devtmpfs            devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs               tmpfs     1.8G     0  1.8G   0% /dev/shm
tmpfs               tmpfs     730M   67M  663M  10% /run
/dev/mapper/rl-root xfs        28G   26G  2.4G  92% /
/dev/vda1           xfs       960M  305M  656M  32% /boot
tmpfs               tmpfs     365M     0  365M   0% /run/user/1000

$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0          11:0    1  1.6G  0 rom
vda         252:0    0   52G  0 disk
├─vda1      252:1    0    1G  0 part /boot
└─vda2      252:2    0   51G  0 part
  ├─rl-root 253:0    0 27.8G  0 lvm  /
  └─rl-swap 253:1    0  3.2G  0 lvm  [SWAP]

vda2已经有足够的空间了,而/rl-root太小了,需要扩容一下。

$ sudo vgdisplay
  --- Volume group ---
  VG Name               rl
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <51.00 GiB
  PE Size               4.00 MiB
  Total PE              13055
  Alloc PE / Size       7935 / <31.00 GiB
  Free  PE / Size       5120 / 20.00 GiB
  VG UUID               KpIiEf-e7nH-gEda-c1Q8-K9GQ-8cZD-iLjhFw

通过vgdisplay可以看到,扩容的20G被添加进来了,可以使用这些空间扩容分区,分区情况如下:

$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/rl/swap
  LV Name                swap
  VG Name                rl
  LV UUID                KRLJNx-MqFn-BBum-C1SL-0qmw-GsOl-6p5gUM
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-01-14 16:08:22 +0800
  LV Status              available
  # open                 2
  LV Size                3.20 GiB
  Current LE             820
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/rl/root
  LV Name                root
  VG Name                rl
  LV UUID                RqpCfQ-m6K8-XeiG-bYc6-ulve-2VwU-DJICEW
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-01-14 16:08:23 +0800
  LV Status              available
  # open                 1
  LV Size                27.79 GiB
  Current LE             7115
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

然后可以通过lvextend命令进行扩容。

$ sudo lvextend -L +10G /dev/mapper/rl-root
  Size of logical volume rl/root changed from 27.79 GiB (7115 extents) to 37.79 GiB (9675 extents).
  Logical volume rl/root successfully resized.

$ df -hT
Filesystem          Type      Size  Used Avail Use% Mounted on
devtmpfs            devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs               tmpfs     1.8G     0  1.8G   0% /dev/shm
tmpfs               tmpfs     730M   67M  663M  10% /run
/dev/mapper/rl-root xfs        28G   26G  2.4G  92% /
/dev/vda1           xfs       960M  305M  656M  32% /boot
tmpfs               tmpfs     365M     0  365M   0% /run/user/1000

$ sudo xfs_growfs /dev/mapper/rl-root
meta-data=/dev/mapper/rl-root    isize=512    agcount=4, agsize=1821440 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=7285760, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 7285760 to 9907200

$ df -hT
Filesystem          Type      Size  Used Avail Use% Mounted on
devtmpfs            devtmpfs  4.0M     0  4.0M   0% /dev
tmpfs               tmpfs     1.8G     0  1.8G   0% /dev/shm
tmpfs               tmpfs     730M   67M  663M  10% /run
/dev/mapper/rl-root xfs        38G   26G   13G  68% /
/dev/vda1           xfs       960M  305M  656M  32% /boot
tmpfs               tmpfs     365M     0  365M   0% /run/user/1000

轻松完成扩容~ (扩容的语法非常方便,另外扩容的挂载点目录可以从df -hT命令中获取)

结尾

硬盘空间充足了
硬盘空间充足了

另外有一条命令可以看到磁盘结尾的空白空间sudo parted /dev/vda 'unit s print' free,用起来也是非常方便。