发一个仿时光机器 rsync 备份脚本 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
infinet
V2EX    分享创造

发一个仿时光机器 rsync 备份脚本

  •  
  •   infinet
    infinet 2016-04-04 22:03:53 +08:00 4696 次点击
    这是一个创建于 3527 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/infinet/rsync-time-machine

    好吧,这个名字很大路。

    前段时间勒索软件横行,加上担心文件服务器曾因空调系统故障“发烧”埋下了隐患,所以写了这个脚本打算把文件服务器定期备份到另一台机器。现成的类似程序不少,比如 rsnapshot , backintime 等。个人已经用了好几年 backintime ,很不错,只不过 backintime 可以从本机往远程备份,反过来却不行。需要从远程往本地备份的通常是用 sshfs 把远程 mount 到本地,再从本地备份到本地。这样的话完全不能发挥 rsync 最神奇的功能。

    功能:

    • 通过 ssh 备份远程机器。当然,本地到本地一样支持。
    • 备份源可以包括多个文件夹
    • 使用 hardlink 节省空间。
    • 自动删除旧备份,可以设置保留过去一天内所有备份,过去一周内每天一个备份,过去一月每周一个备份等等
    • 简单复制修改配置文件就能轻松设置多个备份,结合 cron 更是省时省力。
    12 条回复    2016-04-06 16:09:48 +08:00
    guonning
        1
    guonning  
       2016-04-05 00:10:56 +08:00 via Android
    已收藏
    RqPS6rhmP3Nyn3Tm
        2
    RqPS6rhmP3Nyn3Tm  
       2016-04-05 00:28:34 +08:00 via Android
    如果能加密就更好了!现在用的是自己写的脚本,定时打包后 PGP 加密上传百度云。
    虽然这样很傻,但是百度云空间大啊…
    ivmm
        3
    ivmm  
       2016-04-05 07:31:57 +08:00 via Android
    个人也觉得最好有加密
    churchmice
        4
    churchmice  
       2016-04-05 09:30:21 +08:00 via Android
    楼主这功能 rbme 早就实现了吧
    infinet
        5
    infinet  
    OP
       2016-04-05 09:34:15 +08:00
    @BXIA @ivmm 提几个思路,
    可以用 eCryptfs 、 EncFS 等把敏感数据先加密,然后再备份,这样存放备份的目录可以直接和云端同步;

    或者用 dm-crypt 等加密存放备份的硬盘分区,但这样就不能直接和云端同步了;

    不知道建立在 eCryptfs 上的文件系统能不能支持 hard link ,要不然可以 eCryptfs 加密存放备份的目录。
    infinet
        6
    infinet  
    OP
       2016-04-05 10:43:14 +08:00
    @churchmice以前没 google 到 rbme...,它的报告和自动剩余空间处理很强大,不过对我来说 rbme 还是不太适用,因为它是根据剩余空间和 inode 来删除过去的备份,而不是象时光机器一样配置为自动保留周备份,月备份;另外它必需通过建立几个 rbme 符号连接来同时跑多个备份任务,这种设置方式有点费脑子。
    RqPS6rhmP3Nyn3Tm
        7
    RqPS6rhmP3Nyn3Tm  
       2016-04-05 11:02:23 +08:00
    @infinet 想也是想到了,但是这样一个显著的问题是无法恢复到指定时间点的文件。不知道有没有办法可以做成 Time Machine 这样的加密备份
    infinet
        8
    infinet  
    OP
       2016-04-05 20:49:02 +08:00
    @BXIA 刚试了一下,可以在 eCryptfs 上用 hard link ,这样就简单了,在 USB 硬盘上建个保存备份的目录并用 eCryptfs 加密,每次备份前 mount 这个目录。要恢复指定时间点直接查看该时间的备份就是。这个加密目录 umount 后就可以直接向云端同步。
    julyclyde
        9
    julyclyde  
       2016-04-05 21:23:39 +08:00
    现成的 rsnapshot rdiff-snapshot
    infinet
        10
    infinet  
    OP
       2016-04-06 08:38:33 +08:00
    rsnapshot 只能设置保留过去 m 天和 n 小时的备份; rdiff-snapshot 我用过一段时间,网络传输效率很高,底层用的就是 rsync ,磁盘空间利用率也不错,但恢复备份不直观,不能直接浏览备份,还有它保存的是文件内容变动 delta ,所以不能任意删除某时间点的备份,删掉后前后备份就连不上了。

    备份脚本太多了,各取所需吧。
    julyclyde
        11
    julyclyde  
       2016-04-06 15:18:45 +08:00
    @infinet 基于 rsync 的都不是保存 delta 吧
    infinet
        12
    infinet  
    OP
       2016-04-06 16:09:48 +08:00
    多数基于 rsync 的备份软件都是用 hard link 来保存没有变化的文件,如果文件有变动就存一份完整的新拷贝, delta 只用在传送; rdiff-backup 走的不同的路子,它保存前一个备份的基础上的 delta 。
    关于    帮助文档     自助推广系统     博客     API     FAQ     Solana     2574 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 14:56 PVG 22:56 LAX 06:56 JFK 09:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86