Почему размер и использованное пространство в выводе df противоречат доступному пространству [дубликат]

Использование sed ,

$ echo "ab^cd^ef" | sed 's,\^, ,g'
ab cd ef

Уже , прокомментированный @jasonwryan , вы можете использовать замену строки встроенной оболочки,

$ str="ab^cd^ef"
$ echo "${str//^/ }"
ab cd ef

Другой вариант, предложенный @someonewithpc

$ echo "ab^cd^ef" | sed 'y,^, ,'
ab cd ef

(Примечание: y используется для преобразования символов.)

2
19.03.2017, 13:48
2 ответа

По умолчанию файловые системы ext2, ext3 и ext4 резервируют 5% своей емкости для использования пользователем root. Это уменьшает фрагментацию и снижает вероятность того, что у пользователя root или любых демонов с root-правами закончится дисковое пространство для выполнения важных операций. Более подробную информацию о причинах этой оговорки можно найти в ответах на этот связанный вопрос .

Вы можете проверить размер резервирования с помощью команды tune2fs :

tune2fs -l /dev/md2 | grep "Reserved block count:"

Процент резервирования можно изменить с помощью параметра -m в tune2fs ] команда:

tune2fs -m 0 /dev/md2

Количество зарезервированных зарезервированных блоков можно изменить с помощью параметра -r команды tune2fs :

tune2fs -r 0 /dev/md2

Зарезервированное пространство наименее полезно в больших файловых системах со статическим контент, не связанный с операционной системой. Для таких файловых систем разумно уменьшить резервирование до нуля.Файловые системы лучше оставить с 5% резервированием по умолчанию, включая те, которые содержат каталоги / , / root , / var и / tmp которые часто используются демонами и другими операционными системными службами для создания временных файлов или журналов во время выполнения.

13
27.01.2020, 21:51

Чаще всего причиной этого являются удаленные открытые файлы.

Ядро освобождает дисковые блоки удаленного файла только в том случае, если он не используется во время его удаления. В противном случае это откладывается до закрытия файла или перезагрузки системы.

Распространенный прием в мире Unix, чтобы гарантировать, что не осталось временных файлов, заключается в следующем:

  1. Процесс создает и открывает временный файл
  2. Удерживая дескриптор открытого файла, процесс разрывает связь (т. Е. Удаляет ) файл
  3. Процесс обычно читает и записывает в файл, используя файловый дескриптор
  4. Процесс закрывает файловый дескриптор, когда это делается, и ядро ​​освобождает пространство
  5. Если процесс (или система) завершается неожиданно временный файл уже удален, и в очистке не требуется.
  6. В качестве бонуса удаление файла снижает вероятность конфликтов имен при создании временных файлов, а также обеспечивает дополнительный уровень неясности для запущенных процессов - для всех, кроме пользователя root.

Такое поведение гарантирует, что процессам не придется иметь дело с файлами, которые внезапно выдернуты из-под ног, а также что процессам не придется консультироваться друг с другом, чтобы удалить файл. Однако это неожиданное поведение для тех, кто работает с системами Windows, поскольку там вам обычно не разрешается удалять используемый файл.

Команда lsof, запущенная от имени пользователя root, покажет все открытые файлы и конкретно укажет на удаленные файлы, которые были удалены:

# lsof 2>/dev/null | grep deleted
bootlogd   2024       root    1w      REG                9,3         58     917506 /tmp/init.0W2ARi (deleted)
bootlogd   2024       root    2w      REG                9,3         58     917506 /tmp/init.0W2ARi (deleted)

Остановка и перезапуск виновных процессов или просто перезагрузка сервера должны решить эту проблему.

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

В вашем случае, судя по размеру «недостающего» места, я бы поискал любые ссылки на файл, который вы использовали для настройки VPS, например образ DVD Centos, который вы удалили после установки.

3
27.01.2020, 21:51

Теги

Похожие вопросы