介绍
新买了一个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 | df -P |
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 | 关闭device mapper |