有旧和新树莓派二个,发现SD卡的raspbian系统可在不同树莓派之间通用,挺好。
学通树莓派系统克隆,兼备安装、备份与恢复能力。
在家里,用了一周时间,将新买的树莓派3,HDMI转VGA带供电(性价比推荐),旧显示屏,旧音箱。组成家庭媒体中心。手机使用bubbleupnp投屏和推送音乐播放,听音乐的享受更舒服了,显示屏再大些就更好。
在工作室,还有一个树莓派和支持HDMI输出的投影仪。如果能复制现有树莓派的系统SD卡,将省事不少。(重复的事应少做)
开始折腾尝试
借助我的个人电脑是ubutnu,可以看见树莓派分区情况,第二个分区14G采用了3G,很多空间是多余的。
用了1天的不断努力尝试终于才成功,囧。
失败1:使用DD或ddrescue
不幸的是我是从14.6G卡克隆到14.4G卡,使用dd失败是注定的。使用dd的必要条件是目标卡要更大。
失败2:源自笔记本linux系统迁移SSD的经验——分区一样,复制文件,改etc配置法。
linux磁盘迁移,只需分区格式化,复制文件,修改etc下的fstab和udev目录的网卡信息,chroot+grub安装。就能完成。
然而实践得知,不适用树莓派迁移。启动时卡在”smsc95xx 1-1.1:1.0: eth0: register ‘smsc95xx’ …”之后。无法启动。
比较发现,复制时,不会有dev/by-partuuid/目录,而本身树莓派是有这个目录的。
成功:dd读取为raw镜像盘、resize2fs缩容分区、qemu-img缩容disk、dd写入成功启动树莓派
先dd读取物理盘为raw格式镜像盘。这样就可以方法搞,最坏情况也不影响已有的系统sd卡内容。
$sudo dd if=/dev/sdb of=/home/16G.img bs=128K
挂载loop设备以便于gparted能操作
$sudo losetup /dev/loop0 /home/16G.img
$sudo partprobe /dev/loop0 # 运行后才会出现分区/dev/loop0p1,/dev/loop0p2
第二分区从14G缩容到6G(实际是把分散的Block数据集中到前6G位置。非真正改变分区大小)
$sudo e2fsck -f /dev/loop0p2
$sudo resize2fs /dev/loop0p2 6G
GParted / Fdisk 更改第二分区为6G
GParted /dev/loop0打开,然后选择第二分区右击,选择”更改/移动大小”。设置。
卸载恢复loop设备:
$sudo partprobe -d /dev/loop0
$sudo losetup -d /dev/loop0
raw虚拟磁盘缩容
$sudo qemu-img resize /home/16G.img -8G
$qemu-img info /home/16G.img
image: xxx.img
file format: raw
virtual size: 5.9G (6380060672 bytes)
disk size: 5.9G
使用DD写入新SD卡,启动成功。
可选:写入sd后可以用resize2fs扩容分区完全用上SD卡空间,参考上面缩容。
总结提升
- linux下安装树莓派系统到SD卡,使用dd刻录后还有剩余空间,用resize2fs可让最后分区来占满。
- 使用dd来备份整个硬盘太慢,可以用resize2fs将数据块移动到前面,parted缩小分区,然后刻录硬盘前面有数据部分即可。这样备份文件就不会臃肿。
- 备份镜像恢复时,过程类似初次安装系统。
参考
把一块硬盘上的 Linux 系统整个复制到新硬盘上的方法. https://www.v2ex.com/t/183310
使用qemu-img改变镜像文件大小 http://niusmallnan.com/_build/html/_templates/knowladge/resize_raw_file.html
笔记本硬盘更换记(使用LVM进行在线数据迁移) http://cathay4t.blogspot.hk/2009/05/lvm.html
新电脑+旧系统:教你在不同机器间转移Linux http://www.geekfan.net/1860/
usb-creator-gtk 方法和 clonezilla方法没有深入研究。