Як (безпечно) перемістити / tmp до іншого обсягу?


17

Сьогодні /tmpкаталог заповнився на машині під час роботи. Проблема полягала в тому, що він був на кореневому розділі, який був не дуже великий. Для того, щоб виправити це, співробітник створив /new/tmpкаталог в іншому місці, скопіював увесь вміст у новий каталог, видалив оригінал /tmpта зробив симпосилання /tmp -> /new/tmp.

Коли він копіював файли (насправді це був хтось інший, а не я!), Він не використовував -aтак, щоб власник кожного файлу /new/tmpбув root. Крім того, він не встановив дозволи для /new/tmpкаталогу, тому це було за замовчуванням 0755. Це не спричинило жодних проблем і навіть налаштування режиму та біти власності не змогли відновити машину до прийнятного робочого стану. Мені в кінцевому підсумку довелося все запустити /tmpі перезавантажити.

/tmpКаталог містить різні сокети і труби і етажерку, так як купа людей бігти Gnome через VNC, і я використовую , screenякий має свої власні трубки.

Чи є безпечний спосіб переміщення /tmpкаталогу на інший об'єм у запущеній системі? Я не впевнений, що б насправді зробив, щоб все працювало. Мені особливо цікаво, що відбувається з трубами та розетками.

Відповіді:


20

На "клієнтських" машинах безпечним способом переміщення /tmpє перезавантаження. Під клієнтом я маю на увазі все, що запускає програми, в які розміщуються сокети /tmp, зокрема X-сервери та екран.

Новий, /tmpбезумовно, повинен мати правильні дозволи (1777), інакше не можна сподіватися на наявність робочої системи.

Бо /tmpви майже не можете скопіювати жодні файли. Це тому, що більшість часу програми, які розміщують речі, /tmpвідкривають файли. Якщо ви копіюєте файл, він копіює вміст, але у програм все ще відкриті старі файли. Можливо, вам вдасться натрапити на них за допомогою налагоджувача ( ptrace), але це буде набагато складніше, ніж перезавантаження, і з багатьма програмами все, що ви зробите, - це все-таки зламати їх.

Якщо у вас /tmpповно, і ви хочете перейти до нового живого, вам потрібно перезапустити всі програми, у яких відкриті файли. Оскільки це означає перезапуск X та сеансів на екрані, це не набагато краще, ніж перезавантаження.

Ви повинні мати можливість перемикатися на нові програми, але зберігати наявні відкриті файли на місці, використовуючи кріплення для з'єднання . (Принцип є здоровим, але я ніколи не намагався, тому можуть виникнути несподівані проблеми.) Ось спосіб це зробити в Linux.

  1. Зберігайте всі наявні файли, за /tmpвинятком кількох вибраних вручну великих.
  2. Створіть /tmp.new(режим 1777).
  3. Захист /tmpіншим шляхом: mount --bind / /.root.only. Це необхідно, тому що наступний крок затінить /tmp. Можливо, існують різні реалізації монтажу об'єднання, які не потребують цього кроку.
  4. Зробіть з'єднання кріплення /.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

Не хотіли б пояснити, як зробити так, щоб нове місцезнаходження / tmp зберігалося за допомогою перезавантаження?
FoxDeploy

@FoxDeploy Помістіть заявку на це/etc/fstab
Жил "SO- перестаньте бути зла"

Чи могли б ви це детальніше розробити?
FoxDeploy

@FoxDeploy Я не впевнений, що ти тут питаєш. Якщо ви хочете /tmpбути десь іншою, ніж коренева файлова система, перелічіть її /etc/fstab, як і будь-яку іншу файлову систему, яку ви хочете встановити під час завантаження. Якщо ви це не запитуєте, вам слід задати нове запитання з достатньою кількістю контексту.
Жиль "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.