制作了树莓派的镜像后,需要备份的时候一般是用dd,但这样会导致制作的镜像过于庞大,因此最好是有多少文件用多少空间。
功能
树莓派系统镜像一键备份脚本, 可以将镜像压缩为实际使用了大小,不会备份整个 SD/TF 卡容量大小的镜像, 恢复时和官方镜像一样恢复, 使用起来非常方便
好不容易把一个系统弄成自己想要的样子了,想要克隆到另一张SD卡,或者备份保存,下次直接恢复到SD卡,所以需要一个一键备份脚本,将自己的系统备份成文件,下次轻松还原。
可以使用dd命令或者win32disk直接将储存卡内容保存成文件,但是缺点就是保存出来的镜像非常大,即储存卡的容量大小。所以需要一个方法让备份的系统文件最小化。
脚本实现一键备份储存卡的系统到img镜像,而且镜像很小(足够装下系统内容即可,不像使用dd命令或者win32disk进行块拷贝,镜像大小同储存卡大小一样.)
下载脚本
下载脚本
修改配置
修改脚本TODO配置部分,即储存卡的设备号,设备号用df -h或者sudo fdisk -l查看
比如插入读卡器后,我的电脑上储存卡设备是/dev/sdc
又比如直接在树莓派上备份,分别是/dev/root和/dev/mmcblk0p1(在树莓派上备份镜像要注意储存卡剩余空间要大于已用空间)(另外如非必要请在电脑上备份而不是在树莓派上备份自己, 以免出现不必要的错误!)
######################################################
################## TODO: settings#####################
src_boot_device=/dev/sde1 #/dev/mmcblk0p1
src_root_device=/dev/sde2 #/dev/root
src_boot_device_blkid=/dev/sde1 #/dev/mmcblk0p1
src_root_device_blkid=/dev/sde2 #/dev/mmcblk0p2
root_backup_size=1.3 # root backup size, 1 means the same as used size
os_arch_manjaro=0 # for system Arch or Manjaro, else ubuntu/debian
backup_on_pi=0 # 1: backup on pi(maybe not well supported), 0: backuo on PC (recommend)
# !!!!!if back on PI, it's better to use rsync
copy_use_rsync=0 # 1: use rsync to copy files, 0: use dump command to copy files
# !!!!!if back on PI, you should umount all your disk devices like USB disk or add exclude here
# rsync_exlude='--exclude relative_path1 --exclude relative_path2'
rsync_exlude='--exclude home/pi/data/raid'
######################################################
执行备份脚本
保证能连接网络的情况下执行脚本
chmod +x backup_system.sh
./backup_system.sh
脚本做的事情就是下载dosfstools dump parted kpartx这几个软件,然后利用这几个软件来进行备份,可放心使用
等待生成backup.img,成功后会打印
=====================
backup complete
=====================
如果报错了也不要慌,仔细看看报错的内容, 适当修改下配置, 比如dump报错了可以用rsync尝试, 尽量在电脑上备份
保存备份文件
img文件比较大, 如果需要长期保存,可以压缩后保存备用:
xz -zkv backup.img
或者
tar -czvf backup.img.tar.gz backup.img
还原系统到 SD 卡
和烧录官方镜像一样了,比如
sudo dd if=backup.img of=/dev/sdx status=progress bs=1MiB
或者使用 etcher 或者 win32diskimager 等等
然后启动系统, 可以进入系统, 也有可能没法登录, 按ctrl+alt+F1进入终端模式, 执行startx 可以发现报错为无法写入文件,使用df -h会发现根目录可用空间为0, 接下来需要扩展文件系统才能使用
扩展文件系统
还原后根目录/空间比较小,需要扩展分区大小
最简单的方法: 直接启动树莓派,这个时候可能图形界面无法加载, 按ctrl+alt+F1进入终端模式, 执行
sudo raspi-config
在advanced config中选择expand filesystem, 然后reboot就好了
另外,也可以使用linux下的图形工具gparted,或者直接用命令行工具resize2fs
另一种扩展方法
进入开机启动文件夹
cd /etc/init.d/
创建sh文件,使其可以自删
nano expand.sh
设置权限
chmod +x expand.sh
加入启动项
update-rc.d expand.sh defaults 90
#!/bin/sh
# expand.sh
### BEGIN INIT INFO
# Provides: bbzhh.com
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: tomcat service
# Description: tomcat service daemon
### END INIT INFO
sudo su
##给与管理员权限(保证脚本拥有管理员权限)
/etc/init.d/ssh stop &&
##关闭ssh,防止误操作
sleep 30
##等待一会儿
cd /etc/init.d/
##进入管理开机启动脚本的文件夹内
touch rootfs.sh
##创建rootfs.sh 为扩展空间
cat > rootfs.sh <<EOF
#!/bin/sh
sleep 30
raspi-config --expand-rootfs &&
sleep 30
EOF
##步骤:
##等待
##扩展,&&表示执行完成后才继续
touch delete.sh
##创建清理脚本启动项
cat > delete.sh <<EOF
#!/bin/sh
update-rc.d -f delete.sh remove &&
rm -rf expand.sh &&
rm -rf rootfs.sh &&
rm -rf execution.sh &&
/etc/init.d/ssh start &&
rm -rf delete.sh &&
EOF
touch execution.sh
##创建首先执行文件
cat > execution.sh <<EOF
#!/bin/sh
sleep 60
./rootfs.sh
update-rc.d delete.sh defaults 91 &&
update-rc.d -f expand.sh remove &&
reboot
EOF
##步骤:
##等待
##执行扩展空间程序
##创建重启脚本启动项
##删除expand.sh启动项防止再次启动
##重启
chmod +x rootfs.sh
chmod +x execution.sh
chmod +x delete.sh
./execution.sh
参考:
使用dump和restore来制作树莓派的img镜像
The resulting partition is not properly aligned for best performance的解决方法
树莓派系统镜像一键备份脚本, 最小化镜像保存
Shell自删除脚本
开机自动执行脚本 与 update-rc.d
版权属于:寒夜方舟
本文链接:https://www.wnark.com/archives/83.html
本站所有原创文章采用署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)。 您可以自由地转载和修改,但请注明引用文章来源和不可用于商业目的。声明:本博客完全禁止任何商业类网站转载,包括但不限于CSDN,51CTO,百度文库,360DOC,AcFun,哔哩哔哩等网站。
3 条评论
阿偶,才看到,早知道在你这里买了 OωO
要恰饭的嘛~(☆ω☆)
(´இ皿இ`)