
나는 많은 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에 관해서입니다. 내 이해는 이것이 "희소" 파일, 즉 물리적 공간이 아닌 논리적 공간을 차지하는 정의라는 것입니다. 또한 다시 말하면 dd입니다. "seek" 인수가 제공되지 않으면 파일이 희박해서는 안 되지만 IO 하위 시스템에서 시간과 노력이 필요합니다.
예 - 훨씬 나중에 답변이 제공됩니다. 그러나 이는 제가 AIX에서 fallocate를 연구하고 있기 때문입니다. 그리고 AIX에서 fallocate()(호출!, 실제로는 posix_fallocate())를 사용하는 애플리케이션에서 발견할 수 있는 버그 때문입니다.
도움이 되었기를 바랍니다!
답변2
truncate() 계열(ftruncate() 등)의 호출을 사용하여 파일을 줄이는 것뿐만 아니라 파일을 확장할 수도 있습니다. 현재 크기보다 더 큰 크기로 "잘라내기"만 하면 됩니다. 구멍이 있는 파일을 지원하는 파일 시스템에서는 필요한 널 블록을 파일 끝에 추가하는 것보다 훨씬 빠릅니다.