事象
AIX環境にて巨大ファイルを作成しようとしたところ、
ファイルは ulimit によって設定された値より大きくできません。
上記メッセージでエラーとなる。
原因/解決策
limitsファイルに記載されているfsizeの値に抵触。
よってchuser fsize=-1 ユーザ名として値を変更し、再ログインを行い反映させる。
補足
以下ファイル(/etc/security/limits)に各ユーザに対して制限値が記述されており、記述されていないユーザはdeefaultとして扱われています。
ためしに中身を見てみまると以下のようなフォーマットで記載されており
default: fsize = 2097151 core = 2097151 cpu = -1 data = 262144 rss = 65536 stack = 65536 nofiles = 2000
fsizeとして2097151ブロックと記載されていることが確認できました。要は1ブロックは512byteなので約1GBを超えるファイルは作成できないことになります。
ちなみにulimitコマンドを確認すれば、現在のユーザの値を確認できます。
$ ulimit -a time(seconds) unlimited file(blocks) 2097151 data(kbytes) 131072 stack(kbytes) 32768 memory(kbytes) 32768 coredump(blocks) 2097151 nofiles(descriptors) 2000 threads(per process) unlimited processes(per user) unlimited
今回はユーザ名testuserの上限を以下のように無制限とする設定を入れると
$ sudo chuser fsize=-1 testuser
コマンド実行後、/etc/security/limitsを確認すると、以下の記載が追記されています。
testuser fsize = -1
一方で、ulimit - a では未変更なので
$ ulimit -a time(seconds) unlimited file(blocks) 2097151 data(kbytes) 131072 stack(kbytes) 32768 memory(kbytes) 32768 coredump(blocks) 2097151 nofiles(descriptors) 2000 threads(per process) unlimited processes(per user) unlimited
再度ログインし直して設定を読み込ませます。
ログイン後、以下のように変更されていることを確認できました。
$ ulimit -a time(seconds) unlimited file(blocks) unlimited data(kbytes) 131072 stack(kbytes) 32768 memory(kbytes) 32768 coredump(blocks) 2097151 nofiles(descriptors) 2000 threads(per process) unlimited processes(per user) unlimited
この状態になれば、冒頭の制限に引っかかることなく巨大ファイルを作成できます。