不需要重建分区的SD 卡分区扩容方案

OpenWrt 等一些操作系统刷完 img 到 SD 卡后, 16G 的 SD 卡,只用了一点点,经常需要“扩容”。之前的做法比较傻,就是重建分区,每次还要敲很多命令,还要把删除分区的起始扇区记录下来。

现在有了这段简单的代码,三行核心的代码就把这个工作自动化了,无需关心 SD 卡容量是 8G 还是 16G 还是更多,反正既然烧了,就是整张卡都是用在操作系统上了。

代码里的 DISK 就是类似 /dev/sdb 这样的, PART 就是分区 /dev/sdb2 这样的。 这里默认是第二分区。分区文件系统格式默认是 ext2/3/4 而不是其他。

burn () {
        fdisk -l ${DISK}>> /dev/null 2>&1 || (echo "could not find device $DISK - please check the name" && exit 1)
        # 烧写
        dd if=$IMG of=${DISK} bs=4M
        [ $? != 0 ] && echo "烧写出错了!" && exit 10
        MAXSIZEMB=$(printf %s\\n 'unit MB print list' | parted | grep "Disk ${DISK}" | cut -d' ' -f3 | tr -d MB)
        echo "[ok] ${PART} Will change to ${MAXSIZEMB} MB "
        parted ${DISK} resizepart 2 ${MAXSIZEMB}
        [ $? != 0 ] && echo "扩展分区出错了!" && exit 2
        e2fsck -y ${PART}
        resize2fs ${PART}
        [ $? = 0 ] && echo "文件系统扩展成功"
}

刷机愉快!

作者: 甬洁网络

--移动互联网&物联网技术提供商