4

Пытаясь проверить что-то не подключенное, я запустил бесконечный цикл на моем эмуляторе терминала terminator который печатал много данных в STDOUT. Через несколько минут я заметил, что мой раздел /tmp переполнен.

$ df -h
Filesystem                                   Size  Used Avail  Use%  Mounted on
rootfs                                        68G   21G   44G   33%  /
udev                                          10M     0   10M    0%  /dev
tmpfs                                         800M  1.2M  799M   1%  /run
/dev/disk/by-uuid/e29c6006c5c6                68G   21G   44G   33%  /
tmpfs                                         5.0M     0  5.0M   0%  /run/lock
tmpfs                                         3.2G  140K  3.2G   1%  /run/shm
/dev/sda6                                     290G  204G   72G  75%  /home
/dev/sda3                                      79G   51G   28G  65%  /winblows
tmpfs                                        3.2G   3.2G    0G 100%  /tmp

Тем не менее, du показал, что каталог пуст:

$ du -sch /tmp/
0   /tmp/
0   total

Запуск rm -rf /tmp не имел значения. Все это занятое пространство было освобождено, когда я закрыл терминал, который выполнял цикл, поэтому я предполагаю, что он был занят информацией прокрутки терминала.

Я знаю, что tmpfs - это хранилище, предназначенное для имитации файловой системы. Да, но

  1. Как это работает? Является ли /tmp файлом где-то (да, я знаю, что "все является файлом"), я имею в виду, что это "обычный" файл, хранящийся где-то на жестком диске? Это часть моего раздела подкачки? Моей оперативной памяти? Если я правильно понимаю, это может быть либо в ОЗУ или SWAP в зависимости от текущего использования, но я не видел пиков в использовании ОЗУ или SWAP, пока /tmp был полон.

  2. Где / как хранится информация прокрутки с терминала? Поскольку в /tmp не было файлов, его нельзя сохранить в простом текстовом файле, так где он и почему он занимает место в /tmp?

1 ответ1

4

Я не особо разбираюсь в tmpfs , и я никогда не слышал о вашем эмуляторе терминального terminator , но могу ответить на общий вопрос.  Это старый трюк Unix: создайте файл (обычно, но не обязательно, в /tmp), а затем немедленно удалите его.  Пока вы держите его открытым, он продолжает существовать и находится в файловой системе (будь то диск, память, локальный или удаленный), и вы можете записывать в него и читать из него, как любой обычный файл 1 , до Вы закрываете это.  Тогда это действительно удалено.

____________
1 За исключением того факта, что он не отображается ни в одном каталоге.  Вы можете думать об этом как об обычном файле, который не имеет жестких ссылок на него.

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