アーカイブのゾーン間コピーができない!?
北海道で発生した地震の影響で停電が発生し、現在さくらインターネットの石狩データセンターでは、自家発電装置で給電が行われています。しかし燃料が切れるのは時間の問題です。停止を避けるために石狩ゾーンから東京ゾーンにサーバーを移動しようとしている人も多いと思いますが、混雑しているのか、ゾーン間でのアーカイブのコピーでエラーが発生しています。
(※この記事は復旧していない事を前提に書いてます)
そこでさくらが提供しているアーカイブのゾーン間コピーの機能を使わずに、FTPSを使って転送する方法を考えてみました。
アーカイブのゾーン間コピーの流れ
石狩:アーカイブを作成
↓
どこか:アーカイブを石狩からダウンロード
↓
どこか:アーカイブを東京へアップロード
↓
東京:アーカイブからディスクを作成
↓
東京:サーバーに接続
ネットが遅いときは?
アーカイブはFTPSでダウンロード/アップロードができますが、プロバイダーの回線経由で何百GBものアーカイブをダウンロードするのは非常に困難です。そこで、さくらのクラウド内に、「ファイル置き場」とするサーバーを立てます。私はCentOS 7で行いました。(6だとlftpがうまくいかなかった)
さくらのクラウドはネットワークが標準では100Mbpsですが、スイッチ+ルーターを追加することで100Mbps〜3000Mbpsまで選べます。お値段も結構しますので、ファイルを転送するときだけ1000Mpbsにする、みたいな感じですかね。
最初にスイッチを作成して、ルーターを有効にします。
次にファイル置き場となるサーバーを作成し、NICの接続先をこのスイッチにします。これで高速にダウンロード/アップロードができるようになりました。
アーカイブのダウンロード
ファイルはSFTPで転送しますので、curlやlftpを使います。私はcurlでやりました。
設定ファイル .lftprc
set ftp:ssl-auth TLS
set ftp:ssl-force true
set ftp:ssl-allow yes
set ftp:ssl-protect-list yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-fxp yes
set ssl:verify-certificate no
#!/bin/bash
DLFILE=archive.img
echo "Download from Sakura archive"
echo -n "Host name? " ; read SERVER
echo -n "User name? " ; read USER
echo -n "Password? " ; read PASS
curl -u $USER:$PASS --ftp-ssl --ftp-pasv -k --compressed \
ftp://$SERVER:21/$DLFILE -o $DLFILE
アーカイブのアップロード
curlでやると途中で止まってしまうので、lftpを使いました。
$ lftp
> open ホスト -p 21 -u ユーザー名
Password:
> put archive.img
この方法で試したところ、50〜70MB/sで転送できました。
さすがに速いですね!
ちなみにcurlでアップロードするスクリプトはこんな感じです。(なぜか途中で止まる)
#!/bin/bash
UPFILE=archive.img
echo "Upload to Sakura archive"
echo -n "Host name? " ; read SERVER
echo -n "User name? " ; read USER
echo -n "Password? " ; read PASS
curl -u $USER:$PASS --ftp-ssl --ftp-pasv -k --compressed \
-T $UPFILE ftp://$SERVER:21/