直刷版(emmc)玩客云系统的备份和还原
前言
其实之前已经写过一篇用dd制作系统备份镜像文件的文章,【Linux使用dd命令克隆磁盘(制作系统镜像)】。但写的有点啰嗦,直接改也不合适。索性重新写一篇简单的。
先定义一下两个名词:
- 当前系统:指装在玩客云emmc上的armbian
- 第三方系统:指装在u盘、sd卡上的玩客云armbian
用dd命令备份还原的原理和windows ghost一样,就是把整个emmc磁盘克隆,生成一个img镜像文件。要还原的时候,再用dd命令把img镜像文件写回emmc。
整个过程分成两步:备份 + 还原。备份可以在当前系统或第三方系统下操作,还原必须要通过第三方系统。
这篇文章中,我是在【当前系统】下备份,在【第三方系统】下还原。
准备工作
- 一个已经直刷armbian的玩客云(系统装在emmc)
- 备份操作需要准备一个移动硬盘或者存储U盘,因为生成的备份镜像大概1~2GB左右
- 还原系统需要准备一个已经刷了armbian的U盘或者sd卡
- ssh连上玩客云机器
备份
先用lsblk
命令确定分区信息和设备名称,输出结果如下
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 465.8G 0 disk
└─sda1 8:1 0 465.8G 0 part /mnt
mmcblk1 179:0 0 7.3G 0 disk
├─mmcblk1p1 179:1 0 256M 0 part /boot
└─mmcblk1p2 179:2 0 7G 0 part /var/log.hdd
/
mmcblk1boot0 179:16 0 4M 1 disk
mmcblk1boot1 179:32 0 4M 1 disk
zram0 253:0 0 494.7M 0 disk [SWAP]
zram1 253:1 0 50M 0 disk /var/log
zram2 253:2 0 0B 0 disk
可以看到玩客云内置emmc分区的硬件名称是mmcblk1
,分了两个区,一个是mmcblk1p1
启动分区,一个是mmcblk1p2
系统分区。通过usb外接的移动硬盘的设备名称是挂载在/mnt
的sda1
。所以最终要实现的需求就是把整个mmcblk1
制作成img镜像文件,保存到sda1
的某个路径下(假定/mnt/ws1608-backup.img
)。
在用dd
命令开始制作镜像之前,需要先指定读取多少内容(或者理解为给镜像分配多少空间)。如果不指定读取多少内容,就会读取整个emmc存储的7.3GB空间,最后生成一个7.3GB的系统镜像。
上面lsblk
命令的输出结果中可以看到,mmcblk1p1
启动分区,大小256MB,mmcblk1p2
系统分区,大小7GB,但实际系统分区使用的只有一点点,大部分都是空白空间(free space),空白空间不需要备份。
用df -h
命令来查看系统分区的空间使用情况,输出结果如下
Filesystem Size Used Avail Use% Mounted on
udev 460M 0 460M 0% /dev
tmpfs 99M 4.1M 95M 5% /run
/dev/mmcblk1p2 6.9G 1.5G 5.4G 21% /
tmpfs 495M 0 495M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 495M 0 495M 0% /tmp
/dev/mmcblk1p1 256M 44M 213M 17% /boot
/dev/zram1 47M 14M 30M 32% /var/log
/dev/sda1 466G 253G 214G 55% /mnt
tmpfs 99M 0 99M 0% /run/user/1000
可以看到系统分区mmcblk1p2
只使用了1.5GB。
现在可以开始用dd
命令备份了。启动分区256MB,系统分区使用了1.5GB,合计1.8GB,再考虑一些冗余空间,这里指定读取2GB空间吧。命令中的bs
和count
参数的定义这篇文章中不再赘述,而且镜像也不进行压缩打包。想知道参数定义、想压缩打包的,可以看【Linux使用dd命令克隆磁盘(制作系统镜像)】。
dd bs=1M count=2000 if=/dev/mmcblk1 of=/mnt/ws1608-backup.img
玩客云的usb2.0接口的极限速度大概35MB/s,2GB的镜像,1分钟左右就制作好了。
还原
有了镜像备份以后,系统玩坏了,就可以通过重新写入img镜像来还原系统。
要还原自制的img备份,需要准备的工具如下:
- 一个u盘(sd卡也行)且已经刷了u盘版本的玩客云armbian系统
- 自制的img备份文件
好了,现在还是还原系统。
第一步:插入系统u盘(或者sd卡),机器通电开机,进入u盘的armbian系统
第二步:准备好img备份镜像。我这里是存在移动硬盘,挂载到/mnt
,所以镜像路径是/mnt/ws1608-backup.img
第三步:把img备份镜像重新写入emmc
dd if=/mnt/ws1608-backup.img of=/dev/mmcblk1
第四步:等写入完成后,关机,拔掉全部u盘,然后通电开机,emmc上的系统就完成还原了。😄
扩展
结合crontab
的定时任务功能,可以设置每天、每周定时生成系统备份镜像。