因为需要搭建Kubernetes集群,我向老师申请了几个服务器以供使用。在拿到服务器后,发现硬盘实际容量有200G,但是在登录系统后仅有30G。在使用fdisk -l
命令后输出如下:
1 | Disk /dev/vda: 214.7 GB, 214748364800 bytes, 419430400 sectors |
第一行中提到,硬盘/dev/vda
中有200G容量。但是在下面的分区表中发现,该硬盘的两个分区分别是30G和2G(其中2G用于swap,即内存不够用时使用),也就是说,有170G左右的容量并没有被使用。
同时,我使用df -hT
命令查看一下文件系统的使用情况,结果如下:
1 | Filesystem Type Size Used Avail Use% Mounted on |
于是我决定对硬盘进行重新分区,将所有空间利用起来。
利用fdisk对硬盘重新分区
fdisk是操作硬盘分区表的工具。输入fdisk /dev/vda
以对该硬盘进行分区操作.输出为:
1 | [root@virt2 ~]# fdisk /dev/vda |
在输入m后得到了操作表。首先我们输入p以查看当前的分区表。
1 | Command (m for help): p |
然后使用d命令删除当前的两个分区表
1 | Command (m for help): d |
然后使用n命令新建两个分区表。与之前一样,一个用来当启动分区,一个用于交换。由于一共有200G空间,我决定给启动分区184G的空间,交换分区16G的空间。关于交换分区的大小,可以参考此文档.
分区1创建过程如下:
1 | Command (m for help): n |
其中的技巧是使用+184G
来指定分区大小,从而让fdisk为我们计算结束扇区。
分区二创建过程如下:
1 | Command (m for help): n |
其中无需更改扇区结束处,因为fdisk默认会使用所有未分配的容量。
同时,因为此分区用于交换,我们需要修改改分区的system ID。
输入t后,指定分区2,然后可以输入L来显示所有的ID以供参考。我们可以看到82代表了Linux Swap。所以我们将其修改为82. 过程如下:
1 | Command (m for help): t |
到这里分区的删除、重新创建就已经结束了。最后一定要注意使用w命令将其写入硬盘,否则所有的修改都是无效的。
1 | Command (m for help): w |
最后sudo reboot
重启机器,以应用新的分区表。
重启后使用fdisk -l
命令发现,新的分区表已经生成成功。
1 | [root@virt2 ~]# fdisk -l |
但是使用df -hT
时,发现事情没有这么简单…
1 | [root@virt2 ~]# df -hT |
在这里,/dev/vda1分区的容量还是只有30G…
然后我在man df
里看到了一些相关解释:
1 | If an argument is the absolute file name of a disk device node containing a mounted file system, |
该段大意为:当参数为/dev/vda1
这种代表硬盘分区的绝对文件名,并且该分区已经挂载文件系统时,df显示的是这个文件系统的容量信息,而不是硬盘分区的容量信息。
也就是说,虽然现在我们的硬盘分区大小已经设置成功,但是文件系统并没有做出相应的改变。
在网上搜集相关资料后,发现一个相关命令resize2fs
. 通过man resize2fs
命令发现了一段关键信息:
1 | If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. |
所以我输入命令 resize2fs /dev/vda1
成功得扩大了文件系统容量。
1 | [root@virt2 ~]# resize2fs /dev/vda1 |
然后用 df -hT
来查看文件系统
1 | [root@virt2 ~]# df -hT |
发现已经成功扩容。
最后使用mkswap /dev/vda2 && swapon /dev/vda2
使用swap交换。