linux服务器数据备份

记录linux服务器端数据备份相关内容

由于经常要从服务器上备份数据,这篇文章主要记录数据备份的一些方案。

基于Python3

在需要下载的文件目录下,开启简单的文件服务器,下面的命令指定了端口为3040.

1
python -m http.server 3040

需要注意防火墙开放3040端口。

备份到google盘

gdrive

gdrive的github项目地址为: github项目

gdrvie可以用来下载和上传文件,还可以指定同步的文件夹。

安装

首先,执行以下命令安装gdrive

1
2
wget -O /usr/bin/gdrive "https://docs.google.com/uc?id=0B3X9GlR6EmbnWksyTEtCM0VfaFE&export=download"
chmod +x /usr/bin/gdrive

第二步,认证登录

输入以下命令,在浏览器访问网址,得到验证码。

1
gdrive about

认证完毕后,token文件路径为~/.gdrive/token_v2.json.

使用

  1. 查看文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    gdrive [global] list [options]

    options:
    -m, --max <maxFiles> 最大显示文件数: 30
    -q, --query <query> 过滤命令,默认为: "trashed = false and 'me' in owners". 查看https://developers.google.com/drive/search-parameters
    --order <sortOrder> 排序. 查看See https://godoc.org/google.golang.org/api/drive/v3#FilesListCall.OrderBy
    --name-width <nameWidth> 文件显示字符宽度, 默认: 40, 最小: 9, 可使用 0 表示显示全部 full width
    --absolute Show absolute path to file (will only show path from first parent)
    --no-header Dont print the header
    --bytes Size in bytes
  2. 上传文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    gdrive [global] upload [options] <path>

    options:
    -r, --recursive 上传目录及其子目录
    -p, --parent <parent> 父目录id,可以指定多个父目录
    --name <name> 保存文件名
    --description <description> 文件描述
    --no-progress 隐藏上传进度
    --mime <mime> 强制mime
    --share 公开分享文件
    --delete 上传完成后删除本地文件
    --timeout <timeout> 超时时间,0为永不超时,默认为300
    --chunksize <chunksize> 上传分片大小,默认为: 8388608
  3. 下载文件

    1
    2
    3
    4
    5
    6
    7
    gdrive [global] download query [options] <query>

    options:
    -f, --force 覆盖本地同名文件
    -r, --recursive 下载目录及其子目录,documents will be skipped
    --path <path> 下载路径
    --no-progress 隐藏下载进度
  4. 同步文件夹

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    gdrive [global] sync upload [options] <path> <fileId>

    options:
    --keep-remote 发生冲突时保留服务端文件
    --keep-local 发生冲突时保留本地文件
    --keep-largest 发生冲突时保留最大文件
    --delete-extraneous 删除服务端其他文件
    --dry-run Show what would have been transferred
    --no-progress Hide progress
    --timeout <timeout> 超时时间,0为永不超时,默认为300
    --chunksize <chunksize> 上传分片大小,默认为: 8388608

同步文件夹

参考官方示例:

1
2
3
4
5
6
# Create directory on drive
$ gdrive mkdir drive-bin
Directory 0B3X9GlR6EmbnOEd6cEh6bU9XZWM created

# Sync to drive
$ gdrive sync upload _release/bin 0B3X9GlR6EmbnOEd6cEh6bU9XZWM

这样我们可以写个定时脚本往指定文件夹添加添加文件进行同步了。

下载谷歌盘分享的文件

对于分享的文件,需要取得share_id

使用gdown

gdown只是用来下载谷歌网盘分享的文件。

1
pip install gdown # 安装gdown

下载命令

1
gdown --id <share_id>

使用wget

1
wget -O /usr/bin/user.json "https://docs.google.com/uc?id=<share_id>&export=download"

备份到webdav

基于davfs2的docker镜像

github: https://github.com/efrecon/docker-webdav-client

1
2
3
4
5
6
7
8
9
10
11
docker run -itd --name webdav_client \
--device /dev/fuse \
--cap-add SYS_ADMIN \
--security-opt "apparmor=unconfined" \
--env "WEBDRIVE_USERNAME=<YourUserName>" \
--env "WEBDRIVE_PASSWORD=<SuperSecretPassword>" \
--env "WEBDRIVE_URL=https://dav.box.com/dav" \
--env "DAVFS2_ASK_AUTH=0" \
--env "OWNER=0" \
-v /mnt/tmp:/mnt/webdrive:rshared \
efrecon/webdav-client

全能挂载工具rclone

github: https://github.com/rclone/rclone

参考博客