디스크 공간이 어떻게 되나요?


13

Linux Mint 14 Nadia를 실행하고 있습니다. Linux 파티션에는 10G가 있습니다. 시스템이 시작되면 du80 % 사용량을보고합니다. 그런 다음 사용량이 100 %에 도달하고 시스템을 사용할 수 없게 될 때까지 사용량이 천천히 증가합니다. (일 또는 주 단위로 발생할 수 있음). 재부팅 후 사용량이 80 %로 재설정됩니다.

가장 이상한 것은 du변화가 없다는 것입니다.

다음은 해당 명령의 출력입니다 (Windows 및 외부 드라이브 파티션 제외).

# --- Just after reboot ---

$ df -h     
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  7.3G  2.0G  80% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M  288K  437M   1% /run/shm
none            100M   12K  100M   1% /run/user

$ sudo du -x   -d1 -h /
186M    /opt
512M    /var
11M /sbin
556K    /root
1.3G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
60K /tmp
9.1M    /bin
4.0K    /srv
7.3G    /            # <-- note this


# --- After some time ---

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  9.1G  199M  98% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M   27M  411M   7% /run/shm
none            100M   28K  100M   1% /run/user

$  sudo du -x   -d1 -h /
186M    /opt
511M    /var
11M /sbin
556K    /root
1.4G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
520K    /tmp
9.1M    /bin
4.0K    /srv
7.3G    /              # <-- note this

(참고 : 최대 절전 모드를 사용합니다. 최대 절전 모드 이후에도 사용량은 동일하게 유지되며 재부팅 후에는 80 %로 재설정됩니다.)

공간을 먹는 음식을 어떻게 추적합니까?

이 질문을 읽었습니다 . 나는 여전히 어둠 속에 있습니다. 이 동작을 담당하는 프로그램을 어떻게 알 수 있습니까?

편집 후 : 찾았습니다. 이 공간은 커널 로그에 의해 청구되며 이는로 표시됩니다 dmesg. 내 컴퓨터가 초당 5의 속도로 오류를 생성하기 때문에 채워집니다. ( 이 버그 와 관련 있습니다.) 보이지 않는 디스크 공간을 느리게 채우는 비슷한 문제가있는 독자에게 원인을 검색하는 것을 du잊지 마십시오 dmesg.


1
큰 파일을 찾기 위해 ncdu평범한 것을 선호합니다 du. 모든 작업을 수행하기 전에 전체 디렉토리 트리를 스캔합니다. 당신은 특정 경로를 전달하고 싶을 수도 있습니다. (예 : ncdu /var그냥 ncdu ~)
Blacklight Shining

이 사이트에 이미 몇 가지 괜찮은 답변 이 있습니다.
Sparhawk

답변:


15

반복 실행

sudo du -x   -d1 -h /

(디렉토리 트리 아래) 공간이 소비되는 위치를 알려줍니다. 어떤 응용 프로그램이 원인인지에 대한 추가 조사없이 설명 할 수 있습니다.

보이지 않는 파일

경우 du다음이 파일을 표시하지 않습니다 가능성 중 하나는 파일을 삭제됩니다. 파일을 사용하는 동안 파일 (또는 그 이름 : 디렉토리의 항목)을 삭제할 수 있습니다. 이 파일을 가리키는 유효한 파일 디스크립터가 있으면 볼륨의 공간을 덮습니다 (빈 파일이 아닌 경우 ...).

cat >file &
ls -l file
rm file
ls -l file
# PID of cat is 19834
ls -l /proc/19834/fd
lrwx------ 1 hl hauke 64 11. Feb 19:16 0 -> /dev/pts/0
l-wx------ 1 hl hauke 64 11. Feb 19:16 1 -> /crypto/home/hl/tmp/file (deleted)
lrwx------ 1 hl hauke 64 11. Feb 19:15 2 -> /dev/pts/0

이 파일들은 다음을 통해 찾을 수 있습니다 find.

find /proc/ -mindepth 3 -maxdepth 3 \
-regex '/proc/[1-9][0-9]*/fd/[1-9][0-9]*' -type l -lname '*(deleted)' \
-printf '%p\n     %l\n' 2>/dev/null

하나의 거대한 파일이거나 문제를 일으키는 작은 파일 일 수 있습니다. 내 시스템에는 현재 약 30 개의 파일이 있습니다 (5 개의 프로세스 만 포함). ls -l이 파일의 크기를 보여 주지만이 값을 얻을 수없는 것 같습니다 find.

프로세스를 종료 한 후에는 파일 시스템 ( df) 에서 공간을 다시 사용할 수있게 됩니다.


