如何调整LVM分区的大小?(即物理卷)

我想收缩我的第二个(LVM)分区,以便在新释放的空间中创建一个新的分区。我正在使用Live CD来进行操作,因为我知道在使用中无法调整/移动该分区。当我在Live CD中打开GParted时,我发现无法调整分区大小,因为右键单击它时,“调整大小/移动”选项被禁用。

我尝试卸载它,或者"懒惰"卸载它(umount -l /dev/sda2),但没有成功。

GParted的屏幕截图:

GParted screenshot

8个回答

在尝试此操作之前,请备份所有重要数据。始终假设在调整分区大小时可能会丢失所有数据。 无数据丢失的缩小LVM 本论坛帖子建议以下步骤,以此示例中我们将一个分区从10G缩小到9G:

First, we unmount.

sudo umount /dev/vg_blah/lv_blah

Check the file system.

sudo e2fsck -f /dev/vg_blah/lv_blah

Resize the file system and the logical volume. Doing this in one step can avoid mistakes which cause dataloss. (Note lvreduce parameter -L interprets G as 2^30 bytes and g as 10^9 bytes.)

sudo lvreduce --resizefs -L 9G /dev/vg_blah/lv_blah

(optional) Remove a physical drive from the volume group if desired (if you now have an unused drive).

sudo vgreduce vg_blah /dev/sdxy
所有的功劳归功于brianmcgee
注意:如果您在磁盘末尾有另一个逻辑卷(lv),那么vgreduce命令将失败,并显示“无法调整大小到xxxxx范围,因为后续范围已分配”。我之前有一个交换逻辑卷,我已经删除了它。请参考如何缩小Ubuntu LVM逻辑和物理卷?获取帮助。

1e2fsck -f /dev/vg_blah/lv_blah 返回的信息是:"e2fsck: 在尝试打开 /dev/sda2 时发生设备或资源忙碌的错误。文件系统被另一个程序以独占方式挂载或打开了吗?" resize2fs 的情况也是一样的。 - Idan Yadgar
它被卸载了吗?你在命令中具体输入了什么(我猜你没有输入vg_blah)? - pzkpfw
是的,它已经卸载了。我输入了e2fsck -f /dev/sda2 - Idan Yadgar
12答案缺少如何调整物理卷大小的部分。此外,我强烈建议将两个调整大小的步骤合并为一个,使用 lvreduce -r 命令。 - Flimm
5此外,你需要明白的是,在lvreduce中,“1G”代表10亿字节,而在resize2fs中则表示1吉比字节。如果你想传递1吉比字节给lvreduce,请使用“1g”。 - Flimm
2你不需要使用vgreduce命令,那个是用来从卷组中移除物理卷的。 - psusi
2我强烈怀疑lvreduce在差分模式下使用G = gibibyte。在绝对模式下,它确实是这样的。它的手册写得很糟糕,没有解释单位的含义,我认为这几乎是犯罪般的疏忽。 - Urhixidur
使用lvresize --resizefs -L 9G /dev/vg_blah/lv_blah(或-L -1G)而不是两个单独的命令来调整逻辑卷和文件系统的大小。 - STW
@Flimm 你错了,lvreduce将G解释为GiB(2^30字节)。 - Aleksandr Dubinsky
这个方法,结合了http://askubuntu.com/a/604305/106119,对我来说有效。 - Erhannis
这个答案似乎是在讨论调整逻辑卷的大小,而问题实际上是在谈论调整物理卷的大小。 - Stefan
要获取卷路径并避免出现“无效的逻辑卷路径”错误,请使用lvdisplay命令。在使用GParted live CD进行分区时,我的卷路径是/dev/myHost/root/ - Matthias Braun
如果您通过SSH连接,我强烈建议您使用SCREEN或类似的应用程序。这样做是一个好主意,可以确保连接问题不会导致数据丢失。 - PocketSam
当然不会导致数据丢失。 - PocketSam
我已将此答案标记为社区共享,欢迎您进行改进。 - pzkpfw

你可以使用一个图形界面工具 system-config-lvm 来轻松地收缩/扩展逻辑卷。由于 system-config-lvm 不是预装的,所以在从光盘启动后,你需要安装它:
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe"
sudo apt-get update
sudo apt-get install system-config-lvm

