缩小lvm卷

扩大VM卷分区的操作参考扩展lvm卷

本文是为了实现通过systemd设置fedora系统hibernate休眠,预先准备足够的swap分区空间。

最初在安装Fedora操作系统时,只设置了内存一半大小的swap分区。后来考虑实现Hibernate时发现需要足够的swap空间,则尝试通过缩小/dev/mapper/fedora-home逻辑卷,扩展/dev/mapper/fedora-swap逻辑卷来实现。本文为实践笔记。

注意:ext4文件系统支持在线扩展离线收缩,但是XFS文件系统当前不支持收缩。

有关Linux卷管理的概念及基本操作,请参考Linux卷管理

LVM Resize

要实现decrease或者shrink,即缩LVM逻辑卷(分区)则首先要完成LVM逻辑卷上层的文件系统的缩减,否则会导致数据丢失。

收缩root卷

root volume通常是挂载在/的逻辑卷。由于在运行操作系统时不能umount根目录,所以如果要缩小根文件系统所在的文件系统,需要使用LiveCD来启动主机。一旦从LiveCD启动后,首先将磁盘中的 LVM 卷导入(从硬盘启动时是自动由操作系统完成的,但是从LiveCD启动需要手工执行):

vgchange -a y

收缩root卷

本文的案例是收缩/home目录所在的/dev/mapper/fedora-home逻辑卷

/dev/mapper/fedora-home  165G  119G   39G  76% /home
$ sudo lvdisplay

  --- Logical volume ---
  LV Path                /dev/fedora/home
  LV Name                home
  VG Name                fedora
  LV UUID                MMkPEv-s16T-OGme-bndz-wwge-qcDr-CipZqW
  LV Write Access        read/write
  LV Creation host, time DevStudio, 2017-10-18 16:31:25 +0800
  LV Status              available
  # open                 1
  LV Size                168.25 GiB
  Current LE             43073
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/fedora/swap
  LV Name                swap
  VG Name                fedora
  LV UUID                6gTE0r-9MZr-nv4v-NMkG-UhKV-aks3-SjuNhg
  LV Write Access        read/write
  LV Creation host, time DevStudio, 2017-10-18 16:31:27 +0800
  LV Status              available
  # open                 2
  LV Size                <7.86 GiB
  Current LE             2011
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1
  • 退出所有会访问/home目录的账号(普通用户),然后以root身份登陆系统。这样可以确保没有进程访问/home,就可以卸载:

umount /home
  • 检查文件系统一致性

在缩减LVM卷之前,必须运行文件系统检查。如果没有做文件系统检查,会遇到不能进一步处理的错误信息。这将使得resize文件系统的步骤进入一个会导致数据丢失的错误状态。使用-f参数是强制进行检查,即使文件系统看上去是干净的,而使用-y参数表示如果有发现文件系统问题则直接修复

e2fsck -fy /dev/mapper/fedora-home
  • 缩小文件系统

为了能够安全缩减逻辑卷,建议将逻辑卷上的文件系统缩小到比将要缩小的逻辑卷更小一点。这样可以避免LVM逻辑卷比文件系统更小而导致数据丢失。此外,不用担心,最后步骤会回收这部分空间。

resize2fs /dev/mapper/fedora-home 157G

这里将fedora-home逻辑卷缩小到157G,比原先小11GB,以便能够把空间加给fedora-swap逻辑卷。

  • 缩减逻辑卷

lvreduce -L 158G /dev/mapper/fedora-home

这里设置LVM逻辑卷比文件系统大1G,避免数据损坏。也可以使用如下命令表示减小10G(即168-10)

lvreduce -L -10G /dev/mapper/fedora-home
  • 完成了LVM卷缩减以后,可以看到文件系统比LVM卷小,这样就浪费了一点空间。解决的方法是再次使用resize2fs命令,但是不带任何参数,则会自动把文件系统扩展到和LVM卷一样大小,就不会浪费空间了。

resize2fs /dev/mapper/fedora-home
  • 最后在挂载上文件系统

mount /dev/mapper/fedora-home /home

同样的操作也针对/dev/mapper/swapper操作,扩展swap空间:

swapoff /dev/fedora/swap
lvextend -L +10.25G /dev/fedora/swap
mkswap /dev/fedora/swap
swapon /dev/fedora/swap

参考

Last updated