du AND find -ls

du AND find -ls

NFS를 통해 원격 파일 시스템을 마운트한 Solaris 10 서버가 있습니다. 원격 시스템이 NetApp이라고 생각하지만 확실하지 않습니다.

실행하면 df -h <mountpoint>크기가 12T이고 용량이 87%인 10T를 사용했습니다.

마운트 지점으로 변경하고 실행하면 ls -A |xargs du -s약 8MB가 생성됩니다. 나는 du가 재귀적으로 내려와 모든 파일 크기를 합산할 것으로 예상했지만 여기서는 그렇게 하지 않는 것 같습니다.

울타리로서 나는 달렸다

find <mountpoint> -ls | awk '{total=total+$7}END{print total}'

대답은 13006791645입니다. 1024^3(1073741824)으로 나누면 약 12.1테라바이트가 됩니다.

그래서 그것은 그렇게 보일 find -ls것이고 df어느 정도 동의하는 것 같습니다. 왜 그렇게 심각하게 실패했을까요?

추신: 이 명령은 ls -A숨겨진 스냅샷 디렉터리도 가져오지만 find는 아무것도 찾지 못합니다("주기 감지됨" 제외).

답변1

du -s512바이트 블록으로 보고합니다. 은 (는) 사람이 읽을 수 있는 데이터를 보고하지 않으므로 와 (과) 비교할 df -h수 없습니다 .du

두 값을 비교하려면 du -sh <mountpoint>또는 를 사용하여 512바이트 단위로 보고 /usr/xpg4/bin/df -P하도록 하세요 .df

에 따르면 man du:

여러 링크가 포함된 파일은 하나의 항목에 대해서만 계산되고 기록됩니다. 보고서에서 선택한 디렉토리 항목이 지정되지 않았습니다. 기본적으로 파일 크기는 512바이트 단위로 기록되며 다음 512바이트 단위로 반올림됩니다.

/usr/xpg4/bin/df -P다음을 통해 보고된 512바이트를 얻으 십시오 df.

bash-3.2$ /usr/xpg4/bin/df -P /var
Filesystem            512-blocks        Used   Available Capacity  Mounted on
rpool/ROOT/s10/var
                      1147797504    66061270   954397119     7%    /var

그리고 다음과 비교해보세요 du -s:

bash-3.2$ du -s /var
65976060        /var

또는 비교:

bash-3.2$ df -h /var              
Filesystem             size   used  avail capacity  Mounted on
rpool/ROOT/s10x_u11wos_24a/var
                       547G    32G   455G     7%    /var

와 함께:

bash-3.2$ du -hs /var   
  31G   /var

관련 정보