当 /dev/sda 已经较大时,调整 VirtualBox VMDK 中 Ubuntu /dev/sda1 分区的大小

当 /dev/sda 已经较大时,调整 VirtualBox VMDK 中 Ubuntu /dev/sda1 分区的大小

前段时间,我创建了一个 VMDK,它被映射到 SSD 上的原始分区。

SSD 是 128GB 的​​,我在 Windows(主机)中对其进行了分区,使第二个分区可供 Windows(NTFS)访问,并使用第一个分区将其映射到 VMDK。

第一个分区的大小约为 48GB。

/dev/sda当我在使用该 VMDK 的 VM 中安装 Ubuntu Server 时,我注意到显示的大小为 128GB,但我在 Ubuntu 安装期间创建的分区与第一个分区的大小相同,因此/dev/sda1为 48GB。

由于空间不足/dev/sda1(有 5GB 可用),我购买了另一个 SSD,并决定停止使用原始映射。我通过虚拟媒体管理器将 VMDK 复制到新的 SSD 上,所以我现在有一个大约 44GB 的 VMDK 文件(不要太精确,这是 MiB vs GiB vs GB 的问题)。

然后我用新复制的 VMDK 替换了虚拟机的硬盘并启动了它。它按预期运行。

现在我有这个:

:~$ cat /proc/partitions
major minor  #blocks  name

  11        0      58100 sr0
   8        0  125034840 sda
   8        1   46873600 sda1
   8       16  488386584 sdb
   8       17  181189085 sdb1

~$ sudo fdisk -l
Disk /dev/sda: 119.2 GiB, 128035676160 bytes, 250069680 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
Disklabel type: dos
Disk identifier: 0x000271d1

Device     Boot Start      End  Sectors  Size Id Type
/dev/sda1  *     2048 93749247 93747200 44.7G 83 Linux


Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 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
Disklabel type: gpt
Disk identifier: 59B4B505-C79F-11E3-8F9C-709E29CA19D2

Device     Start       End   Sectors   Size Type
/dev/sdb1     34 362378204 362378171 172.8G Linux filesystem

和这个

:/$ df -h
Filesystem       Size  Used Avail Use% Mounted on
udev             7.9G     0  7.9G   0% /dev
tmpfs            1.6G  9.1M  1.6G   1% /run
/dev/sda1         44G   37G  5.1G  88% /
tmpfs            7.9G  1.1M  7.9G   1% /dev/shm
tmpfs            5.0M     0  5.0M   0% /run/lock
tmpfs            7.9G     0  7.9G   0% /sys/fs/cgroup
windows-avconv   1.9T  1.8T  103G  95% /home/user/windows-avconv
windows-storage  1.9T  1.8T  103G  95% /home/user/windows-storage
windows-share     50G  101M   50G   1% /home/user/windows
cgmfs            100K     0  100K   0% /run/cgmanager/fs
/dev/sdb1        170G   91G   72G  56% /media/hdd
tmpfs            1.6G     0  1.6G   0% /run/user/1000

所有这些似乎表明我可以发出一个

sudo resize2fs /dev/sda1

然后/dev/sda1会增长到 119.2 GiB,而我不需要使用VBoxManage modifyhd <absolute path to file> --resize <size in MB>

我的这个假设正确吗?


更新:我制作了 VMDK 的备份,并发布了

:~$ sudo resize2fs /dev/sda1

结果如下:

resize2fs 1.42.13 (17-May-2015)
The filesystem is already 11718400 (4k) blocks long.  Nothing to do!

我是否需要发出

sudo growpart /dev/sda 1

之前resize2fs可以工作吗?

答案1

您必须首先按照以下步骤调整分区大小:

  1. sudo parted /dev/sda以超级用户身份输入提示符“(parted)”
  2. resizepart 1调整分区大小1
  3. -0将其调整到磁盘末尾。-表示应从磁盘末尾计算,而不是从开头计算。这使 -0 成为磁盘的最后一个扇区 - 当您想使其尽可能大时,这很合适。步骤 4:
  4. quit退出

文件系统元信息需要指示磁盘的大小,resize2fs 会更新此信息。因此,扩容后,运行resize2fs /dev/sda1

强烈建议在单用户模式/恢复模式下执行此操作,或者在文件系统以只读模式挂载的情况下执行此操作。您可以通过 以只读方式挂载它mount -o remount,ro /dev/sda1

扩展可以对处于 RW 模式的文件系统执行此操作,但这会增加数据丢失的可能性。由于这是虚拟机,并且您可以轻松进行备份,因此使用挂载 RW 的卷执行此操作可能有意义。

附录:以 root 身份运行命令以获得预期效果。

相关内容