Linux缩减系统分区大小并建立新的分区

需求背景

腾讯云海外VPS的性价比不错,¥42一个月就能买到2C4G+60GHDD的VPS机器
但是60G一般用不完,大部分海外VPS其实只需要几个G就够装系统和软件了
因此可以把多余的分区分出来,给别的用途(例如格式化成别的格式等等)
同时,腾讯云的系统盘是享受2个免费快照的,用来存数据还能被快照备份

温馨提示:不同的主机硬盘路径可能不同,请根据fdisk -l实际路径操作
重要提示:操作有较高风险,请备份数据,并谨慎操作!!小白切勿尝试

准备工作

  1. 关机进入救援模式
    QQ20250429-165131.png
  2. 登录救援模式主机
ssh root@救援地址 -p 端口
  1. 查看分区是哪一个
fdisk -l

这里/dev/vda1就是你需要的分区

Device     Boot    Start       End  Sectors Size Id Type
/dev/vda1  *        2048  83888127 83886080  40G 83 Linux

计算容量

  1. 检查和修复文件系统
e2fsck -f -y /dev/vda1
  1. 压缩文件系统到最小尺寸并将文件移动到前面的扇区
resize2fs -M /dev/vda1
  1. 查看分区文件系统所占区块数量
dumpe2fs -h /dev/vda1
tune2fs -l /dev/vda1 

主要是两个:“Block count” 和 “Block size”,两者相乘得到文件系统字节数

  1. 查看分区起始扇区数和扇区大小
fdisk /dev/vda1
# 输入p,然后输入q

得到分区起始扇区数和扇区大小,字节数除以扇区大小得到扇区数

公式:扇区数+起始扇区数-1=新的截至扇区数
公式:start_sectors+((block_countblock_size)/sectors_size)-1=end_sectors
例如:2048+((7385089714096)/512)-1=5908073815

到这一步还有后悔药,直接resize2fs /dev/vda1 <原分区大小>,就完事了

修改分区

  1. parted /dev/vda1
  2. 输入 unit s 更改单位为扇区
  3. 输入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

确认你上面的数据已经保存下来了(最好用笔记下来),这时候你还可以后悔

  1. 更改分区大小

    resizepart 1 <end_end_sectors>

    (就是准备工作中最后得到的值),如果提示会丢失数据,输入y确认

  2. 可以mount测试了
mount的时候,如果提示“wrong fs type, bad option, bad superblock on ....”
说明扇区分少了,不要慌,继续使用上面的fdisk编辑分区表,给分区多加100个扇区就行
再次挂载应该就ok了,如果还是不行,那神仙难救了,直接mkfs然后从备份里恢复数据吧。
什么?你说你没有备份?

新增分区

  1. 退出救援模式,等待原系统重启
  2. 如果没问题,新增分区:
fdisk /dev/vda
  1. 输入p,查看当前分区
  2. 输入n,创建新的分区
  3. 选择p——创建主分区
  4. 分区序列号默认即可
  5. 结束空间自己选择即可
  6. 创建完成后输入w保存
  7. 格式化分区:
mkfs.ext4 /dev/vda2

挂载分区

  1. nano /etc/fstab
  2. 增加一行(按你自己的目录来)
/dev/vda2       /data           ext4       defaults 0 0

参考链接

Last modification:April 29, 2025
If you think my article is useful to you, please feel free to appreciate