オブジェクトストレージに巨大なファイルをアップロードするとき、1ファイルあたりの容量制限が問題になることがあります。ConoHaなら5GBです。これを乗り越えるならSLO(Static Large Object)などの方法がありますが、日次世代バックアップなどでは少し面倒です。これを安直に乗り越える方法があります。
splitコマンドでファイル分割
linuxの昔からのコマンドに「split」があります。単純にファイル分割するだけのコマンドです。こんな感じになります。
$ ls -lh
合計 107M
-rwxrwx--- 1 noldor noldor 107M 7月 15 23:14 dummy.bin
$ split -b 20m dummy.bin split_dummy_
$ ls -lh
合計 213M
-rwxrwx--- 1 noldor noldor 107M 7月 15 23:14 dummy.bin
-rw-rw-r-- 1 noldor noldor 20M 7月 15 23:18 split_dummy_aa
-rw-rw-r-- 1 noldor noldor 20M 7月 15 23:18 split_dummy_ab
-rw-rw-r-- 1 noldor noldor 20M 7月 15 23:18 split_dummy_ac
-rw-rw-r-- 1 noldor noldor 20M 7月 15 23:18 split_dummy_ad
-rw-rw-r-- 1 noldor noldor 20M 7月 15 23:18 split_dummy_ae
-rw-rw-r-- 1 noldor noldor 6.2M 7月 15 23:18 split_dummy_af
引数-b
は分割後のファイル容量です。5GBギリギリまで分割するなら5000mなどになります。
ファイルの結合はcatコマンド
分割したファイルの結合はcatコマンドで行います。catは猫ではなくconCATenate(コンカチネーション)の略です。
$ cat split_dummy_* >cat_dummy.bin
$ md5sum dummy.bin cat_dummy.bin
c552bc4aae577683ef52318845f2f6bd dummy.bin
c552bc4aae577683ef52318845f2f6bd cat_dummy.bin
これで「ファイルを分割してアップロード」「ダウンロード後にファイル結合」ができます。
tarファイルを最初から分割したい
バックアップ用途なら「tarファイルに固めてから分割してアップロード」ということになりますが、tarファイルがGB単位になるなら中間ファイルを作るディスク容量がもったいなくなります。
最初からtarを分割して作れれば中間ファイルの容量が不要になります。
もちろん、方法はあります。標準入出力とパイプです。
$ tar cz dummy.bin | split -b 10m - dummy_tgz_
$ ls -lh
合計 210M
-rwxrwx--- 1 noldor noldor 107M 7月 15 23:39 dummy.bin
-rw-rw-r-- 1 noldor noldor 10M 7月 15 23:43 dummy_tgz_aa
-rw-rw-r-- 1 noldor noldor 10M 7月 15 23:43 dummy_tgz_ab
-rw-rw-r-- 1 noldor noldor 10M 7月 15 23:43 dummy_tgz_ac
-rw-rw-r-- 1 noldor noldor 10M 7月 15 23:43 dummy_tgz_ad
-rw-rw-r-- 1 noldor noldor 10M 7月 15 23:43 dummy_tgz_ae
-rw-rw-r-- 1 noldor noldor 10M 7月 15 23:43 dummy_tgz_af
-rw-rw-r-- 1 noldor noldor 10M 7月 15 23:43 dummy_tgz_ag
-rw-rw-r-- 1 noldor noldor 10M 7月 15 23:43 dummy_tgz_ah
-rw-rw-r-- 1 noldor noldor 10M 7月 15 23:43 dummy_tgz_ai
-rw-rw-r-- 1 noldor noldor 10M 7月 15 23:43 dummy_tgz_aj
-rw-rw-r-- 1 noldor noldor 3.5M 7月 15 23:43 dummy_tgz_ak
splitコマンドの入力ファイル名を指定するところにハイフンを入れることで、入力ファイルが標準入力になります。
tarはfオプションをつけなければ出力が標準出力になります。
最近のコメント