
我正在尋找一種無需執行大量 IO 即可佔用 AIX 檔案系統中空間的方法。
我已經嘗試過了dd
並且lmktemp
。 dd
建立稀疏文件,但不鎖定空間。lmktemp
工作做得很好,但是有一些 IO 並且有點耗時。我相信fallocate
速度很快而且沒有IO。
答案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 提供「稀疏」文件,而不是鎖定空間。我的理解是,這是「稀疏」檔案的定義——佔用的邏輯空間,而不是物理空間。此外,re: dd,如果沒有給出“seek”參數,那麼文件不應該是稀疏的 - 但會花費 IO 子系統的時間和精力。
是的- 很久以後才有答案- 但那是因為我正在AIX 上研究Fallocate - 以及我在AIX 上使用Fallocate() (調用!,實際上是posix_fallocate())的應用程序中發現的一個可能的錯誤。
希望這可以幫助!
答案2
您可以使用 truncate() 系列(ftruncate() 等)的呼叫不僅可以減少文件,還可以擴充檔案。只需將它們“截斷”為比當前尺寸更大的尺寸即可。在支援有漏洞的檔案的檔案系統上,它會很快,比將所需的空區塊附加到檔案末端要快得多。