Linux缩减系统分区大小并建立新的分区
需求背景
腾讯云海外VPS的性价比不错,¥42一个月就能买到2C4G+60GHDD的VPS机器
但是60G一般用不完,大部分海外VPS其实只需要几个G就够装系统和软件了
因此可以把多余的分区分出来,给别的用途(例如格式化成别的格式等等)
同时,腾讯云的系统盘是享受2个免费快照的,用来存数据还能被快照备份
温馨提示:不同的主机硬盘路径可能不同,请根据fdisk -l
实际路径操作
重要提示:操作有较高风险,请备份数据,并谨慎操作!!小白切勿尝试
准备工作
- 关机进入救援模式
- 登录救援模式主机
ssh root@救援地址 -p 端口
- 查看分区是哪一个
fdisk -l
这里/dev/vda1就是你需要的分区
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 83888127 83886080 40G 83 Linux
计算容量
- 检查和修复文件系统
e2fsck -f -y /dev/vda1
- 压缩文件系统到最小尺寸并将文件移动到前面的扇区
resize2fs -M /dev/vda1
- 查看分区文件系统所占区块数量
dumpe2fs -h /dev/vda1
tune2fs -l /dev/vda1
主要是两个:“Block count” 和 “Block size”,两者相乘得到文件系统字节数
- 查看分区起始扇区数和扇区大小
fdisk /dev/vda1
# 输入p,然后输入q
得到分区起始扇区数和扇区大小,字节数除以扇区大小得到扇区数
公式:扇区数+起始扇区数-1=新的截至扇区数
公式:start_sectors+((block_countblock_size)/sectors_size)-1=end_sectors
例如:2048+((7385089714096)/512)-1=5908073815
到这一步还有后悔药,直接resize2fs /dev/vda1 <原分区大小>,就完事了
修改分区
parted /dev/vda1
- 输入 unit s 更改单位为扇区
- 输入p打印现有分区,并保存下来,这至关重要,例如
Model: Virtio Block Device (virtblk)
Disk /dev/vda1: 83886080s
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0s 83886079s 83886080s ext4
确认你上面的数据已经保存下来了(最好用笔记下来),这时候你还可以后悔
更改分区大小
resizepart 1 <end_end_sectors>
(就是准备工作中最后得到的值),如果提示会丢失数据,输入y确认
- 可以mount测试了
mount的时候,如果提示“wrong fs type, bad option, bad superblock on ....”
说明扇区分少了,不要慌,继续使用上面的fdisk编辑分区表,给分区多加100个扇区就行
再次挂载应该就ok了,如果还是不行,那神仙难救了,直接mkfs然后从备份里恢复数据吧。
什么?你说你没有备份?
新增分区
- 退出救援模式,等待原系统重启
- 如果没问题,新增分区:
fdisk /dev/vda
- 输入
p
,查看当前分区 - 输入
n
,创建新的分区 - 选择
p
——创建主分区 - 分区序列号默认即可
- 结束空间自己选择即可
- 创建完成后输入
w
保存 - 格式化分区:
mkfs.ext4 /dev/vda2
挂载分区
nano /etc/fstab
- 增加一行(按你自己的目录来)
/dev/vda2 /data ext4 defaults 0 0