如何快速将Linux文件系统迁移到Azure存储
概述
前一段时间一直在给一个客户将原先搭载在Linux(客户使用的是CentOS 7.0)上的NFS快速迁移到Azure存储上,并且为了保证数据完整性还需要另开一个存储做冷备,架构图如下:
通过Cli迁移
而对于将NFS上的文件迁移到Azure存储,首先想到的是通过Cli工具进行迁移。
在CentOS上安装CLI
yum install -y epel-release yum install nodejs -y yum install npm -y npm install -g azure-cli
使用cli迁移的脚本
#!/bin/bash container={storage container} btype=block storageaccount={storage account} storagekey={storage key} upload(){ files=`ls -l | awk '/rw/ {print $9}'` for file in $files do blobname='' if [$* -f ''];then blobname=$file else blobname=$*"/"$file fi if [ -f $file ]; then azure storage blob upload -f ./$file --container $container -b $blobname -t $btype -a $storageaccount -k $storagekey else #echo "$file is a Directory" cd $file upload $blobname cd .. fi done } upload
部分迁移信息如下:
但是经过实测,发现使用cli迁移的效果并不理想,根据我当时的测试结果(不代表官方),大概1小时才上传200MB左右。
通过Powershell迁移
然后想到了使用Powershell迁移,而在linux上玩Powershell应该也挺有趣的。
开始在CentOS上安装Powershell
#安装Powershell yum install ./ powershell-6.0.0_alpha.18-1.el7.centos.x86_64.rpm mkdir -p /usr/local/share/powershell/Modules #进入PS Powershell #安装Azure Powershell模板 Install-Package -Name AzureRM.NetCore.Preview -Source https://www.powershellgallery.com/api/v2 -ProviderName NuGet -ExcludeVersion -Destination /usr/local/share/powershell/Modules #导入AzureRm包 Import-Module AzureRM.NetCore.Preview
一些准备就绪,发现AzureRm(ARM)并没有提供上传文件的命令,而我也一直没有找到如何在Linux上安装Azure(ASM)模板,到此想通过Powershell做迁移也不了了之。
通过blobxfer快速迁移
在后来,听Azure群里一位老师说可以通过blobxfer来快速迁移,但是blobxfer是什么鬼?查资料(https://github.com/Azure/blobxfer),发现blobxfer是通过python实现的类似于AzCopy(只能在Windows下使用)的工具,而且上传下载非常快速。
Blobxfer安装
yum install gcc openssl-devel #下载并安装Python-2.7.13 wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz tar zxvf Python-2.7.13.tgz cd Python-2.7.13 ./configure --prefix=/usr/local/python27 make && make install #安装setuptools wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-20.3.1.tar.gz tar xf setuptools-20.3.1.tar.gz cd setuptools-20.3.1 python27 setup.py install --prefix=/usr/local/python27/ #安装pip-9.0.1 wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9 tar zxvf pip-9.0.1.tar.gz cd pip-9.0.1 python27 setup.py install --prefix=/usr/local/python27/ ln -sv /usr/local/python27/bin/pip2.7 /usr/bin/pip27 #解决依赖关系以及安装blobxfer yum install python-urllib3 yum install libffi-devel pip27 install blobxfer --prefix=/usr/local/python27 pip27 install pyopenssl ndg-httpsclient pyasn1 ln -sv /usr/local/python2.7/bin/blobxfer /usr/bin/blobxfer
Blobxfer迁移命令
blobxfer --no-overwrite --storageaccountkey {storage key} --endpoint core.chinacloudapi.cn {storage account} {storage container} {本地目录路径}
而且根据实测,迁移速率大大提升。
介绍一个很low的迁移方案(数据量不大时)
先将NFS中的文件复制到一台Windows机器中,再使用AzCopy迁移
QQ群:150417854