1、软件包里安装一个dd进度条插件:coreutils-dd,安装之前记得点击更新列表。

2、运行fdisk -l查看下目前分区情况,一般系统就在sda1、sda2、sda3这三个分区,观察下面红框内部分。我的分区有点不同。

3、运行备份指令,其中,
- if是要备份的分区名称
- of是备份后的文件路径,如我这里备份到/mnt/sda4/backups/下,文件名为iStoreOS_时间戳.img,建议文件名带上当前备份的时间方便查看。
- bs是要备份的分区的起点,也就是上面截图里的红框部分;count是终点,记得要+1,对比红框部分与下面代码部分。
- status=progress就是加载进度条,也就是用到最开始安装的那个coreutils-dd插件。
可以直接执行备份并压缩:(我是整盘备份)
dd if=/dev/mmcblk0 bs=512 count=244318175 status=progress | gzip >/mnt/usb2_2-1/backup/iStoreOS_$(date +%Y%m%d).img.gz

4、未来就可以直接用这个img文件按照最开始部署的方式写盘,完美还原整个系统。
5、同时,可以远程备份到其他服务器以留存,带端口的加上 -P ,P大写。
scp -P [远程服务器端口号] iStoreOS_20221016.img.gz [远程服务器用户名]@[远程服务器ip:[远程服务器目录]
进阶玩法:直接在定时任务里添加任务,实现定时自动备份、打包、压缩并上传到远程服务器留存。sh脚本文件如下,可复制内容保存为backup_scp.sh文件:
# 当前时间变量 DATE=`date +%Y%m%d` # 文件夹路径 bakDir=/mnt/sda4/backups # 远程服务器用户名 remoteUser=[远程服务器用户名] # 远程服务器存储路径 remoteDir=[远程服务器目录] # 日志文件 logFile=${bakDir}/${DATE}.log # 压缩文件 gzFile=${bakDir}/iStoreOS_${DATE}.img.gz # 创建备份文件夹目录 mkdir -p ${bakDir} echo "================================================" >> ${logFile} echo "========== 开始执行任务 begin:$(date +"%Y-%m-%d %H:%M:%S") ==========" >> ${logFile} echo "================================================" >> ${logFile} echo "" >> ${logFile} # 执行备份并写入日志 echo ">>>>>>>> 开始备份 begin:$(date +"%Y-%m-%d %H:%M:%S") >>>>>>>>" >> ${logFile} # 打开当前日期的备份目录 cd ${bakDir} echo "1.打开${bakDir}:$(date +"%Y-%m-%d %H:%M:%S")" >> ${logFile} # 备份、打包并压缩,同时写入日志 echo "2.备份、打包并压缩,同时写入日志:$(date +"%Y-%m-%d %H:%M:%S")" >> ${logFile} dd if=/dev/sda bs=512 count=4982272 | gzip >${gzFile} 2>>${logFile} echo "<<<<<<< 结束备份并打包压缩 end:$(date +"%Y-%m-%d %H:%M:%S") <<<<<<<" >> ${logFile} echo "" >> ${logFile} # 上传备份文件 echo ">>>>>>>> 开始scp上传文件 begin:$(date +"%Y-%m-%d %H:%M:%S") >>>>>>>>" >> ${logFile} sshpass -p [远程服务器密码] scp -P 222 ${gzFile} ${remoteUser}@192.168.31.40:${remoteDir} echo "<<<<<<< 结束scp上传文件 end:$(date +"%Y-%m-%d %H:%M:%S") <<<<<<<" >> ${logFile} echo "" >> ${logFile} echo "删除本地备份文件:$(date +"%Y-%m-%d %H:%M:%S")" >> ${logFile} rm -fr ${gzFile} echo "" >> ${logFile} echo "================================================" >> ${logFile} echo "========== 结束所有任务 end:$(date +"%Y-%m-%d %H:%M:%S") ==========" >> ${logFile} echo "================================================" >> ${logFile}
到iStoreOS后台,进入计划任务,加上指令,保存即可。(例如我这里是每周二6点执行一次)
0 6 * * 2 [shell脚本所在目录]/backup_scp.sh