[Share Experiences] 魔改timeshift,发布支持多个备份任务的deb包
Tofloor
poster avatar
风吹过的绿洲
deepin
2024-08-20 23:24
Author

https://bbs.deepin.org/post/277021 前面这个帖子讲了系统和数据备份的实践。

此前版本我是通过动态重命名切换配置来实现的,还是有点繁琐,可以查看 https://bbs.deepin.org/post/258143

为此我找到最新的timeshift代码,并做了修改和打包
image.png

  1. 修改了代码和相关脚本,增加了一个--config来指定自己的配置文件,现在的话,我们可以分开做多个定时备份任务。让timeshift和timeshift-gtk都支持指定配置文件
  2. 开放/work,不加到exclude.list里面

image.png

使用方式

╭─jay at jay-PC in /opt/apps/com.idaoteng.data-bak 
╰─λ cat bak-data.sh   
#!/bin/bash
timeshift --check --scripted --config ./timeshift-data.json

下载地址:

timeshift_24.02.1-5_amd64.deb

timeshift-dbgsym_24.02.1-5_amd64.deb

代码仓库

https://gitee.com/jay763190097/timeshift-jay

实现了底层支持动态配置文件后,我们需要增加相关文件,来开启多个定时备份任务。

我因为除了系统备份之外,还需要数据备份和工作文件备份,所以把需要增加的配置文件,做了两个小应用,直接安装就可以看到下面三个备份应用。其中timeshift是默认的系统备份。

打开不同的快捷方式可以管理不同的备份
image.png

大家可以通过下载 com.idaoteng.data-bak_0.0.11_amd64.deb,来快速创建另一个备份任务,然后打开管理界面,自己设置下分区,备份周期,添加项和排除项就可以了,记得排除项要放在增加项前面,否则无法排除增加项的子文件夹。

image.png

image.png

手动改配置文件的话,在如下位置:


─jay at jay-PC in /opt/apps/com.idaoteng.data-bak 
╰─λ ls
bak-data.sh  timeshift-data.json
╭─jay at jay-PC in /opt/apps/com.idaoteng.data-bak 
╰─λ cat timeshift-data.json   
{
  "backup_device_uuid" : "1795ac4a-7aeb-804e-8ae6-bd1b224e6aaa",
  "parent_device_uuid" : "",
  "do_first_run" : "false",
  "btrfs_mode" : "false",
  "include_btrfs_home_for_backup" : "false",
  "include_btrfs_home_for_restore" : "false",
  "stop_cron_emails" : "false",
  "schedule_monthly" : "false",
  "schedule_weekly" : "true",
  "schedule_daily" : "false",
  "schedule_hourly" : "false",
  "schedule_boot" : "false",
  "count_monthly" : "2",
  "count_weekly" : "2",
  "count_daily" : "5",
  "count_hourly" : "6",
  "count_boot" : "5",
  "snapshot_size" : "0",
  "snapshot_count" : "103914",
  "date_format" : "%Y-%m-%d %H:%M:%S",
  "exclude" : [
    "/home/jay/Documents/WeChat Files/**",
    "/home/osroot/**",
    "+ /opt/***",
    "+ /home/***",
    "/***",
    "/home/jay/**"
  ],
  "exclude-apps" : []
}%                                         
╭─jay at jay-PC in /opt/apps/com.idaoteng.data-bak 
╰─λ 

查看定时任务执行情况

