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

Dan*_*l F 7 partitioning virtualbox vmdk

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

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

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

然后,当我在使用该 VMDK 的 VM 中安装 Ubuntu Server 时,我注意到/dev/sda显示给我的大小是 128GB,但我在 Ubuntu 安装期间创建的分区为第一个分区的大小,所以这/dev/sda1是48GB。

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

然后我用新复制的 VMDK 替换了 VM 的 HDD 并启动了它。它按预期工作。

现在我有这个:

:~$ 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
Run Code Online (Sandbox Code Playgroud)

这个

~$ 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
Run Code Online (Sandbox Code Playgroud)

和这个

:/$ 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
Run Code Online (Sandbox Code Playgroud)

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

sudo resize2fs /dev/sda1
Run Code Online (Sandbox Code Playgroud)

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

我对这个假设是否正确?


更新:我制作了 VMDK 的备份副本并发布了一个

:~$ sudo resize2fs /dev/sda1
Run Code Online (Sandbox Code Playgroud)

这是结果:

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

我需要发出一个

sudo growpart /dev/sda 1
Run Code Online (Sandbox Code Playgroud)

之前resize2fs可以工作吗?

vid*_*rlo 15

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

  1. sudo parted /dev/sda 以超级用户身份输入提示“(parted)”
  2. resizepart 1 调整分区大小 1
  3. -0将其大小调整到磁盘的末尾。-表示它应该从磁盘的末尾开始计数,而不是从开始。这使得 -0 成为磁盘的最后一个扇区 - 这适用于您想要使其尽可能大的情况。第四步:
  4. quit 退出分手

文件系统元信息需要指明磁盘的大小,resize2fs 更新这个。因此,在展开之后,运行resize2fs /dev/sda1.

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

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

附录:以 root 身份运行命令以获得所需的效果。

  • “`错误:不能有重叠分区。`”当使用“`-0`”时,我不得不删除我的 ext 部分+交换分区(它没有被使用)。 (2认同)