Linux EXT4 调整分区大小(压缩分区)

前言(废话)

从之前的ntfs,到后面的ext4,现在看了很多资料,和在虚拟机里体验,还是觉得zfs比较划算,我比较看重两点,1:快照,2:内存缓存

可惜我现在只有1块8T硬盘,数据没法转移,只能冒险单盘转换了,先压缩分区,将分区压缩到2.3T,然后将空出来的空间分区,并加入zpool,然后将数据从ext4转移到zfs,然后再将ext4的分区也加入到zfs池

我们开始压缩分区吧!

准备工作

以下操作磁盘越大,耗时越久,从现在开始一定要在screen下操作,否则执行中中断的后果没人能预料

  1. 卸载分区
  2. 检查和修复文件系统
    e2fsck -f -y /dev/sdc1

  3. 压缩文件系统到最小尺寸并将文件移动到前面的扇区
    resize2fs -M /dev/sdc1

  4. dumpe2fs -h /dev/sdc1 或者 tune2fs -l /dev/sdc1 查看分区文件系统所占区块数量
    1. 主要是两个:“Block count” 和 “Block size”,
    2. 两者相乘得到文件系统字节数
    3. fdisk /dev/sdc 输入p,得到分区起始扇区数和扇区大小
    4. 字节数除以扇区大小得到扇区数
    5. 扇区数+起始扇区数-1=新的截至扇区数
      公式:start_sectors+((block_countblock_size)/sectors_size)-1=end_sectors
      例如:2048+((738508971
      4096)/512)-1=5908073815

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

开始调整

使用parted /dev/sdc 调整分区

  1. 输入 unit s 更改单位为扇区
  2. 输入p打印现有分区,并保存下来,这至关重要,例如

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    root@ubuntu:~# parted /dev/sdc
    GNU Parted 3.3
    Using /dev/sdc
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) unit s
    (parted) p
    Model: ATA WDC WD80EZAZ-11T (scsi)
    Disk /dev/sdc: 15628053168s
    Sector size (logical/physical): 512B/4096B
    Partition Table: gpt
    Disk Flags:

    Number Start End Size File system Name Flags
    1 2048s 5908073815s 5908071768s ext4
  3. 确认你上面的数据已经保存下来了(最好用笔记下来)

  4. 这时候你还可以后悔
  5. 更改分区大小 resizepart 1 <end_end_sectors> (就是准备工作中最后得到的值),如果提示会丢失数据,输入y确认
  6. 可以mount测试了

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

参考

无损调整EXT4分区大小
缩小分区以完全适合基础文件系统的大小

忍一时风平浪静,zfs也没啥好的,就是个快照嘛,不要也没事,等下次买了大硬盘,数据备份好再换文件系统吧,万一再丢一次数据承受不起
最终还是冒险在线转换了,成功转换到zfs了,爽歪歪

鄂ICP备14007840号-1