VirtualBox动态磁盘无法扩展到虚拟大小。

我在VirtualBox 4.2.4上运行着Ubuntu 12.04,使用的是一个动态VDI磁盘,限制为8GB,而实际的ext4分区有超过40GB的空闲空间。然而,VDI并没有扩展到限制的大小。对于我想要做的事情来说,8GB已经足够了。
我该如何让剩余的空间可用?/和.home目录中的可用空间只有41KB。

vm

vdi


这是一个错误吗? - jeremyjjbrown
我的巧妙解决方法是只需添加另一个虚拟驱动器。顺便说一下,我没有亲自测试过这个,但这个页面表明问题的原因是交换分区位于主分区之后。下次我安装Ubuntu客户机时,我将尝试重新安排分区并发布后续内容。 - Андрей Беньковский
你可能创建了一个太小的分区,导致磁盘已满。 - Dr_Bunsen
7个回答

我通过在Windows 7主机上设置路径来修复了我的VirtualBox虚拟机(步骤):
1. 点击开始按钮 2. 右键点击计算机 3. 点击属性 4. 点击高级系统设置 5. 在[高级]选项卡上点击[环境变量]按钮 6. 在系统变量下,向下滚动到路径并点击[编辑] 7. 将引号中的内容添加到行末尾";C:\Program Files\Oracle\VirtualBox\" 8. 点击[确定]
接下来,转到VirtualBox磁盘的目录(位于用户名\VirtualBox VMs) 从(https://forums.virtualbox.org/viewtopic.php?f=7&t=52351)获取
1. 打开命令提示符并切换到VirtualBox驱动器 2. 输入以下命令:VBoxManage showhdinfo 3. 记下磁盘的UUID。 4. 输入以下命令:VBoxManage modifyhd UUID_of_the_VDI_disk --resize 80000(这将使磁盘大小为80GB,请根据您的需求调整大小)

重要步骤从这里开始: 接下来在虚拟机上启动LiveCD(安装光盘) (取自使用未分配空间扩展Ubuntu分区大小(交换区位于这两者之间)

我再次强调:

强烈建议在进行调整/移动/扩展操作之前备份任何重要文件。

具体操作方法是先删除交换区分区,然后扩展所需的分区,最后重新创建交换区分区。

只有在关闭交换区后才能删除交换区分区:

关闭交换区:sudo /sbin/swapoff -a 打开交换区:sudo /sbin/swapon -a

步骤如下:

  1. 从Ubuntu LiveCD启动
  2. 打开终端,关闭交换区
  3. 安装GParted
  4. 扩展所需的分区,但保留空间给交换区
  5. 提交更改
  6. 创建交换区分区
  7. 打开交换区
注意:如果您的交换空间不是您的主硬盘,请参阅SwapFaq以了解如何激活交换分区。
在进行调整/移动/扩展操作之前,强烈建议备份任何重要文件。

VirtualBox动态磁盘无法利用可用的空闲磁盘空间自动扩展分区

本文针对运行在Virtualbox 6.1.6上的Ubuntu Server 18.04客户操作系统编写。

我认为这个问题的正确描述应该是:

“虽然创建了一个32GB的动态磁盘,但操作系统分区在约4GB处出现“磁盘已满”消息,并且不能通过利用32GB动态磁盘中的28GB“空闲”空间自动增加其大小。”

如果您遇到了这个问题,并且使用了Ubuntu Linux和LVM(以及EXT4文件系统)设置了客户操作系统,则解决此问题的方法是使用lvextendresize2fs命令。请参阅下面的解决方案和说明:

启动虚拟机并登录。进入后打开终端。

显示有关已分配的磁盘存储的信息: $ df -h
文件系统 大小 已用 可用 使用% 挂载点 udev 966M 0 966M 0% /dev tmpfs 200M 1.1M 199M 1% /run /dev/mapper/ubuntu--vg-ubuntu--lv 3.9G 2.9G 835M 78% / tmpfs 997M 0 997M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 997M 0 997M 0% /sys/fs/cgroup /dev/loop0 97M 97M 0 100% /snap/core/9436 /dev/loop1 97M 97M 0 100% /snap/core/9665 /dev/sda2 976M 212M 697M 24% /boot tmpfs 200M 0 200M 0% /run/user/1000

输出显示根分区(/)的大小为3.9G,其中2.9G(78%)已被使用。

  1. 显示块设备的信息:

    $ lsblk

    名称 主:次 RM 大小 RO 类型 挂载点
    loop0 7:0 0 96.5M 1 loop /snap/core/9436
    loop1 7:1 0 97M 1 loop /snap/core/9665
    sda 8:0 0 32G 0 磁盘
    ├─sda1 8:1 0 1M 0 分区
    ├─sda2 8:2 0 1G 0 分区 /boot
    └─sda3 8:3 0 31G 0 分区
    └─ubuntu--vg-ubuntu--lv 253:0 0 4G 0 lvm /
    sr0 11:0 1 1024M 0 rom

输出显示块设备sda的物理大小为32GB。它包含3个分区(sda1、sda2和sda3)。根分区(/)挂载在sda3的逻辑卷上,只分配了4GB的存储空间。这意味着还有大约27GB的未分配(空闲)存储空间,我们可以用来扩展LVM的逻辑卷。
3. 在块设备上显示文件系统信息: $ lsblk --fs 名称 文件系统类型 标签 UUID 挂载点 loop0 squashfs /snap/core/9436 loop1 squashfs /snap/core/9665 sda ├─sda1 ├─sda2 ext4 7cafee4a-d300-4b17-957d-c822c73882fc /boot └─sda3 LVM2_member GwPZus-EMpD-BgZw-e1Nx-Fd9J-LLeN-XnbvEE └─ubuntu--vg-ubuntu--lv ext4 dcc015b4-b6b8-4e05-9a18-93c263cc05ed /
输出显示LVM根分区的文件系统为ext4。
4. 显示物理卷信息: $ sudo pvs PV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <31.00g <27.00g $ sudo pvdisplay --- 物理卷 --- PV 名称 /dev/sda3 VG 名称 ubuntu-vg PV 大小 <31.00 GiB / 不可用 0 可分配 是 PE 大小 4.00 MiB 总 PE 数 7935 可用 PE 数 6911 已分配 PE 数 1024 PV UUID GwPZus-EMpD-BgZw-e1Nx-Fd9J-LLeN-XnbvEE
输出提供了关于LVM PV sda3上分配/未分配空间的另一种视角。
5. 显示卷组信息: $ sudo vgs VG #PV #LV #SN 属性 VSize VFree ubuntu-vg 1 1 0 wz--n- <31.00g <27.00g $ sudo vgdisplay --- 卷组 --- VG 名称 ubuntu-vg 系统 ID 格式 lvm2 元数据区域数 1 元数据序列号 2 VG 访问权限 读/写 VG 状态 可调整大小 最大 LV 数 0 当前 LV 数 1 打开的 LV 数 1 最大 PV 数 0 当前 PV 数 1 活动 PV 数 1 VG 大小 <31.00 GiB PE 大小 4.00 MiB 总 PE 数 7935 已分配 PE / 大小 1024 / 4.00 GiB 可用 PE / 大小 6911 / <27.00 GiB VG UUID vBmSeb-VWR8-7A8n-CBSa-UnKd-FmJG-LTtMUG
输出显示VG大小与PV大小相同(31GB),并且有27GB未分配的可用存储空间来扩展逻辑卷。
6. 显示逻辑卷信息: $ sudo lvs LV VG 属性 LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert ubuntu-lv ubuntu-vg -wi-ao---- 4.00g $ sudo lvdisplay --- 逻辑卷 --- LV 路径 /dev/ubuntu-vg/ubuntu-lv LV 名称 ubuntu-lv VG 名称 ubuntu-vg LV UUID pnvBcu-FnfT-c3RY-cYCE-AuMX-f833-57WvYi LV 写入权限 读/写 LV 创建主机,时间 ubuntu-server, 2020-07-01 00:00:58 +0000 LV 状态 可用 #打开 1 LV 大小 4.00 GiB 当前 LE 1024 段数 1 分配方式 继承 预读扇区数 自动 -当前设置为 256 块设备 253:0
输出显示LV大小为4GB。由于VG大小为31GB,我们可以再增加27GB来扩展LV
7a. 使用50%(13GB)的未分配空间来扩展逻辑卷(ubuntu-lv),首先执行以下操作:
$ sudo lvextend -l+50%free /dev/ubuntu-vg/ubuntu-lv

Size of logical volume ubuntu-vg/ubuntu-lv changed from 4.00 GiB (1024 extents) to 17.50 GiB (4480 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.


The output shows that the logical volume has grown from 4GB to 17.5GB (approximately 13GB).

7b. 最后,为了让EXT4文件系统意识到扩展的存储空间,请运行以下命令:
$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 3
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 4587520 (4k) blocks long.

再次显示有关已分配磁盘存储的信息,以检查新的磁盘存储空间: $ df -h
文件系统 容量 已用 可用 使用% 挂载点 udev 966M 0 966M 0% /dev tmpfs 200M 1.1M 199M 1% /run /dev/mapper/ubuntu--vg-ubuntu--lv 18G 2.9G 14G 18% / tmpfs 997M 0 997M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 997M 0 997M 0% /sys/fs/cgroup /dev/loop0 97M 97M 0 100% /snap/core/9436 /dev/loop1 97M 97M 0 100% /snap/core/9665 /dev/sda2 976M 212M 697M 24% /boot tmpfs 200M 0 200M 0% /run/user/1000
输出显示逻辑卷的大小现在增长到18GB(之前为4GB)。

1谢谢,第7b部分是我这种情况下的缺失环节。EXT4对新空间不知情。 - GameDroids

在运行虚拟机中的Ubuntu Gnome 15.04上,我遇到了与Ubuntu 15.04相同的问题。尽管它被设置为“动态分配存储”,但VirtualBox并没有增加它的大小,导致我只剩下100MB的空间,无法通过软件更新进行更新。解决办法是通过终端执行更新操作。
sudo apt-get upgrade

这似乎迫使VirtualBox创建额外的存储空间,一旦更新开始,可用空间立即增加到500MB。

这真是奇怪。我运行了dpkg -iapt-get update,收到一个关于空间不足的消息,但在Ubuntu Gnome 16.04上apt-get upgrade却可以正常工作。 - Josiah

/tmp将成为一个tmpfs,即存储在RAM中的文件系统。所以,除非你分配了大约800MB的空闲RAM给你的虚拟机,否则它将不足以容纳ISO文件。

这可能不是你想要的:只需将ISO文件保存在一个“真实”的目录中(例如/home/<username>),它应该可以正常工作。


如果我试图将1GB以上的文件加载到MongoDB中,而虚拟机内存设置为1024,那么我很可能会遇到相同的问题吗? - jeremyjjbrown
文件存储在哪里?如果是磁盘支持的,那么不需要 - MongoDB 应该分块读取文件并加载它,而不是一次性加载整个文件。通过将 ISO 存储在 /tmp 中,您强制操作系统将整个 ISO 存储在内存中。 - Jay
dbpath=/var/lib/mongodb 我从操作系统收到了计算机磁盘空间不足的消息。显然,我的镜像是误导性的。 - jeremyjjbrown

看起来与您的虚拟磁盘的增长无关,因为您应该收到VirtualBox的错误消息,告诉您无法为虚拟磁盘分配更多的磁盘空间。

一些想法:

  • 您在虚拟机中使用了特殊的分区方案吗?
  • 您的虚拟机中df -h的结果是什么?
  • 您可以使用baobab来查找占用所有/空间的内容。

+1 for baobab. 虽然它没有告诉我为什么vdi不会生长,但它将在未来有用。 - jeremyjjbrown
谢谢。根据我了解,你的虚拟桌面基础设施(VDI)没有增长,是因为其中的操作系统并不需要它增长。我的意思是,在你的虚拟机中,/tmp 或者甚至根目录 (/) 的文件系统可能已经满了。文件系统不会自动扩展。请问 df -h 命令显示什么? - Christophe Drevet

尝试设置一个共享文件夹,这可能是解决您问题的方法。
1. 从VirtualBox进入您的虚拟机设置 > 共享文件夹,并添加一个新的共享文件夹;选择在主机机器上的路径,命名为 "FOLDER_NAME",并勾选 "自动挂载" 和 "永久性"。
2. 安装Guest Additions;请参考this了解如何安装。
3. 在您的虚拟机中创建一个文件夹,指向主机上创建的共享文件夹,只需创建一个新的文件夹,例如 "/home/"your_user_name"/shared"。
4. 挂载共享文件夹:sudo mount -t vboxsf "FOLDER_NAME" /home/"your_user_name"/shared。
5. 若要使挂载自动化,在 "/etc/rc.local" 的末尾添加 "mount -t vboxsf "FOLDER_NAME" /home/"your_user_name"/shared",在 "exit 0" 之前。

请问您能描述一下如何回答问题才能使其成为一篇值得保留的好答案吗? - David Foerster
我在编辑后的回答上添加了细节。 - Yahya Yahyaoui

你可以使用这个简单的解决方案: 在你的终端中输入以下命令
VBoxManage.exe modifyhd "path-of-your-disk" --resize 20000

你可以在虚拟机/存储/你的虚拟机.vbi的配置下找到磁盘路径(右侧路径)。

1他可能在虚拟机中创建了一个分区,因此调整磁盘大小只会对主机产生影响。 - Dr_Bunsen
所以这不是关于虚拟机监控程序!他应该修改虚拟机内部的分区...!! - rivolity
确实,那就是我想表达的意思。 - Dr_Bunsen