На "клієнтських" машинах безпечним способом переміщення /tmpє перезавантаження. Під клієнтом я маю на увазі все, що запускає програми, в які розміщуються сокети /tmp, зокрема X-сервери та екран.
Новий, /tmpбезумовно, повинен мати правильні дозволи (1777), інакше не можна сподіватися на наявність робочої системи.
Бо /tmpви майже не можете скопіювати жодні файли. Це тому, що більшість часу програми, які розміщують речі, /tmpвідкривають файли. Якщо ви копіюєте файл, він копіює вміст, але у програм все ще відкриті старі файли. Можливо, вам вдасться натрапити на них за допомогою налагоджувача ( ptrace), але це буде набагато складніше, ніж перезавантаження, і з багатьма програмами все, що ви зробите, - це все-таки зламати їх.
Якщо у вас /tmpповно, і ви хочете перейти до нового живого, вам потрібно перезапустити всі програми, у яких відкриті файли. Оскільки це означає перезапуск X та сеансів на екрані, це не набагато краще, ніж перезавантаження.
Ви повинні мати можливість перемикатися на нові програми, але зберігати наявні відкриті файли на місці, використовуючи кріплення для з'єднання . (Принцип є здоровим, але я ніколи не намагався, тому можуть виникнути несподівані проблеми.) Ось спосіб це зробити в Linux.
- Зберігайте всі наявні файли, за
/tmpвинятком кількох вибраних вручну великих.
- Створіть
/tmp.new(режим 1777).
- Захист
/tmpіншим шляхом: mount --bind / /.root.only. Це необхідно, тому що наступний крок затінить /tmp. Можливо, існують різні реалізації монтажу об'єднання, які не потребують цього кроку.
- Зробіть з'єднання кріплення
/.root.only/tmpі /tmp.new, встановлене на /tmp. Цей спосіб нових файли , створені в /tmpбуде написано /tmp.new, але файли /.root.only/tmpтакож видно під /tmp. Одним з можливих варіантів є
UnionFS-запобіжник : unionfs-fuse /tmp.new:/.root.only/tmp /tmp.
Якщо ви не хочете запускати корінь монтажу об'єднання (наприклад, тому, що він недоступний на вашій платформі або через те, що це занадто багато проблем), принаймні не видаляйте старий каталог. Перемістіть його, щоб запущені програми продовжували використовувати старий каталог, а нові програми використовуватимуть новий. (Звичайно, нові програми не зможуть спілкуватися зі старими програмами через розетки або трубу, /tmpякщо ви не встановите TMPDIRабо іншим чином не скажете їм, де їх шукати.)
mv /tmp /tmp.old && mkdir /tmp