
지금 커널에 여유 디스크 공간을 돌려주도록 지시하는 방법이 있습니까? /proc/에 뭔가를 쓰는 것과 같은가요? ext4와 함께 Ubuntu 11.10을 사용합니다.
이것은 아마도오래된매우 반복되는 주제입니다. 0 공간에 도달한 후 편집자가 내가 열어 놓은 소스 코드 파일을 저장할 수 없을 때만 알아차렸습니다. 이제 폴더 목록의 크기가 0바이트가 되어 끔찍하게도 나는 계속 삭제 작업을 진행했습니다.
사용자와 루트 모두에서 100MB의 대용량 파일을 삭제하고 일부 하드링크도 수행했습니다.
방금 전에는 apt-get clean
/var/cache/apt/archives에 900MB가 넘었지만 지금은 108KB만 있습니다.
# du
108 /var/cache/apt/archives
한 시간이 지난 후에도 여전히 여유 공간이 없고 편집기에서 열린 소중한 파일을 저장할 수 없지만 아래 차이점을 확인하세요.
# sync; df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda4 13915072 13304004 0 100% /
어떤 제안이 있으십니까? 일부 서비스/프로세스를 종료했지만 누가 디스크 공간을 적극적으로 먹고 있는지 확인하는 방법을 모르겠습니다.
더 많은 정보
# dumpe2fs /dev/sda4
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 884736
Block count: 3534300
Reserved block count: 176715
Free blocks: 422679
Free inodes: 520239
First block: 0
Block size: 4096
Fragment size: 4096
답변1
lsof
열려 있는 파일이 있는지 확인 하십시오 . 공간은 닫힐 때까지 해제되지 않습니다.
sudo /usr/sbin/lsof | grep deleted
삭제된 파일이 아직 열려 있는지 알려줍니다.
답변2
lsof
삭제되었지만 열려 있고 여전히 공간을 차지하고 있는 파일을 찾는 데 사용합니다 .
lsof | grep deleted | grep etilqs_1IlrBRwsveCCxId
chrome 3446 user 128u REG 253,2 16400 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
/proc/<pid>/fd/
파일 핸들에 해당하는 항목을 찾으십시오 .
ls -l /proc/3446/fd/etilqs_1IlrBRwsveCCxId
lrwx------. 1 user unix 64 Feb 11 15:31 128 -> /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
이제 cat /dev/null
fd로 들어갑니다.
cat /dev/null > /proc/3446/fd/128
inode는 여전히 열려 있지만 이제 길이는 0입니다.
chrome 3446 user 128u REG 253,2 0 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
답변3
df
root
다음 으로 실행되는 경우에도 예약된 공간은 표시되지 않습니다 root
.
# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/optvol 625G 607G 0 100% /opt
...
"예약된 블록 비율"을 변경하는 방법
예약된 공간을 4%로 줄입니다.
# tune2fs -m4 /dev/sda4
df -h
이제 45M이 무료로 표시되었습니다.
- 내 파일을 빠르게 저장했습니다.
다시 5%로 올려주세요
# tune2fs -m5 /dev/sda4
답변4
sudo lsof | grep "(deleted)$" | sed -re 's/^\S+\s+(\S+)\s+\S+\s+([0-9]+).*/\1\/fd\/\2/' | while read file; do sudo bash -c ": > /proc/$file"; done
설명: 삭제된 파일만 추출하는
Grep 출력입니다. lsof
Sed는 각 줄에서 프로세스 ID와 파일 설명자 ID를 추출하고 형식으로 문자열을 생성합니다 {pid}/fd/{fid}
. 루프를 실행하고 각 파일에 아무것도 출력하지 않고 비어 있도록 설정합니다.