
あまり IO を実行せずに AIX ファイル システムのスペースを占有する方法を探しています。
試してみましたdd
がlmktemp
、 dd
スパース ファイルを作成しますが、スペースはロックされません。lmktemp
うまく機能しますが、IO が発生し、少し時間がかかります。IO がなく、高速であると信じていますfallocate
。
答え1
質問に対する正確な答えは、「いいえ、AIX では fallocate コマンドは提供されません。AIX ではライブラリ呼び出し posix_fallocate() が提供されます。」です。
詳細については:
root@x066:[/data/prj/python/python3-3.6.8]find /usr/include -name \*.h | xargs egrep "(fallocate|truncate)64\("
/usr/include/unistd.h: extern int ftruncate64(int, off64_t);
/usr/include/unistd.h: extern int truncate64(const char *, off64_t);
root@x066:[/data/prj/python/python3-3.6.8]find /usr/include -name \*.h | xargs egrep "(fallocate|truncate)\("
/usr/include/fcntl.h:extern int posix_fallocate(int,off_t,off_t);
/usr/include/sys/fp_io.h:fp_ftruncate( struct file *fp,
/usr/include/sys/fp_io.h:extern int fp_ftruncate();
/usr/include/unistd.h: extern int ftruncate();
/usr/include/unistd.h: extern int truncate();
/usr/include/unistd.h: extern int ftruncate(int, off_t);
/usr/include/unistd.h: extern int truncate(const char *, off_t);
dd が「スパース」ファイルを提供し、スペースをロックしないことについて。私の理解では、これが「スパース」ファイルの定義です。つまり、占有される論理スペースであり、物理スペースではありません。さらに、dd に関して言えば、「seek」引数が指定されていない場合、ファイルはスパースではありませんが、IO サブシステムによって時間と労力がかかります。
はい、回答はかなり後になりますが、それは私が AIX 上の fallocate を調査しているからです。また、AIX 上で fallocate() (呼び出し、実際は posix_fallocate()) を使用するアプリケーションでバグの可能性を発見しました。
お役に立てれば!
答え2
truncate() ファミリーの呼び出し (ftruncate() など) は、ファイルの縮小だけでなく、拡張にも使用できます。単に現在のサイズよりも大きいサイズに「切り詰める」だけです。穴のあるファイルをサポートするファイルシステムでは、必要な null ブロックをファイルの末尾に追加するよりも高速です。