Назад | Перейти на главную страницу

Пытаетесь найти квоты Linux, где хранятся данные?

Так что все руководства и документация по системе квот Linux сбили меня с толку. Где хранится фактическая информация о квотах для каждой файловой системы с включенными / включенными квотами? Это метаданные файловой системы или они находятся в файле?

Скажем, пользователь foo создает новый файл в / home. Как ядро ​​определяет, находится ли пользователь foo ниже своего жесткого предела? Должно ли ядро ​​каждый раз подсчитывать информацию о квотах в этой файловой системе, или она находится в суперблоке или где-то еще?

Насколько я понимаю, ядро ​​обращается к файлу aquota.user для получения фактических правил, но где хранятся текущие данные об использовании квоты? Можно ли это просмотреть с помощью каких-либо инструментов, кроме repquota и т.п.? ТИА !!

Обновить:

Спасибо за помощь. Я уже прочитал этот мини-HOWTO. Я довольно хорошо понимаю использование инструментов пользовательского пространства. Что мне неясно, так это были ли данные об использовании ТАКЖЕ в файле, в котором хранились ограничения для каждого пользователя, и вы ответили на это утвердительно.

Насколько я могу судить, rc.sysinit запускает quotacheck и quotaon при запуске. Программа quotacheck анализирует файловую систему, обновляет файлы aquota. *. Затем он использует quota.h и системный вызов quotactl (), чтобы сообщить ядру информацию о квотах.

С этого момента ядро ​​хеширует эту информацию и увеличивает / уменьшает статистику квот по мере появления изменений. После завершения работы сценарий init.d / halt запускает команду quotaoff ПРЯМО перед размонтированием файловых систем. Команда quotaoff, похоже, не обновляет файлы aquota. * Информацией, которая хранится в памяти ядра. Я говорю это потому, что времена {a, c, m} для файла aquota.user обновляются только при перезагрузке системы или при ручном запуске команды quotacheck. Похоже, насколько я могу судить, ядро ​​просто сбрасывает актуальные данные об использовании на пол при завершении работы. Эта информация никогда не используется для обновления файлов aquota. *. Они обновляются во время запуска программой quotacheck (rc.sysinit). Мне это кажется глупым, поскольку эта обновленная информация уже была собрана ядром. Итак ... в заключение я все еще не совсем понимаю методы. ;)

Где хранится фактическая информация о квотах для каждой файловой системы с включенными / включенными квотами?

См. Например в справочная страница quotaon. В корневом каталоге файловой системы будут файлы с именем .quota *, которые содержат необходимую информацию (.quota.user, .quota.group, .quota.ops.user, .quota.ops.group).

Скажем, пользователь foo создает новый файл в / home. Как ядро ​​определяет, находится ли пользователь foo ниже своего жесткого предела? Должно ли ядро ​​каждый раз подсчитывать информацию о квотах в этой файловой системе или она находится в суперблоке или где-то еще?

Нет, ядро ​​постоянно отслеживает использование файловой системы, поэтому нет необходимости пересчитывать ее при каждом выделении (что было бы слишком дорого). Он выполнит расчет один раз, когда квоты включены, а затем обновит его. Первоначальный расчет выполняется quotacheck.

Насколько я понимаю, ядро ​​обращается к файлу aquota.user для получения фактических правил, но где хранятся текущие данные об использовании квоты? Можно ли это просмотреть с помощью каких-либо инструментов, кроме repquota и т.п.? ТИА !!

Информация о квотах хранится в .quota * (см. Выше). Я не знаю никаких инструментов для создания отчетов об использовании квот, кроме repquota. Но вы должны иметь возможность создавать большинство отчетов, используя / scripting repquota. Или придется взломать исходник ...

Кстати:

В Квота мини-HOWTO дать хороший обзор системы квот Linux. Это немного устарело, но основы не сильно изменились.

После прочтения вашего обновления кажется, что вы задаетесь вопросом, почему вся информация о квотах, которую имеет ядро, будет отброшена при выключении машины, а не записана в файлы aquota. *.

Что ж, ядро ​​не обновляет файл на лету, так как это было бы дорогостоящим с точки зрения времени. В основном, когда квоты включены, ядро ​​отслеживает использование в случае достижения мягкого / жесткого предела, и оно должно что-то делать, это означает, что оно отслеживает это каждый раз, когда ему нужно выделить любые блоки fs для любого пользователя / группы в системе. Если бы ему затем пришлось обновить файлы aquota. * При попытке выделить блоки fs, вы могли бы увидеть, где это в конечном итоге вызовет проблемы даже в умеренно загруженных системах, и в этом нет необходимости, поскольку ядро ​​наблюдает за этим и будет регистрировать любые нарушения для вас, чтобы вы знали, что нужно запустить quotacheck. Даже расчет квоты может вызвать проблемы, поэтому у вас есть настраиваемый sysctl - dquot-max - и sysctl для отчетов - dquot-nr - дополнительную информацию можно увидеть здесь:

http://www.mjmwired.net/kernel/Documentation/sysctl/fs.txt

Что касается размещения quotacheck во время процесса инициализации, а не процесса остановки, все зависит от времени и того, как вы думаете о вещах. Обычно, когда вы останавливаете сервер, вы хотите, чтобы он быстро отключился. Не тратим кучу времени на табулирование квот, мы привыкли к тому, что init занимает больше времени. Кроме того, рассматривайте этот процесс как init, устанавливающий начальное количество квот при запуске системы, а не как очистку при завершении работы. Что, если бы FS были смонтированы в другой системе без включенных квот, а затем перезапустились в обычном режиме, вы бы хотели знать, откуда вы начинаете каждый раз, и, поскольку вы собираетесь инициализировать после каждой остановки, это место, где она настраивается.

Надеюсь, это поможет.