事象
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
-1は無制限を指します。
コマンド実行後、/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 で変更が確認できない状態だと制限がまだ効いています。
よって、再度ログインし直して設定を読み込ませます。
ログイン後、以下のように変更されていることを確認できました。
$ 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
この状態になれば、冒頭の制限に引っかかることなく巨大ファイルを作成できます。
以上、AIX環境での備忘録でした。