2012年9月20日木曜日

Copy2Glacier仕様 (SlowGlacier)

Copy2Glacierとは、Amazon Glacierに「ゆっくりと」ファイルをアップロードするプログラムです。

入手につきましては、準備中です。

開発の動機としまして:
  • ノートパソコンのディスクイメージを複数持っていて、保管したい。安全に! 長期で!
  • 30GB/日制限が有り、全速力でアップロードすると制限に触れて問題が発生します。
さて、これよりCopy2Glacierの使い方・どのように動作するのか・作りこみをざっくりと紹介していきます。

使い方

C:\GLACIER>Copy2Glacier.exe
Copy2Glacier /ia1 <access key>
Copy2Glacier /ia2 <secret key>
Copy2Glacier /partsize <part size. default: 4194304>
Copy2Glacier /region <region system name. default: us-east-1>
Copy2Glacier /prep <up info file> <file> <vault name>
Copy2Glacier /up <up info file> <max parts count to upload>

prepの使い方


元のファイルを読み取って、アップ情報ファイルを作成します。

C:\GLACIER>Copy2Glacier.exe /prep PC2 2010-04-09-13-img-pc2-recovery.7z 2010-04-09-13-img-pc2-recovery.7z
ハッシュ計算するので、少し時間が掛かります。

作成したアップ情報ファイルは、大体次のようなります。ANSIエンコード(CR LF)で保存します。日本語WindowsであればCP932。*n?xであれば、EUC/UTF8等、環境による。最初はUnicodeと書いていたのですが、途中で書き直してややこしい事に。(^^;

#!Copy2Glacier
C:\GLACIER\2010-04-09-13-img-pc2-recovery.7z
:archivesize 9033470095
:partsize 4194304
:vaultname 2010-04-09-13-img-pc2-recovery.7z
+ 0 4194304 8e08b908dbe67e8c20a8859407d656df7b73d3989217c8943c0c654c618cfabe
+ 4194304 4194304 d4f270466bc4c79dd4393d12aa06aea4a087d2ea9aad2ca099c3ac85c67bd9d9
+ 8388608 4194304 0c36970933853ce5844cf94c2dd7d5cbc2c7c40c6180f6ac7637cb0aef915874
...
+ 9026142208 4194304 52dc52bf516d11fd649e6d334eb1cd9cfc884cedf207ead58e6b77f9fd3d0887
+ 9030336512 3133583 d2aedbaf9a03f34227384aa18c4a072b2d975a19ac3856da938e411aaaf88a5a
$ 8a0e3deb40a6caa8da0755c5c945ce9e4e3af57c27fd65e236c11c7f4f425176
1行目は、ファイル形式用のマジック
2行目は、元のファイルのフルパス。
3行目(:archivesize)は、ファイルのバイト数(Int64)
4行目(:partsize)は、断片の大きさ・バイト数
5行目(:vaultname)は、保管庫の名前
コロンで始まる行は、KeyとValueをペアにした設定値です。
プラスで始まる行は、UploadMultipartPartRequestに使用する情報です。(断片の開始オフセット バイト数 ハッシュ値)で構成されます。
ダラーで始まる行は、ツリーハッシュを示します。

いずれもAmazon Glacierにアップロードする際に必要となる情報です。

up


次に、アップロードのコマンドです。4MBの断片を10個上げる指示をしています。これをジョブ化しておけば、ゆっくりアップロードを実現できます:

C:\GLACIER>Copy2Glacier.exe /up PC2 10
アップロードが進みますと、アップ情報ファイルに追記していきます。

:location /XXXXXXXXXXXX/vaults/2010-04-09-13-img-pc2-recovery.7z
:uplocation /XXXXXXXXXXXX/vaults/2010-04-09-13-img-pc2-recovery.7z/multipart-uploads/XXXX-XXXXXXXXXXXXXXXGFF8yd18rTKveS8BbF5IH8MbBKm8Ff-XXXXXXXXXX_XXXXXXXXXXXXXXXXXXXXXX3l0J7T2s
:uploadid XXXX-XXXXXXXXXXXXXXXXXX8yd18rTKveS8BbF5IH8MbBKm8Ff-XXXXXXXXXt_eXXXXXXXXXXXXXXXXBA3XXXXXX7T2s
- 0 4194304 8e08b908dbe67e8c20a8859407d656df7b73d3989217c8943c0c654c618cfabe
- 4194304 4194304 d4f270466bc4c79dd4393d12aa06aea4a087d2ea9aad2ca099c3ac85c67bd9d9
- 8388608 4194304 0c36970933853ce5844cf94c2dd7d5cbc2c7c40c6180f6ac7637cb0aef915874
- 12582912 4194304 87a129960848bc6e279721d191484d13127466e7a05faab3d347ff80198b83ee
- 16777216 4194304 34bf57c6b63e49ec30aec18b02d03326250fbaf5b5abf74a460816c9ef4362ca
身の安全が為、一部を伏字にしています。

:locationは、CreateVaultRequestの結果、返ってきますLocationの内容を格納します。
:uplocationは、InitiateMultipartUploadの結果、返ってきますLocationを格納、
:uploadidは、同UploadIdを格納します。

3つのうち、必要なのはuploadidだけで、他は無くてもアップロードを完遂できます。

ハイフンで始まる行は、UploadMultipartPartが済んでいますよ、という情報です。プラスの時と同じく(断片の開始オフセット バイト数 ハッシュ値)で構成されます。

こうしておけば、二度目・三度目の実行で、どこから続きをやれば良いか、容易にわかります。

また、多重実行できないように、ファイルを排他オープンにします。「ゆっくり」アップロードする都合上、2個以上のプロセスで実行する必要がないので。

さて、アップロードが最後まで完了しますと、archiveidを発行します。

:archiveid XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXQNqcmFB3ta-XXXXXXXXXXXXXXXK9Td9_XXXXXXXXIGsbGggMs6Qtsr_XXXXXXXXXXZEU-XXXXXXXXXXXXXXXXXXXXXXXXXXXpU7-XXXX

こうしておけば、アップロードが完了した後に、もう一度上げなおす、という問題を防ぐことができます。

このarchiveidは大変重要で、後でダウンロードしたり、削除する時に必要です。

紛失しても取得はできるのですが、何時間も掛かってしまう、という情報がネットに散見されます。

こういう感じで、ディスクイメージを保管しようと頑張っています。

後日談有りましたら、情報発信して行こうと思います。