一时失误买了一个硬盘只有8G的NAT VPS,更坑爹的是商家把其中的4G用作swap,实际可用空间不到4G,上传没几个文件硬盘就满了。swap用4G完全是浪费资源,于是研究了Linux使用fdisk
拓展系统分区,成功把swap占用空间加到系统分区。
注意事项
1. 根据本教程操作,存在数据损失的可能性,请先备份数据;
2. fdisk拓展分区的前提是被合并的分区位于合并分区之后,即 lsblk
有如下输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk └─sda1 8:1 0 4G 0 part / # 需要拓展的分区 └─sda2 8:1 0 1K 0 part # 被合并分区 └─sda3 8:1 0 4G 0 part [SWAP] # 被合并分区
注意到被合并分区sda2和sda3都位于需要拓展分区sda1之后,并且中间无其他分区分隔。根据本文操作,是无法将sda1合并到sda3的,会导致系统无法启动和正常运行(也许可以,但本人未找到解决办法)。
Linux系统使用fdisk拓展系统盘分区
因为是小内存的NAT VPS,swap必不可少。要想将swap分区占用的空间腾挪出来,首先要创建新的swap。Linux系统增加swap请参考CentOS 7系统增加swap,以下仅给出操作命令:
fallocate -l 200M /swap # 创建200M大小的swap mkswap /swap chmod 600 /swap vim /etc/fstab # 在/etc/fstab增加下面一行 /swap swap swap defaults 0 0 # 启用新创建的swap swapon /swap # 禁用原swap分区 swapoff /dev/sda3
接着使用fdisk
将swap置换出来的分区合并到系统分区,操作如下:
1. 删除被合并的分区和要拓展的分区,同时创新一个新分区:
root@debian:~# fdisk /dev/sda Welcome to fdisk (util-linux 2.29.2). 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,3, default 3): Partition 3 has been deleted. Command (m for help): d Partition number (1,2, default 2): Partition 2 has been deleted. Command (m for help): d Selected partition 1 Partition 1 has been deleted. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-16777215, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-16777215, default 16777215): Created a new partition 1 of type 'Linux' and of size 8 GiB. Partition #1 contains a ext4 signature. Do you want to remove the signature? [Y]es/[N]o: N Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: 设备或资源忙 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).
上述操作的注意点有:
1. 被合并分区首先都要删除,其应位于拓展分区之后,并且中间无其他分区间隔;
2. 拓展分区也要删除,然后再重新创建一个大的分区。创建新分区过程中会提示检测到旧分区,询问是否移除签名。因为我们想保存分区内的数据,请选择否(N)
3. 操作完成后,记得输入w将分区更改写入磁盘。
2. 让新分区生效。可以重启系统,或者使用partprobe
工具(Ubuntu/Debian通过apt install parted,CentOS使用yum install parted安装):
root@debian:~# apt install -y parted root@debian:~# partprobe
3. 新分区生效后,保存数据的情况下 lsblk
输出是原大小:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk └─sda1 8:1 0 4G 0 part /
我们需要resize2fs
来拓展所有分区的可用空间:
root@debian:~# resize2fs /dev/sda1 resize2fs 1.43.4 (31-Jan-2017) /dev/sda1 上的文件系统已被挂载于 /;需要进行在线调整大小 old_desc_blocks = 1, new_desc_blocks = 1 /dev/sda1 上的文件系统现在为 2096896 个块(每块 4k)。
拓展结束后,运行 lsblk
或者 df -h
,可以看到分区顺利拓展到了8G:
root@debian:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk └─sda1 8:1 0 8G 0 part / root@debian:~# df -h 文件系统 容量 已用 可用 已用% 挂载点 udev 73M 0 73M 0% /dev tmpfs 20M 1.4M 19M 7% /run /dev/sda1 7.9G 3.6G 3.9G 49% / tmpfs 84M 0 84M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 84M 0 84M 0% /sys/fs/cgroup tmpfs 17M 0 17M 0% /run/user/0
并且系统分区的所有数据完整被保留。
发表回复