По умолчанию папка для временных файлов расположена в корне: /tmp.

В некоторых дистрибах эта папка монтируется в память. Но если оперативки мало, а чья-то софтина активно пишет в неё, есть смысл перенести папку /tmp куда-нибудь на диск.

Ну а если папка /tmp лежит на корневом разделе, а на разделе нет места, то это тоже проблема.

Самый распространённый и быстрый вариант: смонтировать отдельный диск прямо в /tmp.

Но перед этим нужно понять, какая файловая система будет использоваться, узнать её UUID через lsblk -f и остановить процессы, которые активно работают с /tmp.

Упоротым софтом в моём случае была некая многопоточная конвертилка PDF-файлов, которая раздувала папку tmp до — я ебёшь! И пока она не сделает свои дела, за собой не уберёт.

Поэтому изобретают подобный велосипед.

Создаём mount unit /etc/systemd/system/tmp.mount:

[Unit]
Description=Mount a dedicated disk on /tmp
Before=local-fs.target

[Mount]
What=/dev/disk/by-uuid/<UUID>
Where=/tmp
Type=ext4
Options=defaults

[Install]
WantedBy=local-fs.target

Название файла не может быть любым: у нас есть путь /tmp, поэтому unit называется tmp.mount.

Если бы было /mnt/tmp/bashdays, то файл нужно было бы назвать mnt-tmp-bashdays.mount.

Ага, вот такие нюансы, иначе оно грязно выругается и нассыт тебе в глаз.

По юниту всё интуитивно понятно, расписывать не буду.

А потом, как обычно: сначала выставляем права в корне новой файловой системы, затем включаем unit и перезагружаемся. Делать это лучше из rescue-режима, когда /tmp не занят рабочими процессами.

sudo mkdir -p /mnt/new-tmp
sudo mount UUID=<UUID> /mnt/new-tmp
sudo chmod 1777 /mnt/new-tmp
sudo umount /mnt/new-tmp

sudo systemctl daemon-reload
sudo systemctl enable tmp.mount
sudo reboot

Права 1777 важны для временных директорий, чтобы все пользователи могли создавать файлы, но не удаляли чужие. Единичка — это sticky bit.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Права 1777 важны для временных директорий, чтобы все пользователи могли создавать файлы, но не удаляли чужие.

Проверяем:

findmnt /tmp
df -h /tmp
stat -c '%a %n' /tmp

Всё, дело в шляпе. Аналогично делается с папкой логов, но там есть свои нюансы, попозже расскажу.