备份工作文件夹的偏执狂指南

糟糕的时间

Leanpub支持多个存储引擎, 私有GitHub存储库可能是备份工作文件夹的最安全方法。 我选择Dropbox是因为我没有想到自动同步机制会出现任何问题。

写书时 ,我意外地抹去了一半的图表,并且所有更改都被Dropbox立即同步了。 免费的Dropbox帐户不提供文件夹级别的版本控制,因此删除的文件就消失了。 幸运的是,IntelliJ IDEA 本地历史记录保存了这一天,并且图表已正确还原。

备份

事故是不可避免的,因此灾难恢复计划从一开始就应该是头等大事。

第一种选择是简单地存档工作文件夹的副本并将其存储在其他位置。 这种方法可能很简单,但有一些主要缺点:

  • 即使只是更改了一堆文件,也会浪费大量磁盘空间
  • 检测更改需要一些外部工具

使用外部硬盘驱动器时,磁盘空间并不是真正的问题。 对于远程存储, 增量复制机制更合适。

尽管我使用的是Windows计算机,但我碰巧广泛使用Cygwin 。 即使附带大量的Unix实用程序,某些与内核相关的工具也无法在Windows上轻松实现。 如果没有inotifywatchman实用程序将无法使用。

更好的选择是遵循版本控制工具方法。 考虑到这一点,我将工作文件夹变成了本地Git存储库。 即使没有在远程计算机上镜像存储库,我仍然可以利用版本控制机制。 Git提供了检测未决更改的方法,并且可以将存储库复制到多个位置(解决单点故障问题)。

我当前的解决方案如下所示:

#!/bin/sh

git_lock=./.git/index.lock

if [ -f $git_lock ];
then
   echo "Git lock $git_lock exists, we must remove it."
   rm -f $git_lock
fi

git add .
status=`git status --untracked-files=no --porcelain`

if [ -z "$status" ]; then
    echo "No change detected!"
else
    echo "Changes detected, autosave and synchronize!"
    git commit -m "Autosave `date`"

    echo "Copy backup"
    epoch=`date +%s`
    backup_file=backup-$epoch.zip
    7z a -t7z /cygdrive/d/Vlad/Work/Books/high-performance-java-persistence/backups/$backup_file . -r

    echo "Rsync to OneDrive"
    rsync.exe -r . /cygdrive/c/Users/Vlad/OneDrive/Documente/high-performance-java-persistence/manuscript/
fi
  1. 如果git进程在执行某些操作时崩溃,则该锁将阻止任何进一步的操作,因此需要首先将其删除。
  2. 所有更改均已上演
  3. 使用Git status命令,我们检查是否有待处理的更改。 如果没有任何变化,那么浪费资源来同步工作文件夹是没有意义的。
  4. 所有更改都会自动提交,因此可以提供时间点恢复
  5. 存档副本将转到单独的外部驱动器
  6. 使用rsync ,Dropbox Git存储库也将镜像到OneDrive

最后,工作文件夹由Dropbox和OneDrive支持,并且版本控制通过Git处理。 完整的存档副本也存储在外部驱动器上(以防万一)。

过程自动化

剩下要做的就是自动化备份过程。 如果cron是Linux系统的事实上的任务调度程序,则在使用Cygwin时,cron需要设置管理权限,专用的Windows服务和安全策略调整。 为了简单起见,我选择了一种更简单的方法,使用如下所示的无限循环:

#!/bin/sh

cd `dirname "$0"`

while [ 1 ]; do
    ./bkp.sh
    test $? -gt 128 && break;
    sleep 15
done

只要终端没有收到用户的SIGTERM信号 ,备份脚本就会每15秒调用一次。

要在系统启动时运行此脚本,启动Windows批处理脚本必须像下面这样打开Cygwin:

start /min C:\cygwin64\bin\mintty --hold never /bin/bash -l -e '/cygdrive/c/Users/Vlad/Dropbox/high-performance-java-persistence/manuscript/run-bkp.sh'

结论

备份策略可以使您免于不可挽回的数据丢失。 通过跨多个服务器镜像工作文件夹,即使给定的外部服务关闭,您也可以访问数据。 跟踪所有更改使恢复变得容易得多,因此Git存储库听起来很吸引人。

翻译自: https://www.javacodegeeks.com/2015/09/a-paranoids-guide-to-backing-up-a-working-folder.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值