トラブルの記録

<問題>
scpを使ってスパコンにデータを転送する際、

scp: /home/hogehoge/bigfile : File too large

というエラーにより、2GBを越えるファイルを転送できなかった。
<解決方法>
圧縮して、2GB以下に落として転送。Wine*1のTSSでは2GBを超える解凍はできないので、Hop*2で、バッチジョブとして解凍する。なお、「limit datasize unlimit」と打つことで、TSSでも2097251bytesのファイルまでなら扱えるようになるらしい。

<解決に至るまでの経過>
thinkunix.netのtipsを参考に、

ssh user@remotehost -C "cat /path/to/bigfile" 
     | dd of=bigfile

を試してみるも、今度は

dd: 0511-053 write が失敗しました。
: ファイルは ulimit によって設定された値より大きくできません。

というエラーで失敗。「ulimit」で確認してみた。

hop00> ulimit -a
time(seconds)        86400
file(blocks)         4194502
data(kbytes)         1048576
stack(kbytes)        1048576
memory(kbytes)       unlimited
coredump(blocks)     2097151
nofiles(descriptors) 2000

fileは4GBで、問題なさそうなのに、なんでだめなんだろう?さらに別のページで「limit」というコマンドもあることを知り確認すると、

hop00> limit
cputime      24:00:00
filesize     2097151 kbytes
datasize     1048575 kbytes
stacksize    1048575 kbytes
coredumpsize 1048575 kbytes
memoryuse    unlimited
descriptors  2000

filesizeが2GB!? なんで、limitとulimitの値が違うんだろう? どうやら、ここで制限されているらしい。しかし、これは一般ユーザーには変更できないのでは...

hop00> limit filesize 10000000
limit: filesize: Can't set limit
(操作が許可されていません。)

やっぱり...。
2.2GBのファイルをあと120個くらい転送しないといけないのに、どうしたものか...。

    • 追記1:大型計算機センターのシステム管理係に相談に行ったところ、やはりfilesizeの制限による問題とのことでした。そして、制限値の変更を月例会議に諮っていただくことになりました。

    • 追記2:ulimitとlimitの違いは、「blocks」と「kbytes」の違いで、2で割ると同じくらいの大きさ(2GB)になることが判明。

    • 追記3:シス管から連絡があり、バッチジョブにはリミットはかかってないが、tss処理では、上述のリミットがあるとのこと。つまり、コマンドラインで、「cat bigfile1(1.9GB) >> bigfile2(1.9GB)」として4GB近いファイルを作ることはできないが、バッチとしてllsubmitで投入すると2GBを超えるファイルを作成できるということ(確認しました)。

    • 追記4:シス管から圧縮して転送してみては?とのアイデアをいただき試しに圧縮してみました。バイナリファイルなので、そんなに変わらないだろうなぁと思ったら2GBが400MBに!これで無事に転送できたので、解凍を、と思ったら今度は2GB以上のファイルを生成する解凍ができない。仕方ないので、バッチで投入したところうまくいきました。めでたしめでたし。

*1:TSS処理およびアプリケーション実行ノードのホスト名

*2:バッチジョブ専用ノードのホスト名