Відобразити вільний простір файлової системи, доступний кореневому користувачеві


12

За замовчуванням Linux залишає деяку частину файлової системи для кореневого користувача, принаймні на ext4 (щоб не допустити звичайних користувачів повністю заповнити накопичувач і збивати систему, а також зменшити фрагментацію). Однак dfвідображається лише вільний простір, очевидний звичайним користувачам (навіть коли він працює як root). Як ви відображаєте "справжній" вільний простір, який був би доступний для root?

Відповіді:


6

Я не впевнений, що вбудований інструмент, але якщо припустити, що ви залишили зарезервовану за замовчуванням 5%, то це скаже вам:

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

dfкорінь, grepдля рядка з розширенням у ньому (для видалення заголовка), 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команда не працювала для мене, як очікувалося. У всякому разі, я дав ще одну відповідь, яка повинна дати більш точну відповідь.
jarno

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 блоків ... з розміром блоку 4K (4096), що множиться на велику кількість (462-ish GB). (Розмір блоку зазначено нижче)

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

Це відображає вільний простір у байтах у розділі, пов'язаному з "/ path"

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

Вам не потрібно бути суперпользователем, щоб запустити його.

До речі, я не зовсім розумію, в чому різниця між

% s розмір блоку (для більш швидких передач)

Основний розмір блоку% S (для кількості блоків)

у використанні stat.


Класно - чи враховує це місце, відведене для root?
Пол

@Paul так, це включено
jarno

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

@Paul Ну, я б назвав це продуктом. У бінарних префіксів називаються kibibytes, Mebibytes і gibibytes відповідно. Навколишнє арифметичне розширення $(( ... )) робить обчислення, але це призводить лише до цілої частини коефіцієнта (якщо додати поділ). Або ви маєте на увазі, що ваша оболонка не підтримує арифметичне розширення?
jarno

@Paul Але, якщо ви скористаєтесь bcнатомість, ви можете отримати коефіцієнт з довільною точністю, якщо вам це потрібно.
jarno
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.