리눅스 파일 시스템; df & du를 사용한 크기 계산의 차이


8

내가 실행 df하면 루트 장치가 가득 찼습니다.

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  9.4G     0 100% /

inode사용법을 보고 루트 장치에 사용할 수있는 공간이 거의 있습니다.

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1               640K    103K    538K   16% /

나는 실행할 때, du명령을, 내가에만 사용하고 있습니다 보여줍니다 2G에서 9.9G.

ip-XXX-XXX-XXX-XXX:/$ du -xh --max-depth=1
14M ./etc
4.0K ./mnt
96K ./tmp
3.5M ./bin
0   ./sys
964K ./boot
4.0K ./srv
0   ./dev
55M ./lib
25M ./root
1.1G ./usr
4.0K ./opt
846M ./var
4.3M ./sbin
23M ./home
16K ./lost+found
0   ./proc
2.0G .

그것은 단지 나를 미치게하고 흥미있게 만들었다. 루트 디스크 /가 가득 차서 사이트의 일부 기능이 작동하지 않기 때문에 이것은 큰 문제입니다 .

이 문제를 해결하도록 도와주세요.

감사.



@Gilles 당신이 말했듯이, 나는 달렸고 du -x /2G 만 사용되며 inode 크기는을 계산했습니다 160M. 그것은 물건을 이해하는 데 도움이되었지만이 문제를 해결하고 싶습니다.
Rakesh Sankar

당신 du은 루트로 실행 했습니까 ? 그렇지 않으면 액세스 할 수있는 파일 만보고 할 수 있습니다.
Gilles 'SO- 악마 그만'

@Gilles 내가 달리는root
Rakesh Sankar

ncdu디스크 사용을 시각화하는 데 도움 이되는 훌륭한 프로그램 이외에 여기에 추가 할 것이 많지 않습니다 .
Rob

답변:


4

* nix에서 파일을 삭제하면 프로세스가 열려있는 한 계속 디스크에 남아 있으며 디스크 공간을 차지합니다. 임시 파일을 작은 크기로 생성하고 삭제 한 다음 삭제 된 파일을 사용하여 다른 프로세스에 대한 걱정없이 데이터를 저장함으로써 임시 파일을 "보안"하기 위해이 방법을 사용하는 것이 일반적입니다. 예를 들어 임시 데이터베이스 또는 멀티미디어 편집 세션이 이러한 방식으로 처리되는 경우 삭제 된 파일의 공간이 상당히 커질 수 있습니다. "잃어버린"공간을 확보 할 수있는 또 다른 가능성은 시스템을 프로그램을 재부팅하거나 다시 시작하지 않고 시스템을 여러 번 업그레이드 한 경우 이전의 모든 .so 라이브러리가 이전에 시작된 프로그램에 의해 열려있는 경우입니다 업그레이드하고 여전히 실행 중입니다.

df이 파일이 사용하는 공간은 장치에 할당 된 공간의 크기 만 보지만 du해당 디렉토리 항목이 없기 때문에 보이지 않습니다.

이와 같이 "숨겨진"사용 된 공간은 파일을 삭제 한 프로세스가 파일을 닫을 때만 비울 수 있습니다. fuser명령으로 이러한 프로세스를 찾아서 종료 할 수 있습니다 (또는 많은 데몬의 경우 열려있는 파일을 닫았다가 다시 열도록 신호를 보냅니다).


고마워, 좋은 정보, 오늘 내가 이해하는 것.하지만 hidden사용 된 공간 을 찾으 fuser려면 프로세스가 사용하지만 연결되지 않은 모든 파일을 보려면 명령을 실행하려고 합니다. 내가 찾도록 지시하는 지시 나 지시가 있습니까? 이것이 내가 사용하는 명령입니다fuser -v -a /
Rakesh Sankar

숨겨진 공간을 없애기 위해 재부팅해야했지만 숨겨진 파일을 제거하는 적절한 해결책을 찾지 못했습니다.
Rakesh Sankar

1

디스크가 가득 차면 디스크를 가득 채우고 재부팅 할 때까지 파일로드를 삭제 한 경우에도 혼동 될 수 있습니다.


프로덕션 사이트이므로 재부팅 할 수 없습니다. 그러나 숨겨진 공간을 찾아 다시 가져올 수있는 솔루션을 찾고 있습니다.
Rakesh Sankar 2016 년

프로덕션 일 수도 있지만 재부팅이 유일한 대답 일 수도 있습니다. 그것은 루트 디스크이고 모든 OS가있는 불행한 문제입니다. 그렇기 때문에 많은 사람들이 다른 디스크에 tmp, var, home 등을 사용하는 것을 권장합니다. OS가 루트 디스크에 사용 가능한 공간을 인식하지 못하는 것이 더 일반적입니다.
BugFinder

1

내 쪽에서는 디스크 공간을 확보하기 위해 syslogd를 다시 시작했습니다. 3GB가 누락되었습니다! 내 서버는 250 일 동안 가동되었습니다.


0

응용 프로그램을 다시 시작하지 않고 공간을 정리하는 방법이 있습니다. 세부 사항은 다음과 같습니다.

  1. fooabc.log라는 2GB 파일을 실행하고 생성하는 프로세스가 있다고 가정 합니다. 이제이 abc.log가 다른 사람에 의해 삭제되었다고 가정하십시오.

  2. foopid를 얻으십시오 (123이라고 말하십시오). 따라서 /proc/123/fd열린 파일 디스크립터 목록이 표시됩니다 foo. abc.log가있는 것은 삭제 된 것으로 표시됩니다. fdabs.log가 111 이라고 가정 해 봅시다 .을 실행 less /proc/123/fd/111하면 2GB의 데이터가 모두 표시됩니다.

  3. 를 실행하십시오 echo " " > /proc/123/fd/111. 빈 문자열로 내용을 덮어 씁니다. 이 명령을 시도 df하면 abc.log를 정리하여 복구 된 추가 2GB가 표시됩니다.

그게 다야. CentOS에서 이것을 시도해 보았습니다.


이것은 유용한 정보입니다. 그러나 그것은 질문에 대한 답변이 아닙니다.
Isaac Rabinovitch

죄송하지만 내 파일은 파일을 삭제 한 프로세스 ID를 알고 있으면 디스크 공간 정리를 목표로합니다. 이 경우 / proc / [0-9] * / fd의 모든 파일을 살펴보고 삭제 된 파일을 grep하고 위에서 언급 한 논리를 따라야합니다.
Kaustubh Sathe

디스크 공간 누출을 일으키는 파일이 궁금한 경우 한 번에 삭제 된 파일을 정리하고 매번 df 출력을 확인하고이 정보를 기록하십시오.
Kaustubh Sathe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.