Так что все руководства и документация по системе квот 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 были смонтированы в другой системе без включенных квот, а затем перезапустились в обычном режиме, вы бы хотели знать, откуда вы начинаете каждый раз, и, поскольку вы собираетесь инициализировать после каждой остановки, это место, где она настраивается.
Надеюсь, это поможет.