对于软件工程师来叫高效率、低成本的备份方案太重要了,相信大部分人都有盘毁码完的经历,这里介绍一种方案:
一些常用方案的优缺点
文件拷贝
优点: 操作简单明了
缺点:效率低下,由于一些中间编译文件都被拷贝过去了,往往极大的浪费了硬盘空间,而且备份时间可能过长版本控制
通过git, performance, CVS, SVN等
优点:功能强大,可以协同进行开发,完善的版本控制,代码diff, merge等功能
缺点:- 对于一个人进行的前期或者私密开发,代码还不太想公开
- 需要搭建服务器,而且以后恢复数据,还得通过客户端和服务器来恢复数据,还是显得有点麻烦
- 还得自己选择要check in的文件,有点麻烦
这里介绍一种简单方案
本方案的优点:
- 一键备份,每天都可以进行
- 对于编译过程中生成的文件进行忽略
- 只同步变化的文件
方案需求
- 安装wsl (Windows Subsystem for Linux)
在Windows Store中查找ubuntu,安装好后,所有的widows的盘符,都被映射到/mnt/下
比如C盘,就是/mnt/c,这样你就可以在wsl下面访问windows系统的文件了。 - 准备一块备份硬盘
此硬盘仅仅作为备份用,请不要用其他软件更新数据,或者在备份硬盘上工作
一旦在新的环境中工作,请尽量拷贝到工作电脑的硬盘,再对其进行改动。
一块大容量的移动硬盘价格一般不到1000元,坏掉一块硬盘,对应数据恢复成本都是上千元,甚至几千元,而且还得再买一块新硬盘把数据恢复拷贝回来,还是额外准备一块备份移动硬盘划算。
当然备份硬盘最好也是每4·5年换一次。
- 安装wsl (Windows Subsystem for Linux)
本方案使用linux rsync命令,先介绍一些rsync的常用用法
- 把/mnt/d/rsynctest/A sync到/mnt/d/rsynctest/B, A作为B的子目录
rsync -avP /mnt/d/rsynctest/A /mnt/d/rsynctest/B
- 同上,只不过把A下所有的文件和目录sync到/mnt/d/rsynctest/B
rsync -avP /mnt/d/rsynctest/A/ /mnt/d/rsynctest/B
- 同上,不要拷贝以.obj, *.ilk为后缀的文件名
vim exclude_list.txt
*.ilk
*.obj
:w
rsync -avP --exclude-from exclude_list.txt /mnt/d/rsynctest/A/ /mnt/d/rsynctest/B
- 同上,不要拷贝以.obj, *.ilk和folder为release或者debug的所有文件名和目录
vim exclude_list.txt
*.ilk
*.obj
release/*
debug/*
:w
rsync -avP --exclude-from exclude_list.txt /mnt/d/rsynctest/A/ /mnt/rsynctest/B
5.有时候有很复杂的要求,比如:
同上,不要拷贝*.obj, *.ilk, 和不区分大小写的排除debug和release目录,但是目录下的.c/.cpp等源代码文件还需要继续保持
vim filter.txt
+ *.cpp
+ *.asm
+ *.c
+ *.cxx
+ *.h
+ *.hpp
+ *.hxx
+ *.java
+ *.inl
+ *.def
+ *.idl
+ readme.txt
- *.ncb
- *.sbr
- *.ilk
- *.sdf
- *.pdb
- *.ipdb
- *.obj
- *.iobj
- *.bsc
- *.idb
- *.exe
- *.lib
- *.dll
- *.cache
- *.lastbuildstate
- *.tlog
- *.so
- *.suo
- *.[vV][cC].[dD][bB]
- */[dD][eE][bB][uU][gG]/*
- */[rR][eE][lL][eE][aA][sS][eE]/*
- */ipch/*
:w
rsync -avP --filter="merge filter.txt" /mnt/d/rsynctest/A/ /mnt/d/rsynctest/B
最后要说的就是通过最后一种方式来备份,为要备份的folder,创建一个filter.txt,然后就通过一个命令好就备份对应的folder好了,如果大家都是用一个规则,就用一个filter.txt就行了。
下班前半个小时,运行一下命令,一切OK
rsync -avP --filter="merge filter.txt" /mnt/e/ /mnt/h
假设被备份的盘是e盘,备份盘是h盘