Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
203 lines (148 sloc) 5.23 KB

Appendix III. How to Backup

1) Basic

(1) Cloud storage

  • Tsinghua cloud based on seafile 清华云,在校内使用速度快。
  • Nutstore cloud 商业云存储,每个月有免费的备份流量。自己申请账号使用。
  • Nextcloud 实验室内部搭建的云存储。找实验室管理人员开通账户。

(2) Backup tool that comes with the system

(3) Backup your code with GitHub

  • Create and edit your repositories (repos.) at GitHub on line
  • Use GitHub Desktop App to sync your local projects (code) with Github repos.

2) Advanced

(1) Backup your code with GitHub in Terminal

email =[]
name = Shared
  • Clone/Download an existed repository on github
git clone
git clone
  • Create a new repository
echo "# test" >> 
git init 
git add 
git commit -m "first commit" 
git remote add origin 
git push -u origin master
  • Sync local files with github repo

Pull (update):

git pull origin master
git log -n 2 # look at the last two log entries.


git add exmaples/
git commit -m ‘20190705v1’
git push origin


git commit -m ‘20190705v1’
git push origin


git rm *.file
git commit -m ‘20190705v1’
git push origin

Tips: the bash script to sync a github repo:

echo $time
git add -u .
git add *
git commit -m '$time'
git push origin master

(2) Backup data using rsync and crontab

(1) Setup ssh key (optional)

  • (a) Generate SSH key
ssh-keygen -t rsa -b 2048
  • (b) Copy your keys to the target server
ssh-copy-id user@server_ip    #if port add: -p 2200

上述操作后,通过ssh到remote server时就可以无需输入密码了,因此下面的步骤也可以在无人值守的时候自动运行。

但如果下面的步骤中你无需登录remote server, 就无需setup ssh key。

(2) Prepare a backup script with rsync

  • (a) First you need to prepare some backup dirs
mkdir /home/john/backup_local    # prepare a backup dir for some local files
mkdir /home/john/backup_remote   # prepare a backup dir for some remote files
  • (b) Then, write a back up script, for example : ~/

#0. Define the parameters of rsync
RSYNC="rsync --stats  --compress --recursive --times --perms --links --delete --max-size=100M --exclude-from=/home/john/excluded_file_list.txt"

#A. Local backup  
echo "1. Backup of /home/john/data start at:"
$RSYNC /home/john/data/  /home/john/backup_local/
echo "Backup end at:"

#B. Remote backup 
echo "2. Backup start at:"
$RSYNC john@ /home/john/backup_remote/
echo "Backup end at:"
  • (c) Last, make your excutable
chmod +x ~/

Parameters of rsync (use man rsync to see more details):

Parameter Mean
-a: 以递归方式传输文件
--delete: 删除那些接收端还有而发送端已经不存在的文件
-q: 精简输出模式
-z: 在传输文件时进行压缩处理
-H: 保持硬链接文件
-t: 对比两边文件的时间戳和文件大小.如果一致,则就认为两边文件一样,对此文件就不再采取更新动作了
-I: 挨个文件去发起数据同步
--port=PORT: 端口号

(3) Schedule the back tasks with crontab

crontab是Linux中用来定期执行程序的命令, 你可以使用 在线crontab生成器,也可以按如下方式自己编辑:

  • 打开crontab编辑器:
crontab -e
  • 加入以下行:
# minute hour day_in_month month day_in_week command
15 3 * * * /home/john/ > /home/john/backup.log

Linux将通过crontab定时运行上述命令, 具体定义如下:

Column Mean
Column 1: Minutes 0 to 59
Column 2: Hours 0 to 23 (0 means midnight)
Column 3: Day 1 to 31
Column 4: Months 1~12
Column 5: Week 0 to 7 (0 and 7 for Sunday)
Column 6: Command to run

(3) More Reading for advanced users

  • 鸟哥的Linux私房菜-基础学习篇》 (25章推荐章节)

    Linux 推荐章节:

    • 第25章 LINUX备份策略: 25.2.2完整备份的差异备份; 25.3鸟哥的备份策略; 25.4灾难恢复的考虑; 25.5重点回顾
You can’t perform that action at this time.