最近因为要开发一个 Android 项目,因此需要在系统上安装 AndroidStudio,安装途中却提示我 java.io.IOException: No space left on device
,立刻就意识到分区空间不足了,因此进行了该次扩容。而我本身是双系统(Ubuntu 18.04 作为日常开发使用,而 Windows 10 作为游戏娱乐用),因此我要对 Ubuntu 下的分区进行扩容。
如何扩容
- 使用 GUI 工具:GParted (本篇文章不进行阐述)
- 利用 fdisk / parted / lvm 等指令进行扩容
提前准备
- 备份重要数据,很关键!!!
- 因为涉及到
umount
卸载分区操作,请制作好 LiveCD(对应 Linux 版本的 USB 启动盘) - 遇到其他问题请主动查阅相关资料
找出空间不足的分区
首先使用 df -h | grep "dev/sda"
指令查看 /dev/sda
以下各个分区占用比 1
2
3
4
5 [email protected] ~ df -h | grep "sda"
/dev/sda10 22G 21G 96M 100% /
/dev/sda8 1.9G 467M 1.3G 27% /media/a9032676/b2b692f8-bdcf-46c1-9998-503b0970f5b3
/dev/sda9 19G 2.8G 15G 16% /media/a9032676/9b5cdc3a-f296-490a-b329-6ae23acee7de
/dev/sda7 4.7G 20M 4.4G 1% /media/a9032676/1bbfb6fa-f919-4460-86f9-5ced5a900ec8
可以得出挂载于 /
的根分区 /dev/sda10
空间严重不足,剩下 96MB。然后我们使用 sudo fdisk -l /dev/sda
指令查询 /dev/sda
下各分区大小及总和。 1
2
3
4
5
6
7
8
9
10
11
12 [email protected] ~ sudo fdisk -l /dev/sda
Disk /dev/sda: 232.9 GiB, 250059350016 bytes, 488397168 sectors
/dev/sda1 * 2048 1126399 1124352 549M 7 HPFS/NTFS/exFAT
/dev/sda2 1126400 383537151 382410752 182.4G 7 HPFS/NTFS/exFAT
/dev/sda3 383539198 488396799 104857602 50G 5 Extended
/dev/sda5 383539200 383928319 389120 190M 83 Linux
/dev/sda6 383930368 387928063 3997696 1.9G 82 Linux swap / Solaris
/dev/sda7 387930112 397928447 9998336 4.8G 83 Linux
/dev/sda8 397930496 401928191 3997696 1.9G 83 Linux
/dev/sda9 401930240 441927679 39997440 19.1G 83 Linux
/dev/sda10 441929728 488396799 46467072 22.2G 83 Linux
[email protected] ~
可以看到这个盘大小总和是 232.9G,而由于双系统的缘故, /dev/sda1
与 /dev/sda2
这两个分区是 Windows 10 的,因此是 NTFS 文件系统。/dev/sda5
为 grub
预留分区,而扩展分区 /dev/sda3
则作为我 Ubuntu 系统所有文件的主分区,可以看见扇区从 383539198
横跨到 488396799
,途中包含了 sda5
到 sda10
这几个分区,而他们都是 ext4 文件系统的逻辑分区,加起来刚刚好 50G。
查询分区挂载情况
确定了是 /dev/sda10
分区空间不足后,我们利用 mount -l | grep "/dev/sda"
指令查看分区实际挂载情况。
1 | [email protected] ~ sudo mount -l | grep "/dev/sda" |
从以上情况总括出:这台电脑两个系统都是安装在了同一个盘上面(因为是 SSD),合计可用大小是 232.9G,而分给 Ubuntu 的总共有 50G,Windows 则占用了 182.4G(撇除系统保留的 549M)。但现在 Ubuntu 挂载在根目录的分区 /dev/sda10
已经所剩无几,因此我打算的是从 Windows 处 /dev/sda2
释放 30G 的空间为 /dev/sda10
增加容量。
开始调整
重启电脑,将系统更换成 Windows 10。
在【磁盘管理】处压缩 NTFS 卷/分区,释放已分配空间给予 Ubuntu 使用,这里我共计在
/dev/sda2
处压缩并腾出了共计 30G 的未分配空间。(本步骤不多作阐述,具体可参考:如何在 Windows 中对硬盘进行分区)因为途中涉及根分区前后移动,因此必须要让本身处于 busy(忙碌) 状态的根分区先
unmount
(卸载分区),否则会一直锁定着,无法移动。制作对应 Ubuntu 版本的 LiveCD(USB启动盘)。重启电脑并插入刚刚制作好的 USB,切换系统到 USB 搭载的 Ubuntu 系统上。
进入系统后。于命令行内手动输入
sudo umount /dev/sda10
,把我们的目标分区卸载掉,同时需要将扩展分区内的 Swap Space(交换空间)关闭掉:sudo swapoff -a
。然后使用
sudo fdisk /dev/sda
进入 fdisk 命令交互界面以调整分区:1
2
3
4
5
6
7
8
9[email protected] ~ sudo fdisk /dev/sda
[sudo] password for a9032676:
Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help):然后我们使用
p
指令查询分区情况,虽然上面已经查询过,但为了安全起见还是先确认一遍。
1 | Command (m for help): p |
可以看到在 /dev/sda2
的扇尾 320622591
与 /dev/sda3
的扇头 383539198
之间差了 62916607
个 Blocks,刚好 30G,也就是我们之前在 Windows 上腾出来的空间。
- 接下来这一步很关键,由于在我们上面的分区里面,没分配空间是处于扩展分区
/dev/sda3
以及/dev/sda10
的前面(左侧),而我们需要先将其移动到靠近我们的/dev/sda10
分区右侧(也就是把 free space 移动到整个盘最后面)方可与/dev/sda10
逻辑分区进行合并,因此我们需要用到dd
这条指令去操作分区移动:
待补充
- 但由于我们这里的例子
/dev/sda10
本身已经处于整个盘的最后方,因此可以直接使用 fdisk 的d
与n
指令直接合并已经移动到/dev/sda10
左侧旁的 free space,而省去了最后的从/dev/sda10
左侧移动到其的右侧。
待补充
- 在一轮操作完成之后,再输入
p
查询分区表究竟是否有误,再三确认后输入w
保存变更并退出。
待补充