디스크가 꽉 찼습니다. 더 조사하는 방법?


110

서버 (하드웨어 RAID 1), 32G, ext3 파일 시스템에 SCSI 디스크가 있습니다. df디스크가 100 % 가득 찼음을 알려줍니다. 1G를 삭제하면 올바르게 표시됩니다.

그러나 a du -h -x /를 실행하면 du12G 만 사용된다고 알려줍니다 ( -x일부 Samba 마운트 때문에 사용합니다 ).

그래서 내 질문은 du와 df 명령의 미묘한 차이점이 아니라이 큰 차이점의 원인을 어떻게 알 수 있는지에 관한 것입니다.

오류가 발생한 fsck를 위해 시스템을 재부팅했습니다. 내가 실행해야합니까 badblocks? lsof열린 삭제 된 파일 lost+found이 없으며 비어 있으며 메시지 파일에 명백한 경고 / 오류 / 실패 문이 없습니다.

설정에 대한 자세한 내용은 언제든지 문의하십시오.


3
이것은 linux-du와 df의 차이점 ( serverfault.com/questions/57098/du-vs-df-difference )에 매우 가깝습니다 . 이 솔루션은 OldTroll이 응답 한대로 마운트 지점에있는 파일이었습니다.
Chris Ting 2016 년

답변:


93

마운트 지점 아래에있는 파일을 확인하십시오. 디렉토리 (예 : sambafs)를 이미 파일이나 그 아래에있는 파일 시스템에 마운트하면 해당 파일을 볼 수 없게되지만 여전히 기본 디스크의 공간을 사용하고 있습니다. 단일 사용자 모드에서 단일 사용자 모드를 제외하고 볼 수없는 디렉토리에 파일을 덤프했습니다 (다른 디렉토리 시스템이 마운트되어 있기 때문에).


3
디렉토리를 마운트 해제하지 않고도 이러한 숨겨진 파일을 찾을 수 있습니다. 방법을 설명하는 Marcel G의 답변을 아래에서 살펴보십시오.
mhsekhavat

답변에 CLI 명령을 표시해야합니다.
Jonathan

1
이해가되지 않는다고 생각 되더라도 확인하십시오!
Chris

1
참고 :이 답변이있는 파일에 대해 이야기하고 아래에 있지, (즉, 원래의 파일 시스템에 숨겨진) 마운트 지점 에서 마운트 포인트. (나처럼 바보가되지 마십시오.)
mwfearnley

92

로컬 서버에서 문제를 추적하려고 할 때이 페이지가 우연히 발견되었습니다.

내 경우에서 df -hdu -sh하드 디스크 크기의 약 50 % 일치하지.

디스크에서 삭제 된 메모리에 큰 로그 파일을 유지하는 아파치 (httpd)로 인해 발생했습니다.

이것은 정리해야 할 파티션이있는 lsof | grep "/var" | grep deleted곳 을 실행 하여 추적 /var했습니다.

출력 결과는 다음과 같습니다.
httpd 32617 nobody 106w REG 9,4 1835222944 688166 /var/log/apache/awstats_log (deleted)

그런 다음 아파치 ( service httpd restart) 를 다시 시작하여 상황을 해결하고 삭제 된 파일의 잠금을 해제하여 2GB의 디스크 공간을 정리했습니다.


나를 위해, 프로그램을 중지 한 후에도 잠금이 해제되지 않은 곳 (좀비?). 나는 kill -9 'pid'자물쇠를 풀어야했다. 예 : httpd의 경우이었습니다 kill -9 32617.
Micka

6
마이너 참고 : 당신은 실행해야 할 수 있습니다 lsofsudo또는 모든 파일 기술자가 표시됩니다
ChrisWue

나는 매일 로그 파일에 몇 가지 공연을 추가하는 H2 로이 문제에 부딪쳤다. H2 (느린)를 다시 시작하는 대신을 사용했습니다 sudo truncate -s0 /proc/(h2 PID)/(descriptor number obtained from ls /proc/h2pid/fd).
Desty

제 경우에는 재시작 httpd공간이 해제되지 않은 경우에도 마찬가지 입니다. 내가 /etc/init.d/rsyslog restart그것을 작동 했을 때 : D
Thanh Nguyen Van

