如何快速将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迁移

posted @ 2017-05-08 10:22  公羊天纵  阅读(468)  评论(0编辑  收藏  举报