【文件存储NAS】数据迁移工具介绍及使用指南

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
对象存储 OSS,内容安全 1000次 1年
简介: NAS数据迁移工具可以帮助您方便地将对象存储(如OSS、七牛等)或本地磁盘上的文件同步到 NAS文件系统。

一、简介

    文件存储NAS是面向阿里云ECS、HPC、Docker等计算节点的共享文件存储服务,具备简单易用、多共享、高性能、安全等特性,目前支持NFSv3和NFSv4协议。NAS的推出极大丰富了阿里云存储产品线,为用户存储上云提供了更加多样的选择。

    与其他存储产品(主要是对象存储和块存储)及自建NAS相比,阿里云文件存储NAS具备鲜明的特点:



文件存储NAS

对象存储(如OSS、七牛、S3等)

块存储(如阿里云磁盘、AWS EBS等)

自己搭建NAS

标准协议(标准NFS协议、标准NFS客户端、兼容POSIX接口)

YES

通过ossfs等工具提供有限支持

YES

YES

多共享(同一文件系统/名字空间被多个计算节点同时读写访问)

YES

YES

不支持共享

YES

高性能(高吞吐、低延迟、水平弹性扩展)

YES

延迟较高,随机读写性能较差

低延迟,吞吐无法水平扩展

性能没有保证,无法水平扩展

高可靠、高可用、安全

YES

YES

YES

无法保证

    为了满足数据迁移需求,让用户更加方便、快捷地将数据迁移到文件存储NAS,我们于近期推出了NAS数据迁移工具nasimport,nasimport具备以下功能特性:

    (1)支持的数据源:本地磁盘、OSS、七牛、百度对象存储、金山对象存储、又拍云、亚马逊 s3、腾讯云 cos、HTTP链接;

    (2)支持存量数据同步(允许指定只同步某个时间点之后的文件);

    (3)支持增量数据自动同步;

    (4)支持断点续传;

    (5)支持并行数据下载和上传。


二、使用方法

1. 运行环境要求

  • 需要在能够挂载目标NAS文件系统的ECS虚拟机上运行该迁移工具。能否挂载NAS文件系统及如何挂载详见:点击查看
  • 需要在 Java JDK 1.7 以上的环境中运行nasimport迁移工具,建议使用 Oracle 版本 JDK:点击查看
  • 程序运行前请检查进程允许打开的文件数的配置(ulimit -n 查看),如果小于10240,需要作相应修改。

2. 下载工具及配置

2.1 首先,在您本地服务器上创建同步的工作目录,并且将nasimport工具包下载在该目录中。下载链接

示例:创建 /root/ms 目录为工作目录,且工具包下载在该工作目录下:

export work_dir=/root/ms
wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/45306/cn_zh/1479113980204/nasimport_linux.tgz
tar zxvf ./nasimport_linux.tgz -C "$work_dir"

2.2 编辑工作目录 ($work_dir) 下的配置文件config/sys.properties:

vim $work_dir/config/sys.properties
workingDir=/root/ms
slaveUserName=
slavePassword=
privateKeyFile=
slaveTaskThreadNum=60
slaveMaxThroughput(KB/s)=100000000
slaveAbortWhenUncatchedException=false
dispatcherThreadNum=5

建议您直接使用配置默认值。如有特殊要求,可以编辑配置字段值:

字段

说明

workingDir

表示当前的工作目录,即工具包解压后所在的目录

slaveTaskThreadNum

表示同时执行同步的工作线程数

slaveMaxThroughput(KB/s)

slaveMaxThroughput(KB/s)

slaveAbortWhenUncatchedException

表示遇到未知错误时是否跳过还是 abort,默认不 abort

dispatcherThreadNum

 表示分发任务的并行线程数,默认值一般够用


3. 启动服务

3.1 nasimport支持的命令如下:

任务提交:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties submit $jobConfigPath
任务取消:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties clean $jobName
状态查看:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties stat detail
任务重试:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties retry $jobName

3.2 执行如下命令启动后台服务:

cd $work_dir
nohup java -Dskip_exist_file=false -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties start > $work_dir/nasimport.log 2>&1 &

请注意:相关的 log 文件会自动生成在您执行启动服务的当前目录中,建议您在工作目录($work_dir)下执行启动命令。启动任务时如果 skip_exist_file=true,则在上传中如果碰到 NAS 文件系统中上存在且长度和源端一致的文件,将会跳过此文件


4. 提交任务

4.1 编辑任务描述文件 nas_job.cfg

任务描述文件字段说明:

字段名

说明

jobName

自定义任务名字,任务的唯一标识, 支持提交多个名字不同的任务

