迁移数据到可道云

本文阅读预计需要: 5 minutes

1. 迁移说明

可道云 KodBox 存储数据的目录通常为站点下 data/files 目录,但由于采用了文件去重/秒传的逻辑,实际存储结构与网页看到的目录并不相同,因此在服务器上直接移动文件到可道云存储目录无法实现迁移。

这里假设有 2 台服务器,需要从 服务器 A 迁移数据到 服务器 B

  • 服务器 A:原服务器 192.168.1.100,上面有待迁移数据,操作系统可以是 Linux/Windows/NAS
  • 服务器 B:可道云服务器 192.168.1.101,已按官网教程完成可道云部署,操作系统默认是 Linux

迁移数据到可道云主要分为两个步骤:

  1. 通过 rsync 命令同步,将 服务器 A 的文件同步到 服务器 B
  2. 在网页登录可道云管理员账号,将 服务器 B 的本地文件剪切到可道云。

2. Rsync 目录同步

迁移 Linux 数据到可道云服务器

提示

当待迁移 服务器 A 为 Linux 时:

  • 安装 rsync 的方式为 yum install -y rsync
  • 假设待迁移数据位于 /data 目录。

服务器 A 执行同步命令:

$ rsync -avP /data/* --chown=nginx:nginx root@192.168.1.101:/data

服务器 A/data 目录同步到 服务器 B/data 目录。

rsync_linux

迁移 Windows 数据到可道云服务器

提示

当待迁移 服务器 A 为 Windows 时:

  • 可以使用 cwrsync,命令中目录要以 /cygdrive/ 开头,盘符后面没有 :
  • 假设待迁移数据位于 D:\data 目录。
  • --chown=nginx:nginx 同步修改文件所有者为 nginx,若服务器 B 没有 nginx 用户请省略。
  1. 下载 cwrsync_6.2.9_x64_free.zip,解压并重命名到 c:\cwrsync 目录;
  2. 打开 powershell 终端,执行同步命令:

     C:\cwrsync\bin\rsync.exe -e 'c:\cwrsync\bin\ssh.exe' -avP --chown=nginx:nginx /cygdrive/d/data/* root@192.168.1.101:/data
    

    服务器 AD:\data 目录同步到 服务器 B/data 目录。

rsync_win

迁移 NAS 数据到可道云服务器

提示

当待迁移 服务器 A 为 NAS 时:

  • 默认已有 rsync 命令,需要开启 ssh 功能,通过管理员账号可以登录。
  • 假设待迁移数据位于 /volume1/web/data 目录。

这里以群晖 DSM 7.2 为例:

通过 ssh 登录 NAS,然后执行同步命令(需要注意命令加了 sudo,回车后要输一次管理员密码):

$ sudo rsync -avP /volume1/web/data/* --chown=nginx:nginx root@192.168.1.101:/data

服务器 A/volume1/web/data 目录同步到 服务器 B/data 目录。

rsync_nas

3. 将服务器本地文件写入可道云

当前所有数据已经迁移到可道云服务器的 /data 目录,若让这些文件在可道云页面可读写,需要赋予 nginx 的读写权限。

$ chown -R nginx:nginx /data/
$ chmod -R 755 /data/

nginx_priv

在网页登录可道云管理员账号,在文件地址栏输入 /data 并回车进入站点根目录,找到已迁移数据。

data_path

可以选中文件夹右键剪切,进入企业网盘并右键粘贴,或者直接拖动文件夹移动到企业网盘,等待执行完成即可。

data_move

若耗时较久,可以在任务管理器中查看后台执行进度。

getask

4. 迁移 TB 级数据说明

提示

当待迁移数据达到 TB 级别时:

  • 手动执行 rsync 已不再适合,建议通过脚本方式实现自动化与可控迁移。
  • 简单的数据拷贝方式效率和可靠性不足,应改为使用系统提供的数据导入功能来完成迁移。
  1. 自动化脚本同步参考,并设置每小时自动执行crontab -e添加0 * * * * /usr/local/bin/rsync_auto.sh

     #!/bin/bash
    
     # ===== 配置 =====
     SRC="admin@192.168.1.100:/data/"
     DST="/kdisk/volume1/mgfiles/data/"
     LOG="/var/log/rsync.log"
     LOCK="/tmp/rsync.lock"
     RSYNC_CMD=(rsync -av --ignore-existing --partial --exclude='.*')
    
     # ===== 时间窗口 =====
     # 0 = 允许运行
     in_time_window() {
         local HOUR WEEKDAY
         HOUR=$(date +%H)
         WEEKDAY=$(date +%u)
    
         # 周末
         [ "$WEEKDAY" -ge 6 ] && return 0
    
         # 工作日 18:00–09:59
         [ "$HOUR" -ge 18 ] || [ "$HOUR" -lt 10 ]
     }
    
     # ===== rsync PID =====
     get_rsync_pids() {
         pgrep -f "$RSYNC_CMD $SRC $DST"
     }
    
     RSYNC_PIDS=$(get_rsync_pids)
    
     # ===== 主逻辑 =====
     if in_time_window; then
         # ===== 允许时间 =====
         if [ -n "$RSYNC_PIDS" ]; then
             # rsync 在跑
             [ ! -f "$LOCK" ] && touch "$LOCK"
             echo "$(date '+%F %T') allowed window, rsync running: $RSYNC_PIDS" >> "$LOG"
             exit 0
         fi
    
         # rsync 不在跑
         if [ -f "$LOCK" ]; then
             echo "$(date '+%F %T') stale lock found, removing." >> "$LOG"
             rm -f "$LOCK"
         fi
    
         # ===== 启动 rsync =====
         echo "$(date '+%F %T') allowed window, starting rsync." >> "$LOG"
         touch "$LOCK"
    
         stdbuf -oL -eL "${RSYNC_CMD[@]}" "$SRC" "$DST" >> "$LOG" 2>&1 &
         RSYNC_PID=$!
    
         echo "$(date '+%F %T') rsync started, pid=$RSYNC_PID" >> "$LOG"
     else
         # ===== 禁止时间 =====
         if [ -n "$RSYNC_PIDS" ]; then
             echo "$(date '+%F %T') forbidden window, killing rsync: $RSYNC_PIDS" >> "$LOG"
             kill -9 $RSYNC_PIDS
         fi
    
         if [ -f "$LOCK" ]; then
             rm -f "$LOCK"
             echo "$(date '+%F %T') forbidden window, lock removed." >> "$LOG"
         fi
     fi
    
     exit 0
    
  2. 确认同步完成,如tail /var/log/rsync.log不再更新,同时du -sh /kdisk/volume1/mgfiles/data与原始目录比较大小一致。

  3. 进入后台存储管理,使用迁移目录创建新存储新迁移文件,这是数据导入的条件之一。

    mgfiles

    mgfiles1

  4. 在存储管理右上方,点击存储导入,选择目录位置后确定开始。

    • 原始数据目录:新迁移文件 /data
    • 网盘存储目录:企业网盘 /data

migrate1

注意

  • 网盘文件需通过存储路径访问,因此在导入之前,需将待导入的原始数据目录(或父级目录)添加为存储。
  • 此操作不会对原始数据做改动,只构建文件索引映射到网盘,在导入之后,不能对原始数据做任何改动,避免索引失效。
  • 导入数据与网盘默认存储数据的路径结构不同,建议将导入数据的存储作为附加存储(而非系统默认存储)使用,以维护数据结构统一。
  • 导入之前建议对数据库进行备份,以免出现意外。
  • 文件路径长度超过256个字符会被限制导入,相关日志放在网盘存放目录下的“导入失败日志-长度超256字符”文件夹中,可在导入完成后自行查看并处理。
迁移, 可道云