安装完成后,运行程序,在左侧面板中选择您想要更改的逻辑卷,然后点击“编辑属性”。

Main Logical Volume Management program GUI

现在按照您的意愿更改参数!

Edit Logical Volume window

关于system-config-lvm的一个好处是,如果新分区的大小小于所有现有数据的总和,它将不允许您继续操作(我刚刚尝试过并亲眼见证了这一点)。
参考资料:
  1. How-To Geek教程(这是图片的来源)。
  2. Red Hat的完整指南

2GUI绝对是可行的方式,不过你可能需要从一个live CD上运行它。 - Mike
我有点不同意。使用system-config-lvm来缩小LVM逻辑卷的风险肯定比在先前文件系统调整大小后使用lvresize -rlvresize更大。 - 203967
不要忘记在添加仓库和调用apt-get install之间进行apt-get update,否则它将无法找到。 - krystan honour
11为什么 system-config-lvmlvresizelvresize -r 更危险? - Thufir
1你也可以尝试使用blivet-guigithubUbuntu PPA),这是一款处理LVM驱动器的下一代分区管理工具。 - bain
5请注意,system-config-lvm使用的是1024的幂单位,尽管使用了(不正确的)“gigabyte”这个词。它真的应该像palimpsest(也称为磁盘工具)一样,明确指定其含义为无歧义的字节单位。 - Urhixidur
那怎么帮助OP调整物理卷的大小问题呢? - Stefan
system-config-lvm 自 17.10 版本之后不再提供。 - Suncatcher
4@Suncatcher 在17.10和18.04版本中,您需要添加Xenial软件源。 sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu xenial universe" - m93a
2在Ubuntu 20.04 LTS的Live CD上,我在添加xenial软件源后遇到了未满足的依赖问题。 - JC1
如果你使用的是一个实时服务器 CD,这个方法不会起作用,你需要使用一个实时桌面 CD。楼主应该提到你需要使用一个带有桌面环境的实时桌面 CD 才能使这个方法生效。 - Dave

注意:你应该使用Live CD来运行几乎所有以下的命令。有时候,它会要求你卸载已经挂载在/上的分区(在这种情况下,你无法卸载它)。
以下是调整LVM或LVM2分区所需的所有步骤:
sudo lvresize --verbose --resizefs -L -150G /dev/mapper/ubuntu

sudo pvresize --setphysicalvolumesize {some-space} /dev/sda5

如果第二个命令产生类似这样的结果:
/dev/sda5: cannot resize to xxxxx extents as later ones are allocated.

然后,您需要重新安排LVM末尾的未分配空间。这意味着在root和swap_1分区之后。因此,最初,您需要使用以下命令检查物理卷的信息:
sudo pvs -v --segments /dev/sda5

这将显示输出如下:
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g   0 xxx root 0 linear /dev/sda:0-rrr
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g xxx sss 0 free                          
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g zzz ttt swap 0 linear /dev/sda5:yyy-www

注意 yyy-www。使用以下命令来消除外部碎片化:
sudo pvmove --alloc anywhere /dev/sda5:yyy-www

现在,让我们看看它是如何进行的:
sudo pvs -v --segments /dev/sda5

这将显示输出,如下所示(请注意更改):
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g   0 xxx root 0 linear /dev/sda:0-rrr
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g xxx ttt swap 0 linear /dev/sda5:xxx-sss
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g yyy www 0 free

在这之后,使用GParted工具,将LVM分区调整到最大已使用空间,并将剩余空间变为未分配空间。尽情享受吧...

我不得不从GParted开始,因为“lvresize”报告“空间不足”,没有可用的范围。我使用的是在VirtualBox 6.1中运行的Ubuntu 18.04 Live CD,并且LVM是由Ubuntu 18.04服务器安装创建的。 - MrMas
这在我的Fedora 32上简直神奇!! - bua

我偶然发现了这个答案,但至少对我来说有效。 在我的情况下,根目录后面已经有一个保留的未分配磁盘空间,所以我跳过了如何获取更多空间的部分,只是解释了如何在不启动的情况下将其用于根目录。
注意:与其使用gparted,你可能最好使用system-config-lvm。下次我会选择使用那个... 我的gparted版本是0.18。
  1. 首先,我使用gparted尽可能扩展根分区。令我惊讶的是,它只扩展了物理大小,对逻辑部分没有任何影响。因此,df -k命令仍然显示磁盘已满。
  2. lvresize -l +100%FREE /dev/ubuntu-vg/root 尽可能扩展逻辑分区。无需检查和计算各种方法中的GB或块。
  3. 然后,我进行了第三步:resize2fs /dev/ubuntu-vg/root 将文件系统扩展到逻辑分区的大小。