jobType

可以配置为 import(执行数据同步操作)或者 audit(仅进行同步源数据与同步目标数据全局一致性校验)

isIncremental=false

是否打开自动增量模式,如果设为 true,会每间隔incrementalModeInterval(单位秒)重新扫描一次增量数据,并将增量数据同步到nas上

incrementalModeInterval=86400

增量模式下的同步间隔

importSince

指定时间,用于同步大于该时间的数据,这个时间为 unix 时间戳(秒数);默认为0

srcType

同步源类型,目前支持 oss,qiniu,baidu,ks3,youpai,local

srcAccessKey

如果 srcType设 置为 oss、qiniu、baidu、ks3、youpai,则需要填写数据源的 access key

srcSecretKey

如果 srcType 设置为 oss、qiniu、baidu、ks3、youpai,则需要填写数据源的 secret key

srcDomain

源 endpoint

srcBucket

源 bucket 名字

srcPrefix

源前缀,默认为空;如果 srcType=local,则填写本地待同步目录,请注意您需要填写完整的目录路径(以’/‘结尾)。如果 srcType 设置为 oss、qiniu、baidu、ks3、youpai,则需要填写待同步的 Object 前缀,同步所有文件前缀可以设置为空。

destType 

同步目标类型(默认为 nas)

destMountDir 

NAS 本地挂载目录

destMountTarget

NAS 挂载点域名

destNeedMount=true

工具是否执行自动挂载,默认为 true,您也可以选择false并手动将NAS挂载点到 destMountDir 目录下

destPrefix

填写同步目标端文件前缀,默认为空

taskObjectCountLimit

每个子任务最大的文件个数限制,这个会影响到任务执行的并行度,一般配置为总的文件数/你配置的下载线程数,如果不知道总文件数,建议保持默认值

taskObjectSizeLimit

每个子任务下载的数据量大小限制(bytes),建议保持默认值

scanThreadCount

并行扫描文件的线程数,与扫描文件的效率有关,建议保持默认值

maxMultiThreadScanDepth

最大允许并行扫描目录的深度,建议保持默认值

请注意:

(1) 如果配置了自动增量模式,则任务会定期被执行以扫描最新的数据,该任务永远不会结束。

(2)对于 srcType 为 youpai 的情况,由于又拍云本身 API 限制,list 文件的操作无法实现 checkpoint,在 list 完成之前杀掉进程会导致重新 list 所有文件的操作。


4.2 提交任务

java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties  submit $work_dir/nas_job.cfg

注意事项:

(1)如果有同名任务正在执行,则提交任务会失败。

(2)如果您需要暂停同步任务,您可以停止 nasimport 进程,需要同步时重启 nasimport 进程即可,重启后会按照上次的进度继续上传。

(3)如果您需要重新全量同步文件,您可以先停止 nasimport 进程,再调用如下命令清除当前任务。示例:假设当前任务名为 nas_job(这个任务名配置在文件 nas_job.cfg 中),命令如下:

ps axu | grep "nasimport.jar.* start" | grep -v grep | awk '{print "kill -9 "$2}' | bash
java -jar $work_dir/nasimport.jar  -c $work_dir/conf/sys.properties clean nas_job


5. 查看任务执行状态

java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties  stat detail
--------------job stats begin---------------
----------------job stat begin------------------
JobName:nas_job
JobState:Running
PendingTasks:0
RunningTasks:1
SucceedTasks:0
FailedTasks:0
ScanFinished:true
RunningTasks Progress:
FD813E8B93F55E67A843DBCFA3FAF5B6_1449307162636:26378979/26378979 1/1
----------------job stat end------------------
--------------job stats end---------------

这里会显示当前任务的总体的执行进度,并且会显示当前正在执行的 task 进度。例如上文中:“26378979/26378979”表示:总共需要上传的数据量(26378979字节)/已经上传完成的数据量(26378979字节)。“1/1” 表示:总共需要上传的文件个数(1个)/已经上传完成的文件个数(1个)。


迁移工具会将用户提交的一个 job 任务分解为多个 task 并行执行,当所有的 task 都执行完成之后,job 任务才算执行完成。任务执行完成之后,JobState 会显示为”Succeed”或者”Failed”,表示任务执行成功或者失败。如果任务执行失败,可以通过如下命令查看各个task失败的原因:(以下命令中 $jobName 需要替换成对应的 job 名字,jobName 配置在文件 nas_job.cfg中)

