方法1执行过程
-
备份原分区数据
-
删除原分区
-
在原分区的起始点上新建分区,使用默认大小(SD卡剩余大小)
-
保存分区修改,格式化新分区
-
恢复数据
对应的脚本如下
#! /bin/sh
tmproot=$(mktemp -d /tmp/root_XXXXXX)
#未加密前可直接挂载
RootfsBak="rootfs.bak$(date +%Y%m%d%H%M)"
if mount -t ext4 /dev/mmcblk0p2 $tmproot
then
#备份分区中的数据
tar -czf ${RootfsBak}.tar.gz -C $tmproot/ .
umount $tmproot
fi
fdisk /dev/mmcblk0 <<EOF
p
d
2
n
p
2
526336
60579839
w
EOF
#格式化映射后的分区
mkfs.ext4 /dev/mmcblk0p2
sync
#挂载映射分区
mount -t ext4 /dev/mmcblk0p2 $tmproot/
#恢复数据
if [ -f ${RootfsBak}.tar.gz ]
then
tar -xzf ${RootfsBak}.tar.gz -C $tmproot/
fi
umount $tmproot
rm -rf $tmproot
方法2执行过程
- 备份数据,不必须,仅做安全考虑
- 重新划分分区(保证分区其实扇区一致)
- 使用e2fsck resize2fs工具重写扩展ext4文件系统
脚本如下
tmproot=$(mktemp -d /tmp/root_XXXXXX)
#未加密前可直接挂载
if mount -t ext4 /dev/mmcblk0p2 $tmproot
then
#备份分区中的数据
RootfsBak="rootfs.bak$(date +%Y%m%d%H%M)"
tar -czf ${RootfsBak}.tar.gz -C $tmproot/ .
umount $tmproot
fi
rm -rf $tmproot
# 这个是从一个32G的sd卡上获取的分区信息,将这个信息导出,用于快速修改分区
cat <<EOF > fdiskscript
label: dos
label-id: 0xab86aefd
device: /dev/mmcblk0
unit: sectors
/dev/mmcblk0p1 : start= 2048, size= 524288, type=c, bootable
/dev/mmcblk0p2 : start= 526336, size= 60579839, type=83
EOF
fdisk /dev/mmcblk0 &>fdisk_sdb.log <<EOF
I
fdiskscript
w
EOF
# 扩展/dev/mmcblk0p2分区上的ext4文件系统
e2fsck -f /dev/mmcblk0p2
resize2fs /dev/mmcblk0p2
- 脚本执行前状态
>>> fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 28.9 GiB, 31016878080 bytes, 60579840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xab86aefd
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 2048 526335 524288 256M c W95 FAT32 (LBA)
/dev/mmcblk0p2 526336 30244830 29718495 14.2G 83 Linux
- 脚本执行后状态
>>> fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 28.9 GiB, 31016878080 bytes, 60579840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x626217d1
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 2048 526335 524288 256M c W95 FAT32 (LBA)
/dev/mmcblk0p2 526336 60579839 60053504 28.7G 83 Linux