缩小并重新划分root分区

  • 现有linux系统为ubuntu 16.04 x64;
  • / 分区分的太大,需要压缩(shrink)到指定大小,并将余下空间划分到新分区;
  • 本例是 标准分区 的分区形式,未使用lvm;

旧分区拓扑:

Device     Boot    Start       End   Sectors  Size Id Type
/dev/sda1  *        2048    999423    997376  487M 83 Linux
/dev/sda2         999424  40060927  39061504 18.6G 82 Linux swap / Solaris
/dev/sda3       40060928 209713151 169652224 80.9G 83 Linux

新分区拓扑:

Device     Boot     Start       End  Sectors  Size Id Type
/dev/sda1  *         2048    999423   997376  487M 83 Linux
/dev/sda2          999424  40060927 39061504 18.6G 82 Linux swap / Solaris
/dev/sda3        40060928 123947007 83886080   40G 83 Linux
/dev/sda4       123947008 209715199 85768192 40.9G 83 Linux

3.1 备份数据

备份重要数据,缩小分区/文件系统有丢失数据风险,切记!

3.2 进入livecd

因为是缩小 / 分区,不能在线进行,所以使用 ubuntu-16.04.2-desktop-amd64.iso 启动 livecd. 选择 try ubuntu

3.3 继续操作

#查看挂载点已使用的容量情况
df -h
#卸载文件系统
umount -l /dev/sda3
#缩小文件系统, -p 显示完成百分比
#如果原来sda3里已经有60G数据的话,现在缩小到30G是肯定不行的
resize2fs -fp /dev/sda3 40G

3.4 缩小分区

fdisk /dev/sda
输入 p 查看当前状态,将sda的状态拍照,或者手动记录下分区的 start 和 end 值,这点很重要!
输入 d 删除分区3;
输入 n 创建分区3,起点start 和原来保持一致,end的值可以直接输入 +40G,也可以 +sector ,算法参见下文.
输入 p 查看下;
输入 w 保存退出
#新分区容量,sector=512 byte,计算40G对应的sector数目并减1
x=40
echo "$x*1024*1024*1024/512-1" | bc

3.5 继续操作

#检查fs
e2fsck -f /dev/sda3
fsck /dev/sda3
#再次确认下文件系统大小;
resize2fs /dev/sda3
partprobe

3.6 重启生效

重启linux以生效.

备注: 如果先fdisk缩小了分区表,再resize2fs和fsck的时候会出现问题,导致文件系统损坏。

  • linux/ubuntu/缩小并重新划分root分区.txt
  • 最后更改: 2019/04/16 18:31
  • (外部编辑)