2
당신은 greps를 건너 뛰고 할 수있는 lsof -a +L1 /var곳, -a수단 및 모든 조건이 (기본값은 OR), +L1목록을 의미에만 링크 파일 미만 1 (즉, 파일 기술자와 파일을 삭제) 계산하고 /var그 마운트 지점 아래 파일을 제한합니다
kbolino

51

귀하의 "누락 된"공간에 대한 가장 가능한 원인으로 OldTroll의 답변에 동의합니다.

Linux에서는 전체 루트 파티션 (또는 그 문제에 대한 다른 파티션)을 파일 시스템의 다른 위치에 / mnt와 같이 쉽게 다시 마운트 할 수 있습니다.

mount -o bind / /mnt

그럼 당신은 할 수 있습니다

du -h /mnt

당신의 공간을 어떻게 사용하는지보십시오.

추신 : 코멘트가 아닌 새로운 답변을 추가하여 죄송하지만이 게시물을 읽을 수 있도록 몇 가지 형식이 필요했습니다.


3
이 팁에 정말 감사합니다. 다운 타임없이 큰 "숨겨진"파일을 찾아서 삭제할 수있었습니다!
choover

감사합니다 -이 고정 표시기가에서 차이점 내 하드 드라이브를 채우는 것을 보여 주었다/var/lib/docker/aufs/diff/
naught101

25

무슨 df -i말을 참조하십시오 . 사용 가능한 공간을 모두 소비하지 않고 사용 가능한 모든 inode를 사용하는 파일 시스템에 많은 수의 작은 파일이있는 경우 발생할 수있는 inode가 없을 수 있습니다.


1
파일의 크기와 파일 시스템에서 차지하는 공간의 양은 별개의 두 가지입니다. 파일이 작을수록 파일 간의 불일치가 커집니다. 파일 크기를 합한 스크립트를 작성 du -s하여 동일한 하위 트리 의 스크립트와 비교하면 여기에 해당하는 경우 좋은 아이디어를 얻게됩니다.
Marcin

24

필자의 경우 이것은 큰 삭제 된 파일과 관련이 있습니다. 이 페이지를 발견하기 전에 해결하기가 상당히 어려웠으므로 올바른 경로로 설정되었습니다.

마지막으로을 사용하여 문제를 해결했습니다 lsof | grep deleted.이 프로그램은 두 개의 매우 큰 로그 파일 (사용 가능한 8GB 루트 파티션의 총 5GB)을 보유하고있는 프로그램을 보여줍니다.


1
이 답변을 통해 루트 파티션에 로그 파일을 저장하는 이유, 특히 작은 파티션에 로그 파일을 저장하는 이유가 궁금합니다.
CVn

나는 좀비 프로세스가 여전히 큰 삭제 된 파일을 들고 있었다 생각, 내가 삭제 된 파일을 사용하고 모든 응용 프로그램을 다시 시작했다, 유사한 문제가 있었다
user1965449

파일 비트로 알려진 로그 처리 리눅스 응용 프로그램은 파일을 열어 두었습니다.
Pykler

@Pykler 우리에게는 파일 비트였습니다. 팁 고마워!
Martijn Heemels

7

프로그램에 의해 열린 파일은 파일을 삭제할 때 실제로 사라지지 않으며 (디스크 공간 소비 중지) 프로그램을 닫을 때 사라집니다. 프로그램에는 사용자 (및 du)가 볼 수없는 거대한 임시 파일이있을 수 있습니다. 좀비 프로그램 인 경우 해당 파일을 지우려면 재부팅해야합니다.


OP는 시스템을 재부팅했으며 문제가 지속되었다고 말했다.
OldTroll

파일의 잠금을 해제하지 않는 좀비가 있었고 잠금 kill -9 'pid'을 해제하고 디스크 공간을 다시 확보했습니다.
Micka

5

디스크에 쓰는 동안 죽은 / 중단 된 프로세스가 잠겨 있는지 확인하려면 다음을 시도하십시오. lsof | grep "/ mnt"

그런 다음 붙어있는 PID를 제거하십시오 (특히 "(삭제됨)"으로 끝나는 줄을 찾으십시오)


감사! SFTP 서버 프로세스가 삭제 된 파일을 보유하고 있음을 알 수있었습니다
lyomi

4

