3

Я компилировал 2 ядра одновременно, но процесс компиляции остановился. Причина: каталог /tmp заполнен. Я проверил с помощью df и ... /tmp имеет фиксированный размер 2 ГБ! (Мой компьютер имеет 4 ГБ оперативной памяти) Почему? У меня даже нет раздела /tmp ... как я могу это изменить?

    File system    1K-blocks    Usati Disponib. Uso% Montato su
/dev/sda5       35431432 13651652  19973276  41% /
dev              1989592        0   1989592   0% /dev
run              1992432      976   1991456   1% /run
tmpfs            1992432      280   1992152   1% /dev/shm
tmpfs            1992432        0   1992432   0% /sys/fs/cgroup
tmpfs            1992432  1436412    556020  73% /tmp

3 ответа3

5

Ограничение размера /tmp если он монтируется как tmpfs предназначено для предотвращения атаки DOS. Если один сервис был скомпрометирован или один пользователь вредоносный, они могли бы просто записать в /tmp пока весь обмен и память не будут заняты.

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

Не имея /tmp в качестве отдельного монтирования, могут возникнуть другие проблемы. Заполнение раздела / может привести к тому, что система не загружается, а в очень плохой ситуации (например, обновление glibc) может потребоваться гораздо больше исправлений.

Хотя эти проблемы могут быть значительными для мультисистем, есть также причина предотвратить это для пользователей настольных компьютеров. Например, однажды я использовал программу, которая пыталась записать несколько ГБ файлов во времена, когда 512 МБ было большим объемом ОЗУ, что сделало бы систему непригодной для использования, если бы tmpfs были неограничены. Таким образом, это создает проблемы только для самой программы и других, пытающихся записать в /tmp .

50% ОЗУ для tmpfs позволяет использовать 50% ОЗУ для других целей, например, для запуска программ, что предотвращает большой обмен. Поскольку обычно предполагается, что там хранится минимальное количество информации (41 МБ в моей системе), но она должна быть быстро доступной, это причина использования tmpfs в первую очередь (нет необходимости сохранять ее при перезагрузках, чтобы включить ее). Таким образом, 50% является «разумным» для обоих с большим провалом в случае пикового /tmp использования, в то же время предотвращая замедление системы.

Как уже упоминалось в abdelsaid, вы можете изменить настройки в /etc/fstab:

none /tmp tmpfs size=2G 0 0 # Change the size= parameter to whatever you want

PS. Где вы пытаетесь скомпилировать ядра (в /tmp)? Обычно вы компилируете их с правами пользователя и сохраняете результаты на случай, если вам нужны сторонние модули и т.д. Gcc должен хранить минимальное количество файлов в /tmp таким образом избегая всей проблемы.

После того, как вы используете 4 ГБ /tmp в системе 4 ГБ, возможно (особенно если вы используете тяжелую рабочую среду), что ваша система значительно замедлится.

4

По умолчанию RHEL и большинство дистрибутивов Linux монтируют tmpfs (временно файловую систему на основе ОЗУ) в каталог /dev /shm, и этот размер файловой системы всегда устанавливается равным половине установленной памяти.

источник: http://www.walkernews.net/2010/05/04/how-to-resize-devshm-filesystem-in-linux/

Вы можете изменить это, указав size = ... в /etc /fstab:

например, 2 ГБ:

tmpfs      /dev/shm      tmpfs   defaults,size=2g   0   0

например, 4 ГБ:

tmpfs      /dev/shm      tmpfs   defaults,size=4g   0   0
2

Если вы предпочитаете не монтировать /tmp в tmpfs, посмотрите в /etc /fstab строку, похожую на эту:

tmpfs /tmp tmpfs defaults,noexec,nosuid 0 0

Удалите это, если присутствует.

В зависимости от дистрибутива его также можно настроить в /etc /default /tmpfs или /etc /default /rcS. Отредактируйте этот файл и, если присутствует следующая строка, закомментируйте его (добавьте #):

RAMTMP=yes

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .