在Hyper-V中使用LVM扩展磁盘

在我的实验室环境中,我有一台Ubuntu服务器12.04,我正在尝试增加其空间。LVM在启动时设置好了,在通过编辑磁盘向导添加了100GB后,我无法将该空间添加到分区中。我尝试使用Part Magic,但它不允许我扩展大小,尽管我确实看到了添加的空间。
fdisk -l给出的结果是:
Disk /dev/sda: 108.4 GB, 108447924224 bytes
255 heads, 63 sectors/track, 13184 cylinders, total 211812352 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00097307

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          501758    33552383    16525313    5  Extended
/dev/sda5          501760    33552383    16525312   8e  Linux LVM

Disk /dev/mapper/ubuntu--vg-root: 14.8 GB, 14751367168 bytes
255 heads, 63 sectors/track, 1793 cylinders, total 28811264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/ubuntu--vg-root doesn't contain a valid partition table

Disk /dev/mapper/ubuntu--vg-swap_1: 2143 MB, 2143289344 bytes
255 heads, 63 sectors/track, 260 cylinders, total 4186112 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/ubuntu--vg-swap_1 doesn't contain a valid partition table

我以前并没有真正使用过LVM,也不是一个Linux专家,所以我不确定接下来该怎么做,我正在寻找关于这个过程的教程。最终,我希望能够给引导分区添加一些空间。
感谢您花时间阅读这个问题,请告诉我是否还有其他细节可以提供。
3个回答

如果你想在没有图形界面工具的情况下完成这个操作,你可以使用parted
在我的系统上,我将根文件系统(位于dev/sda3)从128GB扩展到160GB。根据你的设置,调整下面的示例。所有命令都必须以root用户身份运行(使用sudo -i登录为root用户)。
事先,我的使用率为95%:
# df -h
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv  124G  113G  6.3G  95% /

使用Gen2虚拟机,一切都可以在线完成,而无需重新启动客户操作系统。每个步骤几乎是瞬间完成的。
首先,使用Hyper-V GUI或CLI工具扩展虚拟磁盘(最简单的方法是打开虚拟机的设置,选择SCSI控制器下的硬盘,然后选择“编辑”,然后选择“扩展”)。
接下来,您需要告诉Ubuntu重新扫描块设备,在这种情况下是sda:
# echo 1 > /sys/block/sda/device/rescan
然后,运行parted并选择p以进行打印。它应该会识别到分区表没有使用完整空间,并询问您是否要修复它,所以此时选择Fix。
# parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Warning: Not all of the space available to /dev/sda appears to be used, you can fix the GPT to use all of the space (an
extra 69206016 blocks) or continue with the current setting?
Fix/Ignore? Fix
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 172GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  538MB   537MB   fat32              boot, esp
 2      538MB   1612MB  1074MB  ext4
 3      1612MB  136GB   135GB

现在你需要实际扩展分区。在仍然使用 "parted" 的情况下,输入 "resizepart" 命令来完成此操作。在我的情况下,由于我正在扩展 "sda3",所以我告诉它将第三个分区的大小调整为可用空间的 100%。再次根据你的设置调整命令。
(parted) resizepart 3 100%
(parted) p
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 172GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  538MB   537MB   fat32              boot, esp
 2      538MB   1612MB  1074MB  ext4
 3      1612MB  172GB   170GB

(parted) quit

输入quit退出parted如果您正在使用LVM,现在需要告诉它扩展物理卷。 pvs显示物理卷的信息;使用pvresize来扩展它。如果没有给出参数,它将使用所有可用空间。
# pvs
  PV         VG        Fmt  Attr PSize    PFree
  /dev/sda3  ubuntu-vg lvm2 a--  <125.50g    0
# pvresize /dev/sda3
  Physical volume "/dev/sda3" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized
# pvs
  PV         VG        Fmt  Attr PSize    PFree
  /dev/sda3  ubuntu-vg lvm2 a--  <158.50g 33.00g