cat $work_dir/master/jobs/$jobName/failed_tasks/*/audit.log

对于任务失败的情况,我们在工具中已经做了较为充分的重试,对于可能由于数据源或者目标源暂时不可用引起的失败情况,可以通过如下命令尝试重新执行失败的任务:

java -jar $work_dir/nasimport.jar  -c $work_dir/config/sys.properties retry $jobName


6. 常见任务失败原因


(1)任务配置出错,比如 access key/id 出错,权限不足等,这种情况下通常现象是所有task都失败,具体确认需要查看 $work_dir/nasimport.log 文件。

(2)源文件名的编码方式与系统默认的文件名编码方式不符,例如在 windows 下文件名默认为 gbk 编码,linux 下默认为 utf-8 编码,对于数据源是 nfs 的情况下较容易出现该问题。

(3)上传过程中源目录的文件发生了修改,这种情况在 audit.log 里会提示SIZE_NOT_MATCH 相关字样的错误,这种情况下老的文件已经上传成功,新的修改没有上传到nas。

(4)源文件在上传过程中被删除,导致下载文件时失败。

(5)数据源出现问题导致下载数据源文件失败。

(6)没有先杀掉进程再执行 clean 有可能会导致程序执行异常。

(7)程序异常退出,任务状态为 Abort,这种情况请联系我们(请加旺旺群:1562614356 )。


7. 建议


在配置迁移服务时,如果源端是 oss,请将 srcDomain 设为带 internal 的内网域名,可以省掉从 oss 源端下载的流量费,仅收取 oss 访问次数的费用,且可以获得更快的迁移速度,oss 内网域名您可以从 oss 控制台获取。

如果您的 NAS 在专有网络中,且源端是 oss,请将 srcDomain 设为 oss 提供 的VPC 环境域名,各 Region 对应的 VPC 环境域名:点击查看

相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
目录
相关文章
|
10月前
|
文件存储 Android开发 iOS开发
DIY nas 之照片备份工具
Immich是一个开源解决方案,主要用于直接从iPhone、Android手机上备份照片与视频。用户可以将Immich部署到自己的电脑、NAS或服务器中,并通过App进行备份
412 2
|
10月前
|
人工智能 关系型数据库 文件存储
DIY nas 之--照片管理工具PhotoPrism
PhotoPrism是一个开源的照片管理工具,是一款由AI驱动的应用程序,主要用于浏览、组织和分享您的照片集。
421 3
|
5月前
|
网络协议 文件存储 Docker
DIY nas 之追番下载工具AutoBangumi
AutoBangumi是一款基于Mikan Project和qBittorrent的全自动追番整理下载工具。
496 1
|
10月前
|
文件存储 数据库
DIY nas 之网盘文件管理工具Filebrowser
Filebrowser是一款免费开源的软件,它是个人网盘和网页版文件管理器。
283 0
|
SQL 分布式计算 关系型数据库
文件存储HDFS版和数据库MySQL双向数据迁移
本文档介绍如何使用Sqoop工具实现文件存储HDFS版和关系型数据库MySQL之间的双向数据迁移。
629 1
|
存储 弹性计算 分布式计算
文件存储HDFS版和对象存储OSS双向数据迁移
本文档介绍文件存储HDFS版和对象存储OSS之间的数据迁移过程。您可以将文件存储HDFS版数据迁移到对象存储OSS,也可以将对象存储OSS的数据迁移到文件存储HDFS版上。
705 0
|
存储 弹性计算 固态存储
免租用云主机将mineportal2做成nas,是个人件也可服务于网站系统是聚合工具也是独立pod的宿舍家用神器
本文关键字:利用包含nsd的mineportal将个人pc打造成nas,apache的oc透露owncloud静态网站服务,发布portalbox,based on colinux and mailbox,一个网站和个人件,hostos与guestos的最佳组合
495 0
免租用云主机将mineportal2做成nas,是个人件也可服务于网站系统是聚合工具也是独立pod的宿舍家用神器
|
存储 弹性计算 文件存储
ECS 备份数据到NAS(一):使用Windows Server Backup工具
本文介绍了在阿里云ECS上通过Windows Server Backup工具将云盘上指定文件夹或者整盘的重要数据备份到阿里云NAS的配置和步骤,通过Windows Server Backup工具可以按需手动或者配置周期性地自动将重要数据备份到NAS,并且在需要的时候方便地从备份中恢复原来的数据。
5092 0
|
机器学习/深度学习 算法 文件存储
AutoMl及NAS概述:更有效地设计神经网络模型工具
还在为自己构建深度模型框架而抓耳饶腮吗?AutoML及NAS了解下,能够自动生成合适的模型结构,解脱你的双手,善待你的头发。
3939 0
|
存储 弹性计算 监控
NAS数据迁移初探
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。
5124 0

相关产品

  • 文件存储NAS