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
鲁公网安备37028202001227号