2017年11月15日
AzCopy on LinuxでLinuxサーバーの快適バックアップ
バックアップあれこれ
晩秋の候、皆様如何お過ごしでしょうか。
来る日も来る日もLinuxサーバーで何らかの作業を行っていると、作業前のバックアップの保存先に頭を痛めることが多々あります。特に、コンテンツファイルなどが数万ファイル、数十GBとなると、さらに頭が痛いです。
先日そのようなケースが続いたためAzCopy on Linuxを試したところ、非常に快適でしたので、ご紹介いたします。
AzCopy on Linuxとは
AzCopy on Linuxは、Microsoft Azureの Blob Storageとのファイルのコピーが行える CLIツールです。
従来、AzCopyと言えば Windowsで動作するCLIツールだったのですが、 .NET Coreがクロスプラットフォームとなったことにより、Linuxへの移植が実現したようです。同時に、単に "AzCopy"と呼ばれていた従来のCLIツールは"AzCopy on Windows"と名称が変更されているようです(以下、"AzCopy on Linux"を単に"AzCopy"と表記します)。
例えばLinuxサーバーからのファイルのコピーであれば、 Azure CLI 2.0でも可能ですが、AzCopyは、実行するマシンのスペックに合わせて自動的に並行コピーを行うなど、大量のファイルを短時間にコピーする能力に優れています。
また、これは体感ですが、比較的低スペックな環境で動作させても、サーバーのリソースをあまり消費せずに高速で動作する印象です。
製品としては、 今年の5月12日にPreviewを公開したアナウンス以外確認できませんので、 GAではないと思われます。
インストール
ドキュメントを参照いただくのが良いと思います。
注意点として、様々なOSへの.NET Coreのインストール方法が記載されているとしてドキュメントからリンクされている .NET Coreのページでは"Current (v2.0.0)"バージョンのインストール方法が先に記載されていますが、これではAzCopyは動作しません。その下の"Long Term Support (v1.1.4)"バージョンをインストールする必要があります。
簡単な使い方
これも ドキュメントを参照いただくのが良いと思いますが、AzCopyでは以下の3つのパターンをサポートしています。
- ファイルシステムからBLOBストレージへのアップロード(ファイル単位、ディレクトリ単位)
- BLOBストレージからファイルシステムへのダウンロード(ファイル単位、ディレクトリ単位)
- BLOBストレージからBLOBストレージへのコピー
最後の、BLOBストレージからBLOBストレージへのコピーは、例えば既存ストレージを別リージョンにバックアップする際に有効ですね。
今回はLinuxサーバーのバックアップについてなので、ファイルシステムとBLOBストレージのファイルのコピーについてご紹介します。
バックアップ先BLOBストレージの作成
バックアップ先BLOBストレージがない場合は、まず作成します。せっかくなのでAzure CLIで作成します。
az loginとサブスクリプションの設定が済んでいるAzure CLIをご用意いただきます。
az storage account create \
--resource-group=<リソースグループ名> \
--name=<ストレージ名> \
--sku=Standard_LRS \ # 適宜変更を
--location=japaneast \ # 適宜変更を
--query "[primaryEndpoints.blob]"
リソースグループ名、ストレージ名、 SKU、Locationは適宜変更をお願いします。
これを実行してしばらくすると、BLOBストレージのエンドポイントURLが表示されます。
次に、作成したストレージのアクセスキーを取得します。
az storage account keys list \
--resource-group=<リソースグループ名> \
--account-name=<ストレージ名> \
--query "[?contains(keyName,'key1')].value"
これで、作成したストレージのアクセスキーが表示されます。
コンテナについて
BLOBストレージは、いわゆるファイルシステムの形式では保存しませんので、独特の概念があります。
その1つが「コンテナ」で、 いわゆるストレージのルート階層のディレクトリと考えるとわかりやすいです。
原理的には最初にコンテナを作成してから、そのコンテナに対しファイルをアップロードする順序となります。 しかしAzCopyは、指定されたコンテナがアップロード先BLOBストレージにない場合は自動で作成してくれます。
単一ファイルのBLOBストレージへのアップロード
今回はバックアップがテーマですので、ファイルシステムの1つのファイルをBLOBストレージにアップロードしてみます。
azcopy \
--source . \
--destination <エンドポイントURL>/test/ \
--dest-key <アクセスキー> \
--include "test.txt"
この例は、カレントディレクトリの text.txt ファイルを、BLOBストレージの test コンテナにアップロードしています。
注意が必要な点が2つあります。
- --sourceは、あくまでディレクトリを指定します。ここでファイル名を直接指定しません。ファイル名は--incldeで指定します。
- --destinationで、エンドポイントURLの後の /test/ が、コンテナ名で、ここでは自動で作成されます。
正しくアップロードされたか、Azure CLIで確認しましょう。
az storage blob list \
--account-name <ストレージ名> \
--account-key <アクセスキー> \
--container-name test \ # コンテナ名
--output table
結果は...
Name Blob Type Blob Tier Length Content Type Last Modified
------ ----------- ----------- -------- ------------------------ -------------------------
test.txt BlockBlob 2484 application/octet-stream 2017-11-15T05:46:52+00:00
無事にアップロードされていました!
ディレクトリ全体のBLOBストレージへのアップロード
次はディレクトリ全体をアップロードしてみましょう。
azcopy \
--source ./contents/ \
--destination <エンドポイントURL>/contents/ \
--dest-key <アクセスキー> \
--recursive
今回はコンテナ名を contents に変えています。オプションの変更点は、--includeが消え、代わりに --recursive になったことです。これで、 --source 以下が再帰的にアップロードされます。
なお、--recursive と--includeを併用することは可能です。例えば --include "a" を追記した場合、サブディレクトリも含め"a"から始まるファイルのみアップロードされます。
結果を見てみましょう。
Finished 9567 of total 9567 file(s).
[2017/11/15 15:04:59] Transfer summary:
-----------------
Total files transferred: 9567
Transfer successfully: 9567
Transfer skipped: 0
Transfer failed: 0
Elapsed time: 00.00:02:26
9567ファイル、総容量76MBのファイルが、2分26秒でアップロードされました。速いですね!
先ほどと同様に、az storage blob list を実行すると、ずらーっと表示されます。
応用的な利用方法
アップロードされたファイルを GUIで扱いたい場合
ここではCLIでファイルをあつかっていますが、アップロードされたファイルをGUIで確認したい場合は、 Azure Storage Explorerが利用できます。
バックアップのコツ
作業用のファイルのバックアップを取る場合は、BLOBストレージには非圧縮でアップロードすると便利です。 例えば、バックアップのあのファイルが欲しい!となった場合に、以下のように取り出せます。
% azcopy \
--source <エンドポイントURL>/contents/ \
--destination . \
--source-key <アクセスキー> \
--include "subdir/test.txt"
--recursive
上記は、BLOBストレージのcontentsコンテナから、subdirフォルダ以下のtest.txtだけダウンロードして取り出す操作になります。
このようにして、BLOBストレージ上のパスを指定して、特定のファイルのみを取り出すことができるためです。
まとめ
AzCopy on Linuxを活用して、安全・快適なバックアップを!
- カテゴリー
- 技術情報