介绍
新买了一个TF卡,Class10的,应该能挺快。原来的卡是class4的,如果用新卡做系统,然后所有软件都重装重配,太麻烦!所以将现有系统,做成镜像(img),然后直接dd
到新卡上,然后再执行raspi-conf
进行容量扩展就可以正常使用了。
版本
- 硬件,RaspberryPi3
- OS,raspbian jessie
步骤
安装需要的软件
安装dosfstools
、parted
、kpartx
软件及依赖包。
1
| sudo apt-get install dosfstools parted kpartx
|
计算镜像大小
获取/dev/root
和/dev/mmcblk0p1
占用的空间,然后计算镜像大小,计算公式:1.2 * (size(/dev/root) + size(/dev/mmcblk0p1))
1 2 3 4
| $ df -P Filesystem 1024-blocks Used Available Capacity Mounted on /dev/root 30690780 1390740 28024812 5% / /dev/mmcblk0p1 64366 20698 43668 33% /boot
|
df
返回的容量单位为KB。
生成空白镜像文件
使用dd
和/dev/zero
生成空白镜像文件sudo dd if=/dev/zero of={镜像文件} bs=1K count={镜像大小(单位为K)}
分区镜像文件并格式化
分区
使用parted
为img文件分区
1 2 3 4 5 6 7 8
| # 标记label,选择MBR or GPT主引导格式,MBR:msdos, GPT:gpt sudo parted {镜像文件} -s -- mklabel msdos
# 创建分区 sudo parted {镜像文件} -s -- mkpart primary fat32 {开始扇区}s {结束扇区}s
# 创建分区 sudo parted {镜像文件} -s -- mkpart primary ext4 {开始扇区}s -1
|
开始扇区和结束扇区可是通过sudo fdisk -l /dev/mmcblk0
来查看。
格式化
在格式化前,需要先将img文件映射给系统的loop设备,然后在将loop设备映射给device mapper。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 映射loop设备 $ sudo losetup -f --show {镜像文件} /dev/loop0
# device mapper $ sudo kpartx -va /dev/loop0 add map loop0p1 (254:0): 0 257 linear /dev/loop0 256 add map loop0p2 (254:1): 0 18015 linear /dev/loop0 513
# 格式化 $ sudo mkfs.vfat /dev/mapper/loop0p1 ...... $ sudo mkfs.ext4 /dev/mapper/loop0p2 ......
|
挂载并备份系统
备份/boot
1 2 3
| $ sudo mount -f vfat /dev/mapper/loop0p1 /media $ sudo cp -rfp /boot/* /media/ $ sudo umount /media
|
备份/
1 2 3 4
| $ sudo mount -t ext4 /dev/mapper/loop0p2 /media $ sudo rsync -aP --exclude={镜像文件} --exclude=/media/* --exclude=/sys/* --exclude=/proc/* --exclude=/tmp/* / /media/ ... $ sudo umount /media
|
卸载打包镜像文件
1 2 3 4 5
| # 关闭device mapper sudo kpartx -d /dev/loop0
#关闭 loop 设备 sudo losetup -d /dev/loop0
|
参考&鸣谢