Как изменить «процент зарезервированного блока»

Как изменить «процент зарезервированного блока»

Есть ли способ сказать ядру вернуть свободное дисковое пространство сейчас? Например, записать что-то в /proc/ ? Использую Ubuntu 11.10 с ext4.

Это, вероятно,старыйи очень повторяющаяся тема. После нажатия на 0 пробелов, я заметил это только тогда, когда мой редактор не смог сохранить открытые мной файлы исходного кода, которые, к моему ужасу, теперь имеют размер 0 байт в списке папок, и я принялся удалять.

Я удалил сотни МБ больших файлов как из пользовательской, так и из корневой папки, а также сделал некоторые жесткие ссылки.

До этого apt-get cleanв /var/cache/apt/archives было более 900 МБ, а теперь там всего 108 КБ:

# 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

Обратите внимание, что индексный дескриптор все еще открыт, но теперь его длина равна 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
...

Как изменить «процент зарезервированного блока»

  1. Уменьшить зарезервированное пространство до 4%

    # tune2fs -m4 /dev/sda4

df -hсейчас показало 45М свободно.

  1. Быстро сохранил мои файлы
  2. Верните его к 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 извлекает идентификатор процесса и идентификатор дескриптора файла из каждой строки и создает строку в формате {pid}/fd/{fid}. Цикл While и ничего не выводит в каждый файл, делая их пустыми.

Связанный контент