지금 커널에 여유 디스크 공간을 돌려주도록 지시하는 방법이 있습니까? /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}
. while 루프를 실행하고 각 파일에 아무것도 출력하지 않고 공백으로 설정합니다.