"du"와 "df"의 차이점

"du"와 "df"의 차이점

나는 이상한 차이가 있습니다. "df"를 사용하면 내 루트 디스크가 거의 229G를 사용하고 있음을 알 수 있습니다.

# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/dm-2                   241G  229G   13G  96% /

하지만 "du"는 내가 약 12GB(반올림)만 사용하고 있음을 나타냅니다.

# du -sh /* | grep G
3.2G    /run
2.1G    /usr
6.0G    /var

두 명령 모두 루트로 실행됩니다. 내가 상상할 수 있는 것은 현재 NFS 공유가 마운트된 디렉터리에 "숨겨진" 데이터가 있다는 것입니다. 이대로라면. "숨겨진" 파일을 어떻게 찾을 수 있나요? 아니면 이 숫자가 왜 그렇게 완전히 다른지에 대한 다른 아이디어가 있습니까?

답변1

파일을 여는 응용 프로그램/프로세스가 있을 수 있습니다. 응용 프로그램에 의해 열려 있는 파일을 삭제하면 해당 파일이 여전히 메모리에 열려 있기 때문에 운영 체제는 df에 파일 크기를 계속 표시합니다.

귀하의 요구 사항을 충족할 동료를 위해 제가 작성한 문서는 다음과 같습니다.

열려 있는 대용량 파일 자르기

공간을 확보하기 위해 파일을 삭제했지만 공간이 확보되지 않았습니다. 이제 df -lah와 du -lah는 서로 다른 크기를 표시합니다.

LSOF를 사용하여 삭제되었지만 보관된 파일 가져오기

lsof |grep deleted

그러면 삭제되었지만 애플리케이션에 의해 열려 있는 모든 파일이 표시됩니다.

java       2943  gateway  410w      REG              253,3  50482102     139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java       2943  gateway  411w      REG              253,3  46217973     139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java       2943  gateway  412w      REG              253,3  50483894     139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)

응용프로그램을 다시 시작하여 파일을 잠금 해제하거나 파일을 자를 수 있습니다.

파일을 자르려면 위 출력을 보고 PID 및 fd(파일 설명자 번호)를 가져와야 합니다.

파일 자르기

echo > /proc/PID/fd/fd_number

예: 위에 나열된 세 가지 파일 크기를 0으로 만들려면 다음 명령을 실행합니다.

echo > /proc/2943/fd/410 
echo > /proc/2943/fd/411
echo > /proc/2943/fd/412

bash가 많으면 구조를 위해 잘릴 수 있습니다.

for n in {410..412}; do 'echo  > /proc/2943/fd/$n'; done;

df -lah는 이제 여유 공간을 표시해야 하지만 파일은 lsof |grep에서 삭제된 것으로 표시되지만 크기는 1입니다.

java       2943  gateway  410w      REG              253,3         1     139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java       2943  gateway  411w      REG              253,3         1     139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java       2943  gateway  412w      REG              253,3         1     139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)

파일 설명자는 다음에 재부팅하거나 파일을 연 응용 프로그램을 다시 시작/다시 로드할 때 해제됩니다.

물론 잠긴 파일의 출력과 일치하도록 명령을 조정해야 합니다.

답변2

제 경우에는(비공개 메시지로 같은 내용을 알려주셔서 도움을 주셨네요) 과잉 설치 문제였습니다. 파티션의 디렉토리에 일부 데이터가 있지만 du마운트가 숨겨져 있기 때문에 볼 수 없습니다.

그러니 시도해 보세요모든 마운트 제거나머지 디렉토리에서 데이터를 찾으십시오.

즐거운 시간 보내시고 감사합니다!

관련 정보