介绍
新买了一个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))
| 12
 3
 4
 
 | $ df -PFilesystem     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文件分区
| 12
 3
 4
 5
 6
 7
 8
 
 | # 标记label,选择MBR or GPT主引导格式,MBR:msdos, GPT:gptsudo 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。
| 12
 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
| 12
 3
 
 | $ sudo mount -f vfat /dev/mapper/loop0p1 /media$ sudo cp -rfp /boot/* /media/
 $ sudo umount /media
 
 | 
备份/
| 12
 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
 
 | 
卸载打包镜像文件
| 12
 3
 4
 5
 
 | # 关闭device mappersudo kpartx -d /dev/loop0
 
 #关闭 loop 设备
 sudo losetup -d /dev/loop0
 
 | 
参考&鸣谢