이것은 내 질문을 다루지 않습니다. du사용 된 공간의 변화는보고하지 않습니다 : 시작시 7.3G 및 시간 경과 후 7.3G. df시작시 7.3G 무료, 시간이 지남에 따라 최대 10G를보고합니다. 에 문제가 없습니다 du.
Arry

@Arry 실제로, 나는 너무 빨리 읽었다.
Hauke ​​Laging

8

같은 것을 사용하십시오

lsof -s | grep deleted | sort -k 8

삭제 된 파일을 열어 둔 프로세스를 확인하십시오. 중요한 필드는 두 번째 (PID)와 여덟 번째 (마지막에서 세 번째, 파일 크기)입니다.

(중복 된 줄에주의를 기울이고 두 번 세지 마십시오. PID와 파일 경로 (마지막 필드) 또는 inode 번호 (두 번째에서 마지막 필드)를 확인하십시오.)

그 후, 범인 일 가능성이있는 프로세스를 찾으면이를 해결하는 방법을 볼 수 있습니다.


좋은 제안이지만 내 컴퓨터 에서이 명령은 크기가 2k 인 열린 삭제 된 파일 2 개만보고합니다.
Arry

이것은 큰 제안이며 실제로 부모의 질문과 비슷한 문제를 해결하는 데 도움이되었습니다. df와 du 명령간에 큰 불일치가있었습니다. 내 경우에는 회전 로그와 로그를 전달하는 서비스 (이 예제에서는 logstash)가 있습니다. logstash 서비스는 삭제 된 경우에도 회전 된 로그를 열린 상태로 유지했습니다. 이로 인해 du와 df간에 불일치가 발생했습니다. logstash 서비스가 다시 시작되면 디스크 공간이 올바르게 표시되었습니다.
aemus

무한으로 증가하여 결국 디스크를 채운 추가 전용 파일을 작성하는 프로세스가있었습니다. 그런 다음 해당 파일을 rm로 결정했지만 프로세스가 파일 설명자를 닫지 않았으므로 여전히 사용 중입니다. 프로세스를 다시 시작하고 AOF 크기를 제한하면 문제가 해결되었습니다.
aviggiano

루트 권한이 필요하다는 점에 유의하십시오. 또한 sudo lsof -s | grep deleted | sort -hk7숫자 정렬을 사용했습니다. -h가 없으면 sort는 숫자로 재미있는 어휘를 수행합니다.
Derek

이것은 놀라운 것입니다. 투표
Techie

4
find / -size +10000k -print0 | xargs -0 ls -l -h

에서 10MB 크기 +보다 더 채우는 재귀 적으로 찾을 때 사용합니다 /(루트)와 함께 많은 정보와 함께 표시 ls -l에서 xargs. 1000000 (2 여분의 0)을 쓰면 예를 들어 1GB 이상을 얻을 수 있습니다.

du / -h --max-depth=1 | sort -h

du를 사용하고 수동으로 파헤칠 수도 있습니다.


1

이런 일이 생길 때마다 항상 특정 하위 디렉토리에 집중합니다. 대부분의 Linux 배포판이 준수하는 FHS 구조는이를 염두에두고 배치됩니다.

먼저 /var,을 차례로 보십시오 /home.

$ sudo du -x -d1 -h /var  | sort -hr`

$ sudo du -x -d1 -h /home | sort -hr`

해당 위치 중 하나의 하위 디렉토리로 초점을 좁힐 수도 있습니다. 일단 당신이 거기에서 찾고 나면, 나는 보통로 이동 /root하고 마지막으로에있는 하위 디렉토리로 이동 /합니다.

Red Hat 기반 배포판 인 경우 yum업데이트를 수행 하는 데 사용 되는 캐시가 많은 공간을 소비 할 수 있습니다. 이 명령을 사용하여 지울 수 있습니다.

$ yum clean packages

사용하는 다른 배포판도 apt비슷한 것을 할 수 있습니다 apt-get clean.

또한 /디렉토리 상단 에서이 명령을 실행하면 이 위치가 때때로 부유 로그 파일의 소스가 될 수 있습니다.

$ ls -la /

도트 파일에 특히주의하십시오! 상황이라는 이름의 .blah예를 들어.



0

나는 거의 같은 상황이 있습니다.

제 경우에는 그 이유는 VMware였습니다. 동일한 머신에있는 다른 VMware 중 하나 인 디스크 공간을 소비했습니다. 이것이 내 디스크 공간 사용량이 100 % 인 이유입니다.

이웃의 VMware에서 큰 파일을 삭제하면 제대로 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.