╭─jay at jay-PC in /work/java-workspace 
╰─λ sudo journalctl -u cron -n100 -f
8月 26 00:40:01 jay-PC CRON[775830]: (root) CMD (timeshift --check --scripted --config /opt/com.idaoteng.work-bak/timeshift-work.json)
8月 26 00:40:02 jay-PC CRON[775829]: pam_unix(cron:session): session closed for user root
8月 26 01:00:01 jay-PC CRON[785004]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
8月 26 01:00:01 jay-PC CRON[785005]: (root) CMD (timeshift --check --scripted)
8月 26 01:00:02 jay-PC CRON[785004]: pam_unix(cron:session): session closed for user root
8月 26 01:06:01 jay-PC cron[586]: (*system*timeshift-hourly) RELOAD (/etc/cron.d/timeshift-hourly)
8月 26 01:08:01 jay-PC cron[586]: (*system*timeshift-data) RELOAD (/etc/cron.d/timeshift-data)
8月 26 01:09:01 jay-PC cron[586]: (*system*timeshift-data) RELOAD (/etc/cron.d/timeshift-data)
8月 26 01:17:01 jay-PC CRON[792841]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
8月 26 01:17:01 jay-PC CRON[792842]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
8月 26 01:17:01 jay-PC CRON[792841]: pam_unix(cron:session): session closed for user root
8月 26 01:22:01 jay-PC cron[586]: (*system*timeshift-hourly) RELOAD (/etc/cron.d/timeshift-hourly)
8月 26 01:30:01 jay-PC CRON[798782]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
8月 26 01:30:01 jay-PC CRON[798783]: (root) CMD (/opt/apps/com.idaoteng.data-bak/bak-data.sh )
8月 26 01:30:04 jay-PC CRON[798782]: pam_unix(cron:session): session closed for user root
8月 26 01:40:01 jay-PC CRON[803118]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
8月 26 01:40:01 jay-PC CRON[803119]: (root) CMD (timeshift --check --scripted --config /opt/com.idaoteng.work-bak/timeshift-work.json)
8月 26 01:40:04 jay-PC CRON[803118]: pam_unix(cron:session): session closed for user root
8月 26 21:30:01 jay-PC CRON[811952]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
8月 26 21:30:01 jay-PC CRON[811953]: (root) CMD (/opt/apps/com.idaoteng.data-bak/bak-data.sh )
8月 26 21:30:04 jay-PC CRON[811952]: pam_unix(cron:session): session closed for user root
8月 26 21:40:01 jay-PC CRON[816499]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
8月 26 21:40:01 jay-PC CRON[816500]: (root) CMD (timeshift --check --scripted --config /opt/com.idaoteng.work-bak/timeshift-work.json)
8月 26 21:40:04 jay-PC CRON[816499]: pam_unix(cron:session): session closed for user root
8月 26 22:00:01 jay-PC CRON[827273]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
8月 26 22:00:01 jay-PC CRON[827274]: (root) CMD (timeshift --check --scripted)

Reply Favorite View the author
All Replies
璀璨星空
deepin
2024-08-20 23:55
#1

也就是说通过修改配置文件就可以自定义备份那个分区上的数据了?子卷名称也是随便自己定义?

Reply View the author
风吹过的绿洲
deepin
2024-08-21 00:09
#2
璀璨星空

也就是说通过修改配置文件就可以自定义备份那个分区上的数据了?子卷名称也是随便自己定义?

可以自定义备份不同的linux标准目录下的文件夹(+/work)到不同的分区

比如

数据备份:

/home

/opt

备份到另一个磁盘分区a

代码备份:

/work

备份到另一个磁盘分区b

系统备份:

把根目录下除了排除文件外

备份到另一个磁盘分区c

Reply View the author
neko
deepin
Ecological co-builder
2024-08-21 06:09
#3

太强了

Reply View the author
W2J
deepin
2024-08-21 08:19
#4

真是大牛丫。

有备份模式考虑吗?

我是习惯于平时增量备份,年度整理成基线备份,以便适应SSD轮储的次数和寿命,以及优化OSready前总启动效率。

前几天硬件冻结了dp23rc的sudo鉴权保持的会话出错状态,后来发现dp23大升级了才重启它。

内备份(休眠和恢复硬件状态)外备份,不同时机关注点不同。主打一个使用便利。

Reply View the author
风吹过的绿洲
deepin
2024-08-21 19:53
#5
W2J

真是大牛丫。

有备份模式考虑吗?

我是习惯于平时增量备份,年度整理成基线备份,以便适应SSD轮储的次数和寿命,以及优化OSready前总启动效率。

前几天硬件冻结了dp23rc的sudo鉴权保持的会话出错状态,后来发现dp23大升级了才重启它。

内备份(休眠和恢复硬件状态)外备份,不同时机关注点不同。主打一个使用便利。

以前都不懂的,这项目怎么构建,怎么打包,有需求之后就自己摸索了

Reply View the author