V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
infinet
V2EX  ›  分享创造

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

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

    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   ·   实用小工具   ·   2645 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 15:35 · PVG 23:35 · LAX 07:35 · JFK 10:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.