最后一步可以合并到第二步中。 lvresize -l +100%FREE --resizefs /dev/ubuntu-vg/root

这可以让您缩小逻辑卷,但OP的问题是关于缩小物理卷。 - Stefan
1你救了我的命。 - Quang Hà

我会推荐另一个图形用户界面工具 - KVPM。它结合了GParted和system-config-lvm的功能。此外,它还允许对已挂载的分区进行一些操作,而system-config-lvm则不允许。然而,要缩小卷,必须先卸载它。

enter image description here enter image description here

它自Ubuntu 12.04起在宇宙仓库中,所以只需执行sudo apt-get install kvpm

注意:以root权限启动sudo kvpm


这个软件包不在宇宙仓库中:E: 无法定位软件包 kvpm - Jeff Puckett
这对我很有用,而“system-config-lvm”没有加载任何连接的设备/驱动器/文件系统。另外还有一个额外的好处是不需要下载额外的软件源,并且已经预先配置在我的Ubuntu机器上。此外,它也比Gparted更有效,因为Gparted会报错说文件系统被缩小得太多。(我正在将RetroOrangepi SD卡从32GB调整为8GB以备份目的) - user649578
看起来不错,如果你还没有使用KDE,可能需要额外大约100兆的存储空间来满足其他的依赖关系。 - Xen2050

只有最新版本的Gparted(0.14)支持调整LVM物理卷的大小。随附在Ubuntu 12.10或13.04中的版本不支持此功能。
以下是调整LVM物理卷大小的步骤:
  1. 如果与LVM物理卷关联的卷组没有足够的未分配空间,您需要通过缩小逻辑卷来释放一些空间。请参考bigbadonk420's answer中的说明进行操作。如果您更喜欢图形界面,也可以使用Ubuntu附带的GNOME Disks进行部分步骤。

  2. 从GParted网站上下载并刻录最新的.iso镜像文件到光盘或USB闪存驱动器。从光盘或USB闪存驱动器启动计算机。或者,您也可以从源代码编译最新版本的GParted。

  3. 使用GParted调整LVM物理卷的大小。GParted不允许将LVM物理卷缩小到比未分配空间更小的尺寸。


谢谢Flimm。我原本期望12.10版本有足够新的gparted版本。你的回答指引了我正确的方向。 - Martijn Heemels
1我得到了最新的 GParted,但它不允许我更改分区大小... 我有类型为 ext2 的 /dev/sda2 分区,并且在其下面有类型为 lvm2 的 /dev/sda5。但是 GParted 显示两者的最小和最大大小相同,因此不允许我进行更改... :-( - Paul
还可以使用LVM2套件中的pvresize命令,对吗? - 203967
@Paul 你解决了吗?我也有完全相同的问题 :S - Castiblanco
@Castiblanco 我没有解决它,最后我把整个东西都擦掉了,重新安装而没有使用LVM。对我来说,这是一个教训:不要在标准桌面安装中使用LVM。 - Paul
@paul 我刚刚也是这么做的哈哈 - Castiblanco
pvresize似乎只能移动物理卷的末尾。那么如何移动物理卷的起始位置呢? - Stefan

除了@bigbadonk420答案之外, 不要做以下事情:
resize2fs -p /dev/vg_blah/lv_blah 9G
lvreduce -L -1G /dev/vg_blah/lv_blah

做:

lvreduce -r -L 9G /dev/vg_blah/lv_blah

请注意-r选项,它可以同时减小文件系统并确保安全。

但这并不会减小实际体积。 - Stefan

关于当前得票最多的答案的警告: 为了不破坏您的全新默认安装(14.04 Trusty Tahr)中的LVM选项,1)请阅读整个页面,2)删除交换空间3)并可能修改“减小逻辑卷大小”的命令,如下所示:
lvreduce -L -1g /dev/vg_blah/lv_blah

我强烈推荐使用system-config-lvm

再次,OP希望减少一个物理体积。 - Stefan