> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [blog.csdn.net](https://blog.csdn.net/sanallen/article/details/78996253) ### 参考文档 1. [VMware 下 ubuntu 扩展磁盘空间](http://blog.csdn.net/openrd/article/details/51405884) 提示: **本文档的适用范围为 Vmware+Ubuntu 的开发环境** [嵌入式](https://so.csdn.net/so/search?q=%E5%B5%8C%E5%85%A5%E5%BC%8F&spm=1001.2101.3001.7020)开发中一般会使用 Vmware 中安装 Ubuntu 虚拟机来进行软件开发,为了提高虚拟机的磁盘性能推荐在创建虚拟机的时候采用预先分配磁盘的方式,如下图所示: ![](assets/Pasted%20image%2020220623023004.png) 如上图提示文字如果立即分配所有磁盘空间可以提高性能,但是随之带来的问题就是当创建[虚拟机](https://so.csdn.net/so/search?q=%E8%99%9A%E6%8B%9F%E6%9C%BA&spm=1001.2101.3001.7020)时的磁盘空间不够用时扩容比较麻烦。下面将具体分析在预先分配磁盘的情况如何进行磁盘扩容。 首先在预先分配磁盘空间的基础上再分配新的空间 (示例从 85GB 扩展 90GB) ![](assets/Pasted%20image%2020220623023043.png) 点击扩展按钮,经过一段比较长时间的等待之后新磁盘的分配申请工作已经完成,但是如界面提示 “扩展操作仅增加磁盘的大小,分区和文件系统的大小不受影响” 所示还需要进入到 [Ubuntu](https://so.csdn.net/so/search?q=Ubuntu&spm=1001.2101.3001.7020) 系统中进行文件系统分区的大小调整 **提示:所有 Ubuntu 分区相关操作需要在 root 用户下进行** 查看现有磁盘相关信息:**fdisk -l** **建议记录现在的磁盘情况供之后重新分配分区参考** ```sh root:~#fdisk -l Disk /dev/sda: 90 GiB, 96636764160 bytes, 188743680 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: 0x6a1fff92 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 174065663 174063616 83G 83 Linux /dev/sda2 174067710 178255871 4188162 2G 5 Extended /dev/sda5 174067712 178255871 4188160 2G 82 Linux swap / Solaris ``` 从 fdisk 命令的信息来看可以发现 / dev/sda 的空间已经扩展为 90GiB,但是 Ubuntu 下面的 / dev/sda1、/dev/sda2、/dev/sda5 分区依然是按照扩展前的 85GiB 来分布的,所以现在的思路是**先删除掉现有分区然后根据新的磁盘空间来重新创建分区** 关闭交换分区功能 ```sh root@ubuntu:# swapoff -a ``` 确保交换分区已经关闭:Swap 行全部为 0 ```sh root@ubuntu:# free -m total used free shared buff/cache available Mem: 1982 630 467 14 885 1110 Swap: 0 0 0 ``` 使用 fdisk 命令删除所有分区 ```sh root@ubuntu:~# fdisk /dev/sda Welcome to fdisk (util-linux 2.27.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Partition number (1,2,5, default 5): 1 Partition 1 has been deleted. Command (m for help): d Partition number (2,5, default 5): 2 Partition 2 has been deleted. Command (m for help): p Disk /dev/sda: 90 GiB, 96636764160 bytes, 188743680 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: 0x6a1fff92 ``` 重新创建分区 ```shell Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (1-4, default 1): First sector (2048-188743679, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-188743679, default 188743679): 184555520 Created a new partition 1 of type 'Linux' and of size 88 GiB. Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (2-4, default 2): First sector (184555521-188743679, default 184557568): Last sector, +sectors or +size{K,M,G,T,P} (184557568-188743679, default 188743679): Created a new partition 2 of type 'Linux' and of size 2 GiB. Command (m for help): p Disk /dev/sda: 90 GiB, 96636764160 bytes, 188743680 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: 0x6a1fff92 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 184555520 184553473 88G 83 Linux /dev/sda2 184557568 188743679 4186112 2G 83 Linux ``` 这里 sda1 的 End 需要通过计算得到,计算方法为 / dev/sda 总 Sector 数 - 交换分区占用 Sector 数 ```sh /dev/sda总Sector数可以从之前保存的分区信息得到为188743680 交换分区占用Sector数为4188160 新的sda1分区的End位置为188743680-4188160=184555520 ``` 更新 sda2 分区的 Id ```sh Command (m for help): t Partition number (1,2, default 2): Partition type (type L to list all types): 82 Changed type of partition 'Linux' to 'Linux swap / Solaris'. Command (m for help): p Disk /dev/sda: 90 GiB, 96636764160 bytes, 188743680 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: 0x6a1fff92 Device Boot Start End Sectors Size Id Type /dev/sda1 2048 184555520 184553473 88G 83 Linux /dev/sda2 184557568 188743679 4186112 2G 82 Linux swap / Solaris ``` 保存分区信息 ```sh Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: Device or resource busy The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8). ``` 重启 Ubuntu 虚拟机 创建新的交换分区前关闭交换分区功能 ```sh root@ubuntu:# swapoff -a ``` 更新交换分区的 UUID,否则将无法正常使用交换分区功能 ```sh root@ubuntu:~# awk '/swap/ { print $1 }' /etc/fstab # UUID=d3dc807d-3d2b-477a-a77b-03b783b0317e root@xiaoyalun:~# dd if=/dev/zero of=/dev/sda2 dd: writing to '/dev/sda2': No space left on device 4186113+0 records in 4186112+0 records out 2143289344 bytes (2.1 GB, 2.0 GiB) copied, 68.846 s, 31.1 MB/s root@ubuntu:~# mkswap -U d3dc807d-3d2b-477a-a77b-03b783b0317e /dev/sda2 Setting up swapspace version 1, size = 2 GiB (2143285248 bytes) no label, UUID=d3dc807d-3d2b-477a-a77b-03b783b0317e ``` 首先是从 / etc/fstab 查询到新的 UUID,通过 mkswap 命令创建新的交换分区 调整分区大小 ```sh root@ubuntu:~# resize2fs /dev/sda1 resize2fs 1.42.13 (17-May-2015) Filesystem at /dev/sda1 is mounted on /; on-line resizing required old_desc_blocks = 6, new_desc_blocks = 6 The filesystem on /dev/sda1 is now 23069184 (4k) blocks long. ``` 至此虚拟机磁盘扩容已经完成