파일을 삭제하지만 디스크 공간이 가득 찼습니다


26

lvm 설정이없는 오래된 CentOS 5.6 상자를 다루면서 루트 파일 시스템이 가득 찼습니다. 필요하지 않은 많은 오래된 로그 파일과 응용 프로그램 파일을 지 웠습니다. 크기는 2-5GB 이상이지만 시스템은 여전히 디스크가 꽉 찼음을보고합니다.

[root@tornms1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             130G  124G     0 100% /
/dev/sdb1             264G  188M  250G   1% /data
/dev/sda1              99M   24M   71M  26% /boot
tmpfs                 2.0G     0  2.0G   0% /dev/shm



[root@tornms1 ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sdb1 on /data type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

다음에해야 할 일에 대한 아이디어가 있습니까? 불행히도 상자를 재부팅하는 것은 현재 옵션이 아닙니다.


1
멍청한 질문을해서 미안하지만 당신 /.Trash/이 비어 있는지 확인 했습니까? 했어요 sudo rm -Rf ~/.Trash/*?
Art Gertner

이것은 서버이므로 xwindow가 설치되어 있지 않으므로 루트 계정에 .trash 폴더가 없습니다.
user1007727

내 나쁜 점은 /.Trash/가 모든 유닉스 계열 시스템에 있다고 가정합니다.
Art Gertner

또한 sync ( linux.die.net/man/8/sync ) 명령을 사용하여 모든 작업이 여전히 캐시되어있을 수 있습니다.
weberik

답변:


38

여기서 두 가지 일이 일어날 수 있습니다.

첫째 , 파일 시스템은 root쓸 수 있는 공간 만 확보하여 일반 사용자의 디스크 공간이 부족할 때 중요한 시스템 프로세스가 넘어 가지 않도록합니다. 124G의 130G가 사용되었지만 0을 사용할 수있는 이유입니다. 삭제 한 파일이이 시점까지 활용률을 떨어 뜨 렸지만 일반 사용자의 임계 값 미만이 아닐 수도 있습니다.

이 상황이 절실하고 필요한 경우에 예약 된 공간을 변경할 수 있습니다 root. 1 % (기본값은 5 %)로 줄이려면 명령은 다음과 같습니다.

# tune2fs -m 1 /dev/sda3

둘째 , 운영 체제는 여전히 열려있는 삭제 된 파일의 디스크 공간을 해제하지 않습니다. Apache의 로그 파일 중 하나를 삭제 한 경우 (예를 들어) 공간을 확보하려면 Apache를 다시 시작해야합니다.


1
네, 두 번째는 먼저해야합니다!
mulya

이 질문 & 답변 (들) 더 많은 정보를 추가 superuser.com/questions/444269/...을 .
luka5z

18

프로세스에서 사용중인 파일을 삭제하면 더 이상 파일을 볼 수 없습니다 ls. 프로세스는 프로세스를 중지 할 때까지 해당 파일에 계속 기록합니다.

삭제 된 파일을 보려면 다음을 실행하십시오. lsof|grep delete


1
이것은 내 경우의 문제였습니다. 매우 유용한 정보 감사합니다.
Dag Sondre Hansen


10

디스크 를 얻는 다른 방법 은 전체 문제입니다.

1) 마운트 지점 아래에 숨겨져 있음 : 리눅스는 마운트 지점 아래에 "숨겨진"파일이있는 전체 디스크를 표시합니다. 드라이브에 기록 된 데이터가 있고 그 위에 다른 파일 시스템을 마운트하는 경우, Linux는 마운트 지점 아래에서 파일을 볼 수 없어도 디스크 사용량을 올바르게 기록합니다. nfs 마운트가 있으면 마운트를 해제하고 마운트 전에 실수로 해당 디렉토리에 기록 된 것이 있는지 확인하십시오.

2) 손상된 파일 : Windows에서 SMB를 통해 Linux 파일로 전송하는 경우가 있습니다. 하나의 파일이 파일 디스크립터를 닫지 못하고 4GB 파일의 휴지통이 생깁니다.

파일이있는 서브 디렉토리를 찾아야하므로 수정하기가 더 지루할 수 있지만 파일 자체는 쉽게 제거 가능하므로 쉽게 수정할 수 있습니다. du명령을 사용하고 루트 하위 디렉토리 목록을 작성하여 파일 공간이 사용되는 위치를 찾습니다.

cd /
du -sh ./* 

최상위 디렉토리의 수는 일반적으로 제한되어 있으므로 사람이 읽을 수있는 플래그 -h를 설정하여 어떤 하위 디렉토리가 스페이스 호그인지 확인합니다.

그런 다음 문제가있는 하위 항목으로 이동하여 모든 하위 항목에 대해 프로세스를 반복하십시오. 큰 항목을 쉽게 찾을 수 있도록 du를 약간 변경하고 정렬하십시오.

cd /<suspiciously large dir>
du -s ./* | sort -n

모든 파일 및 디렉토리에 대해 바이트 크기별로 최소에서 최대 출력을 생성합니다.

4          ./bin 
462220     ./Documents
578899     ./Downloads
5788998769 ./Grocery List

대형 파일을 발견하면 일반적으로 파일을 삭제할 수 있습니다.


좋은 팁! du에서 /를 사용하여 폴더를 추적하고 android SDK에서 매우 큰 시스템 이미지를 발견했습니다. 그들을 삭제하고 모든 것이 정상으로 돌아 왔습니다 :)
Pupper

4

lsof로 어떤 파일이 열려 있는지 확인할 수 있습니다. 많은 출력을 생성 할 수 있으므로 아래 예제에서 log로 끝나는 줄로 제한했습니다.

# lsof | grep log$
rsyslogd   2109     syslog    0u     unix 0xffff88022fa230c0      0t0       8894      /dev/log
rsyslogd   2109     syslog    1w      REG              252,6    62393         26 /var/log/syslog
rsyslogd   2109     syslog    2w      REG              252,6   113725        122 /var/log/auth.log
rsyslogd   2109     syslog    3u     unix 0xffff88022fa23740      0t0       8921 /var/spool/postfix/dev/log
rsyslogd   2109     syslog    5w      REG              252,6    65624        106 /var/log/mail.log
/usr/sbin  2129       root    2w      REG              252,6    93602         38 /var/log/munin/munin-node.log
/usr/sbin  2129       root    4w      REG              252,6    93602         38 /var/log/munin/munin-node.log
...

1

일부 파일이 삭제되었지만 일부 프로세스에서 여전히 사용되는 경우 공간이 해제되지 않습니다. 이 경우 파일을 사용중인 프로세스를 다시 시작하거나 파일을 무효화하십시오. 이러한 파일을 삭제하는 대신 항상 null로 지정하는 것이 좋습니다. 삭제 된 파일을 찾지 만 일부 프로세스에서 여전히 사용중인 경우

#lsof +L1

프로세스 ID와 파일 설명자를 제공합니다. 파일 디스크립터별로 삭제 된 파일을 널로 설정하려면

#echo "" > /proc/$pid/fd/$fd 

1

명령을 입력하십시오

#lsof +L1

삭제 된 따옴표로 메모리를 보유하는 파일 목록이 표시됩니다.

파일 의 pid (Process id)를 주목 하십시오

프로세스를 죽여라

#kill <pid>

프로세스에 의해 메모리가 해제됩니다

명령으로 확인

#df -h

0

설명 된 것 외에도, 문제는 동일한 서버의 다른 연결된 디스크 장치에 삭제 된 파일 디렉토리의 다른 마운트 지점이있을 수 있습니다. 현재 마운트 및 fstab 항목을 확인하십시오.


0

야생에서 관찰 된 실제 문제 :

실제 파일을 삭제하고 파일 에 대한 심볼릭 링크 가 아닌지 확인하십시오 . 특히 로그 파일의 경우 일 수 있습니다.

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