Отображение свободного места в файловой системе, доступного для пользователя root


12

По умолчанию Linux резервирует некоторую часть файловой системы для пользователя root, по крайней мере, для ext4 (чтобы обычные пользователи не могли полностью заполнить диск и привести к сбою системы, а также уменьшить фрагментацию). Однако dfотображает только свободное пространство, доступное обычным пользователям (даже при запуске от имени пользователя root). Как вы отображаете «реальное» свободное пространство, которое было бы доступно для root?

Ответы:


6

Я не уверен, что есть встроенный инструмент, но если вы оставили зарезервированные значения по умолчанию 5%, то это скажет вам:

df / | grep dev | cut -f 3,6 -d\  | awk '{print ($1*.05)+$2}'

dfкорень, grepдля строки с dev в нем (для удаления заголовка), cutразмера и доступных полей, затем используйте awkскрипт для расчета 5% размера диска, добавленного к доступному.

Вы можете получить фактическое резервирование tune2fs -l <device>и объединить это с вышеупомянутым в сценарии.


2
Правильно, поэтому следующая команда покажет нам , как большая часть ограждающей пространства резервируется для privilegied пользователей: tune2fs -l /dev/DEVICE | egrep "Block count|Reserved block count". Например, для моего раздела «мультимедийный буфер»: Block count: 2621440и Reserved block count: 128449: 4,9% доступных блоков (консервативный параметр, помогающий предотвратить фрагментацию).
tuk0z

Нет необходимости использовать cutкоманду: вы можете выбрать поля awkнапрямую. На самом деле cutкоманда не работает для меня , как и ожидалось. Во всяком случае, я дал другой ответ, который должен дать более точный ответ.
Ярно

1
Выполните, tune2fs -m <percentage> <device-name>чтобы изменить место на диске, зарезервированное только для использования root.
luka5z

1
Вдохновленный вышеизложенным, я придумал это, чтобы вычислить зарезервированное пространство на корневом томе в МБ:sudo tune2fs -l $(df | grep -E '/$' | cut -d\ -f 1) | egrep "Reserved block count|Block size" | paste -sd\ | awk '{print ($4 * $7 / ( 1024 * 1024 ) ), "MB"}'
mp3foley

Это не переносимый ответ. Проверьте ниже для ответа вам нужно (спойлер: tune2fs /dev/sda1или даже лучшеstat -f -c '%a blocks free and %f blocks free for root (%S bytes per block)' /
ТРС

17

Используя команду tune2fs (находится в / sbin / tune2fs ), вы можете легко определить зарезервированное пространство : (и многое другое!)

tune2fs -l /dev/sda1

Я предоставлю информацию о моей системе для справки, я собираюсь удалить посторонние строки, не важные для этого вопроса:

Заголовок ... и имя тома, я помечаю все свои диски, позволяет легко идентифицировать их при необходимости.

tune2fs 1.42.4 (12-Jun-2012)
Filesystem volume name:   xenon
Last mounted on:          /
...

ДЕЙСТВИТЕЛЬНО хочу, чтобы это говорило «чистый» во время работы системы. Честное слово!

Filesystem state:         clean

Здесь начинается информация о емкости хранилища данных:

Здесь вы можете видеть, что у меня всего 121 179 648 блоков ... с размером блока 4 КБ (4096), который умножается до некоторого большого числа (462 гигабайта ГБ). (Размер блока указан ниже)

Block count:              121179648

И зарезервированные блоки ... посмотрев на число выше и число ниже ... вы сможете относительно быстро выяснить, у меня зарезервирован 1%. В этом случае (4,62 ГБ)

Reserved block count:     1211796

Сколько свободного места сейчас доступно? Прямо здесь!

Free blocks:              104090586
...

И все важные размеры блока. Полезно для умножения.

Block size:               4096
...

Эти строки говорят, КТО блоки зарезервированы для ... пользователя 0, root, в данном случае

Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
...

Здесь доступно гораздо больше информации, но это должно дать вам возможность быстро определить, сколько доступно и сколько еще зарезервировано для root. Простая математика.

Надеюсь это поможет. Помните ... справочные страницы - ваши друзья.


2

Это отображает свободное место в байтах в разделе, связанном с "/ путь"

printf '%s' $(($(stat -f --format='%f*%S' /path)))

Вам не нужно быть суперпользователем, чтобы запустить его.

Кстати, я не совсем понимаю, в чем разница

% s размер блока (для более быстрой передачи)

% S основной размер блока (для количества блоков)

в использовании stat.


Круто - учитывает ли это место, отведенное для root?
Пол

@Paul да, это включено
Ярно

Ваши выходные данные фактически являются суммой - так что вы можете направить выходные данные, bcчтобы получить количество байтов, или даже использовать, --format='%f*%S/1024/1024/1024' | bcчтобы получить килобайты / мегабайты / гигабайты в зависимости от того, сколько разделов вы выберете.
Пол

@ Пол, я бы назвал это продуктом. В бинарных префиксов называются kibibytes, Mebibytes и gibibytes соответственно. Окружающее арифметическое расширение $(( ... )) выполняет вычисление, но оно приводит только к целочисленной части фактора (если вы добавите деление). Или вы имеете в виду, что ваша оболочка не поддерживает арифметическое расширение?
Ярно

@Paul Но, если вы используете bcвместо этого, вы можете получить коэффициент с произвольной точностью, если вам это нужно.
Ярно
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.