이것은 큰 파일을 찾기 위해 지금까지 찾은 가장 쉬운 방법입니다!

루트 마운트가 꽉 찬 경우의 예는 다음과 같습니다 (예 : / root). 예 :

cd / (그래서 당신은 루트에 있습니다)

LS | xargs du -hs

출력 예 :

 9.4M 빈
 63M 부팅
 4.0K cgroup
 680K 개발
 31M 등
 6.3G 홈
 313M 라이브러리
 32M lib64
 16K 손실 + 발견
 61G 미디어
 4.0K mnt
 113M 선택
 du :`proc / 6102 / task / 6102 / fd / 4 '에 접근 할 수 없습니다 : 그러한 파일이나 디렉토리가 없습니다
 프로세스 0
 19M 루트
 840K 달리기
 19M 스빈
 4.0K selinux
 4.0K srv
 25G 스토어
 26M tmp

그런 다음 상점 이 크다는 것을 알 수 있습니다 . cd / store

다시 실행

LS | xargs du -hs

출력 예 : 
 109M 백업
 358M fnb
 4.0G 이소
 8.0K 킬로그램
 16K 손실 + 발견
 47M 루트
 11M 스크립트
 79M tmp
 21G VMS

이 경우 vms 디렉토리는 스페이스 호그입니다.


1
왜 같은 간단한 도구를 사용하지 baobab않습니까? ( marzocca.net/linux/baobab/baobab-getting-started.html 참조 )
Yvan

2
ls+ xargs과잉처럼 보인다, du -sh /*그 자체로 잘 작동
ChrisWue

1
ncdu에 대해 모른다면 ... 나중에 고마워 할 것입니다 : dev.yorhel.nl/ncdu
Troy Folger

3

나를 위해, sudo가 아닌 사용자가 읽을 권한이없는 sudo du많은 양의 docker 파일이 있었기 때문에 실행해야했습니다 /var/lib/docker.


이것은 내 문제였다. 도커에서 스토리지 시스템을 전환하는 것을 잊어 버렸고 이전 볼륨이 여전히 걸려 있습니다.
Richard Nienaber

1

고려해야 할 또 하나의 가능성-도커를 사용하는 경우 큰 불일치가 거의 보장되며 볼륨 마운트를 사용하는 컨테이너 내에서 df / du를 실행합니다. 도커 호스트의 볼륨에 마운트 된 디렉토리의 경우 df는 HOST의 df 합계를보고합니다. 당신이 그것에 대해 생각한다면 이것은 분명하지만, "디스크를 채우는 런 어웨이 컨테이너!"에 대한 보고서를받을 때, 컨테이너의 파일 공간 소비를 다음과 같은 것으로 확인하십시오 du -hs <dir>.


1

그래서 Centos 7 에서도이 문제가 있었고 각각 약 7G를 보였지만 bleachbit 및 / usr 및 / var 청소와 같은 많은 것들을 시도한 후에 해결책을 찾았습니다. 루트 파티션에 사용 된 50G의 50G는 여전히 표시되지만 파일 사용은 9G 만 표시했습니다. 라이브 우분투 CD를 실행하고 문제가있는 50G 파티션을 마운트 해제하고 터미널을 열고 파티션에서 xfs_check 및 xfs_repair를 실행했습니다. 그런 다음 파티션을 다시 마운트하고 lost + found 디렉토리가 40G로 확장되었습니다. lost + found를 크기별로 정렬하고 스팀에 대한 38G 텍스트 로그 파일을 찾았습니다. 큰 파일을 제거했으며 이제 공간이 있고 디스크 사용량이 루트 파티션 크기와 일치합니다. 증기 로그가 다시 커지지 않도록하는 방법을 여전히 알고 싶습니다.


직장에서 이런 일이 있었습니까? serverfault.com/help/on-topic
병아리

내 집 컴퓨터에는 없습니다.
저스틴 채드윅

3
xfs_fsr우리를 위해이 문제 해결
Druska

0

마운트 된 디스크가 Windows 시스템의 공유 폴더 인 경우, df는 전체 Windows 디스크의 크기와 디스크 사용을 표시하지만 du는 액세스 한 디스크의 일부만 표시합니다. (그리고 장착). 따라서이 경우 Windows 시스템에서 문제점을 수정해야합니다.


0

프로덕션에서도 비슷한 일이 발생했으며 디스크 사용량은 98 %로 증가했습니다. 다음 조사를 수행했습니다.

a) df -iinode 사용량을 확인하기 위해 inode 사용량이 6 %이므로 파일 크기가 훨씬 작습니다.

b) root숨겨진 파일 마운트 및 확인 추가 파일을 제출할 수 없습니다 . du결과는 마운트 전과 동일합니다.

c) 마지막으로, 확인 된 nginx로그. 디스크에 쓰도록 구성되었지만 개발자는 로그 파일을 직접 삭제하여 nginx모든 로그를 메모리에 보관합니다. 파일 /var/log/nginx/access.log을 사용하여 디스크에서 파일 을 삭제 했으므로 파일을 rm사용하여 볼 수 du없었지만 파일이 액세스되어 파일 nginx이 계속 열려 있습니다.


0

이 주제에서 언급 된 것과 동일한 문제가 있지만 하나의 VPS에서 발생했습니다. 그래서 나는이 주제에서 설명 된 모든 것을 테스트했지만 성공하지 못했습니다. 이 솔루션은 할당량 재 계산을 수행의 공간 차이를 보정 우리의 VPS 제공자와 지원을위한 접촉했다 df -hdu-sh /.


0

나는 오늘 FreeBSD 상자 에서이 문제에 부딪쳤다. 문제는 그것이 인공물이라는 것입니다 vi( 이 문제를 일으킬 vim지 확실하지 않습니다 vim). 파일이 공간을 소비했지만 디스크에 완전히 기록되지 않았습니다.

다음을 통해 확인할 수 있습니다.

$ fstat -f /path/to/mount/point |sort -nk8 |tail

그러면 열려있는 모든 파일 -n을보고 8 번째 열 (키, -k8) 별로 (숫자를 통해 ) 정렬 하여 마지막 10 개 항목을 표시합니다.

필자의 경우 최종 (최대) 항목은 다음과 같습니다.

bob      vi         12345    4 /var      97267 -rwx------  1569454080 rw

이는 프로세스 (PID) 12345가 디스크를 du인식 하지 못하더라도 1.46G (8 번째 열을 1024³로 나눈 값)의 디스크를 소비 함을 의미 했습니다. vi매우 큰 파일을 보는 것이 끔찍합니다. 심지어 100MB도 큽니다. 1.5G (또는 실제로는 파일이 큰 것)는 말도 안됩니다.

해결책은 sudo kill -HUP 12345(그것이 효과가 없다면, 나는 그것을 sudo kill 12345실패했을 경우, 두려운 kill -9사람들이 작용할 것입니다)입니다.

큰 파일에 텍스트 편집기를 사용하지 마십시오. 빠른 스키밍을위한 샘플 해결 방법 :

합리적인 라인 길이 가정 :

  • { head -n1000 big.log; tail -n1000 big.log } |vim -R -
  • wc -l big.log |awk -v n=2000 'NR==FNR{L=$1;next}FNR%int(L/n)==1' - big.log |vim -R -

불합리하게 큰 라인을 가정하면 :

  • { head -c8000 big.log; tail -c8000 big.log } |vim -R -

설치 vim -R되는 대신 거의 항상 더 좋기 view때문에 대신 사용 하는 vim것이 좋습니다. 그것들을 대신 view또는 vi -R대신 에 파이프로 연결하십시오 .

당신이 실제로 그것을 편집 할 수있는 그런 큰 파일을 열 경우, 고려 sed하거나 awk또는 다른 프로그래밍 방법.


0

서버에 ossec 에이전트가 설치되어 있는지 확인하십시오. 또는 일부 프로세스에서 삭제 된 로그 파일을 사용하고 있습니다. 내 옛날에는 오스 섹 요원이었습니다.


1
OP는 머신이 재부팅되었다고 언급 했으므로 삭제 된 파일이 남아 있지 않아야합니다.
RalfFriedl

-3

/ lost + found를 확인하십시오. 시스템 (centos 7)이 있고 / lost + found의 일부 파일이 모든 공간을 차지했습니다.


질문에 설명 된대로 보고 된 디스크 사용량의 차이를 어떻게 설명 합니까?
roaima
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.