seafile支持在文件系统、s3、ceph、swift、阿里云oss等存储后端之间互相迁移数据。
在不同后端迁移数据需要三个步骤: 1.新建临时 seafile.conf 文件 2.运行迁移脚本 3.替换 seafile.conf
创建一个新的 seafile.conf, 填写目的后端的配置 (需要包含 [block_backend]
, [commit_object_backend]
, [fs_object_backend]
), 保存到一个目录下, 如 /opt (此目录需要用户具有读取权限)
例如,要迁移到阿里云后端:
cat > seafile.conf << EOF
[block_backend]
name = oss
key_id = LTAIXX****
key = 4BY7WEN*****
bucket = seafblk
endpoint = oss-cn-shanghai.aliyuncs.com
[commit_object_backend]
name = oss
key_id = LTAIBk*****
key = s6jaAJev******
bucket = seafcomm
endpoint = oss-cn-shanghai.aliyuncs.com
[fs_object_backend]
name = oss
key_id = LTAIr9******
key = K95ajKksD******
bucket = seaffs
endpoint = oss-cn-shanghai.aliyuncs.com
EOF
mv seafile.conf /opt
将配置中的 key, bucket 等信息替换成自己的配置
如果您要迁移到本地文件系统,seafile.conf 临时配置示例如下:
cat > seafile.conf << EOF
[commit_object_backend]
name = fs
# the dir configuration is the new seafile-data path
dir = /var/data_backup
[fs_object_backend]
name = fs
# the dir configuration is the new seafile-data path
dir = /var/data_backup
[block_backend]
name = fs
# the dir configuration is the new seafile-data path
dir = /var/data_backup
EOF
mv seafile.conf /opt
如果存储中存在数百万个数据对象(尤其是 fs 对象),这时迁移所有对象可能需要花费很长时间,因为将花费超过一半的时间用于检查目标存储中是否存在对象。为此, 自专业版 7.0.8 起,我们增加了一项功能以加快检查速度。
这要求您在运行迁移脚本之前,设置此环境变量:
export OBJECT_LIST_FILE_PATH=/path/to/object/list/file
这样将会创建出3个对象列表文件:/path/to/object/list/file.commit
,/path/to/object/list/file.fs
, /path/to/object/list/file.blocks
。
第一次运行迁移脚本时,目标存储中现有的对象将会被记录到对应的对象列表文件中。 然后,当您第二次运行脚本时,它将从列表文件加载现有对象列表,而不是查询目标。 并且新迁移的对象也将添加到该文件中。 在迁移期间,迁移过程通过检查预加载的对象列表来检查对象是否存在,而不是询问目标,这将大大加快迁移过程。
建议您第一次运行迁移脚本时,在“获取对象列表”阶段中不要中断脚本。 否则,文件中的对象列表将不完整。
另一个加速迁移的技巧是增加迁移脚本中的工作线程数和任务队列大小。 您可以在以下代码中修改nworker
和maxsize
变量:
class ThreadPool(object):
def __init__(self, do_work, nworker=20):
self.do_work = do_work
self.nworker = nworker
self.task_queue = Queue.Queue(maxsize = 2000)
可以将工作线程数设置为相对较大的值,因为它们主要用来等待I/O
操作完成。
假设 seafile 的安装路径为 ~/haiwen
, 进入 ~/haiwen/seafile-server-latest
目录下, 执行 migrate.sh
, 参数为新建的 seafile.conf 所在目录,这里为 /opt
cd ~/haiwen/seafile-server-latest
./migrate.sh /opt
最后需要先停止seafile
服务,再做一次增量迁移。
对象迁移完成后, 需要将 seafile.conf 替换成新后端的配置
mv /opt/seafile.conf ~/haiwen/conf
此时的 seafile.conf 中仅有关于后端的配置, 更多的配置项和配置方法,如 memcache等,可以参考 这篇文档 进行补充。 替换配置文件之后,重启seafile服务,就可以正常访问新后端的数据了。
Last modified by 徐家强, 2022-02-10