Почему fstrim обрезает все свободное пространство на моем зеркале mdraid после перезагрузки? [дубликат]

Если вы вообще не можете получить доступ к учетной записи, вам будет трудно выяснить, в чем проблема. Но проверьте системные журналы или журналы приложений, возможно, какая-то программа оставила там подсказку (особенно при неудачной попытке входа).

Если вы можете запускать программы для экспериментов, вы можете определить, какой предел был достигнут, попытавшись увеличить каждое ограниченное значение и увидев, когда это получается, а когда попытка терпит неудачу с EAGAIN. Можно также перечислить ресурсы, используемые для каждого значения; я не могу вспомнить утилиту, которая собирает данные для всех ограничений, но, возможно, такая утилита существует.

Если предположить, что проблема заключается в ограничениях ядра, то они перечислены на странице setrlimit man. Те, которые применяются для идентификатора пользователя:

  • RLIMIT_MEMLOCK - размер незаменяемой памяти. Не должно препятствовать входу в систему, очень немногие программы запрашивают незаменяемую память.
  • RLIMIT_MSGQUEUE - размер очереди сообщений. Не должен препятствовать входу в систему, очень немногие программы используют очереди сообщений.
  • RLIMIT_NPROC - максимальное количество процессов. Этот параметр абсолютно будет препятствовать входу в систему, если он достигнут. Увеличение лимита в /etc/security/limits.conf не повлияет на существующие сессии, но повлияет на новые процессы, поэтому если системный администратор увеличит значение там, пользователь сможет войти в систему.
  • RLIMIT_SIGPENDING - максимальное количество ожидающих сигналов. Не должно препятствовать входу в систему, очень немногие программы используют sigqueue для зачисления сигналов.

Так что наиболее вероятным является ограничение на процессы. Если у вас есть доступ к запущенной оболочке, вы можете подтвердить это, попытавшись запустить программу; ошибка должна быть довольно характерной:

$ ls
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: Resource temporarily unavailable

Вы можете вывести этот лимит с помощью ulimit -u. Если у вас есть доступ к оболочке, запущенной от имени проблемного пользователя, и этот пользователь не запускал никакой setuid-программы, вы можете перечислить процессы, которые учитываются в этом лимите с помощью set /proc/*/task/*/cwd/.; echo $# (перечисляются потоки ядра, для которых пользователь может читать ссылку cwd, что означает, что пользователь имеет полный контроль над процессом).

2
11.04.2014, 18:06
0 ответов

Теги

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