现在,您需要扩展逻辑卷以及文件系统本身。使用lvextend命令和-r选项可以同时完成这两个操作,前提是您正在使用它熟悉的文件系统,如ext3/4。
# lvs
  LV        VG        Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-ao---- <125.50g

# lvextend -l +100%FREE -r /dev/mapper/ubuntu--vg-ubuntu--lv
  Size of logical volume ubuntu-vg/ubuntu-lv changed from <125.50 GiB (32127 extents) to <158.50 GiB (40575 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 16, new_desc_blocks = 20
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 41548800 (4k) blocks long.

就是这样!现在验证一下文件系统是否看到了额外的空间:
# df -h
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv  156G  113G   38G  76% /

如果您没有使用LVM,您可以用resize2fs替换pvresize/lvextend步骤。一个简单的resize2fs /dev/sda3命令将告诉文件系统使用新增分区上的所有可用空间。 Teknophiles上的这篇文章详细介绍了这个过程,并附有Hyper-V工具的截图。(2021年12月更新:据说teknophiles.com现已关闭;更新后的链接指向site的archive.org快照。)

5这在一台第二代Ubuntu 20.04 LTS虚拟机上完美运行,该虚拟机使用了一个在Hyper-V 2019上调整大小的动态扩展磁盘。谢谢! - Andy Burton
1太棒了,完美运行,在Hyper-V 2019 + lvm上。 - garyj

截至2019年,我在尝试调整运行在Hyper-V上的Ubuntu 18.04虚拟机大小时遇到了一些问题。安装gparted: sudo apt install gparted, 运行它:sudo gparted 并通过应用程序的图形界面进行调整大小解决了我的问题。
gparted图形界面辅助:https://youtu.be/cDgUwWkvuIY?t=330 编辑:显然,这个方法在2021年1月仍然有效,因为最近有人给出了赞同。

工作得像魔法一样顺利! - Maarten Docter
我已成功使用gparted在由Hyper-V Manager(Windows 10 Enterprise)运行的Quick Create Ubuntu 20.04虚拟机中调整了磁盘空间分配。感谢Marcelo! - Taoufik Mohdit
在使用Hyper-V快速创建的Ubuntu 20上,sudo gparted对我来说无法正常工作。我只需运行gparted,然后它会提示我输入凭据,之后我就可以通过图形界面进行更改了。 - MikeyT
最近我在Ubuntu 22.04虚拟机上尝试了这个(2022年12月27日),使用gparted无法调整分区大小;所以我改用了Disks工具,结果非常顺利。 - Taoufik Mohdit

您可以使用 gparted 调整分区大小。在12.04版本中,您需要从livecd启动并在那里运行它,因为它无法调整已挂载的分区大小。在后续版本中,它可以在分区挂载的同时扩展许多分区。这只会为LVM提供更多空间以分配给逻辑卷。如果您想要扩展逻辑卷,可以运行例如 lvresize -L 30g ubuntu-vg/root 来增加根逻辑卷的大小到30g。然后,您需要告诉文件系统使用新空间,您可以使用 resize2fs /dev/ubuntu-vg/root 完成此操作,假设您正在使用默认的ext4文件系统。这两个后续步骤可以在线执行,而无需从其他媒体引导。您还可以在 lvresize 中指定 100% 而不是 30g 来使用所有可用空间,但这有点违背了最初使用LVM的目的,即将所有空间分配给一个逻辑卷,因为您没有任何剩余空间来创建快照、新的逻辑卷或以后扩展一些卷的空间。

非常感谢您的回复。我最终使用了gparted iso进行引导,并增加了空间大小。当我登录系统时,它仍然显示相同的空间,但是使用您发布的命令后问题得到了解决。再次感谢您,先生。 - Joseph Barker
@JosephBarker,不用谢。请勾选答案旁边的复选框以接受它。 - psusi