파일의 "희소성"을 출력하는 방법은 무엇입니까?

파일의 "희소성"을 출력하는 방법은 무엇입니까?

파일의 명목 크기에 실제로 얼마나 많은 데이터가 채워져 있는지 출력하려면 어떻게 해야 합니까? vmtouch현재 메모리에 몇 개의 파일이 있는지 표시하는 것과 같습니다 .

나는 워크플로를 다음과 같이 만들고 싶습니다.

$ fallocate -l 1000000 data 
$ measure_sparseness data
100%
$ fallocate -p -o 250000 -l 500000  data
$ measure_sparseness
50%

해결 방법: du -bshdu -sh를 사용하고 비교하십시오.

답변1

find%S"희소성"이라고도 하는 형식 지정자가 있습니다 .

         %S     File's  sparseness.   This  is  calculated as (BLOCKSIZE*st_blocks / st_size).  The exact value you will get for an ordinary file of a certain
                 length is system-dependent.  However, normally sparse files will have values less than 1.0, and files which use indirect  blocks  may  have  a
                 value which is greater than 1.0.   The value used for BLOCKSIZE is system-dependent, but is usually 512 bytes.   If the file size is zero, the
                 value printed is undefined.  On systems which lack support for st_blocks, a file's sparseness is assumed to be 1.0.
$ fallocate -l 1000000 data
$ find data -printf '%S\n'
1.00352
$ fallocate -p -o 250000 -l 500000  data
$ find data -printf '%S\n'
0.507904

답변2

해당 옵션이 없다면 find70년대 이후 UNIX에서 작동했던 방법은 다음과 같습니다.

ls -ls file

그러면 사용된 실제 블록 수와 기록된 최대 바이트가 인쇄됩니다. 이를 통해 실제로 할당되지 않은 상태로 남아 있는 블록 수를 쉽게 계산할 수 있습니다.

답변3

find는 간단한 출력을 인쇄 하지만 자세한 내용은 오픈 소스 및 github에서 내가 작성한 %S내용을 확인하는 것이 좋습니다.sparsetest여기. 예를 들어 모든 구멍을 인쇄하려면 이를 자유롭게 수정하십시오.

희소 할당 문제를 보여주는 블로그 게시물여기문제 디버깅 에 사용됩니다 sparsetest.

관련 정보