Jak (bezpiecznie) przenieść / tmp na inny wolumin?

17

Dzisiaj /tmpkatalog został wypełniony na maszynie w pracy. Problem polegał na tym, że nie był zbyt duży na partycji root. Aby to naprawić, współpracownik utworzył /new/tmpkatalog gdzie indziej, skopiował całą zawartość do nowego katalogu, usunął oryginał /tmpi utworzył dowiązanie symboliczne /tmp -> /new/tmp.

Kiedy kopiował pliki (tak naprawdę to był ktoś inny, nie ja!), Nie korzystał z niego, -awięc właścicielem każdego pliku /new/tmpbył root. Co więcej, nie ustawił uprawnień do /new/tmpkatalogu, więc był to domyślny numer 0755. Nie spowodowało to końca problemów, a nawet trybu poprawiania, a bity własności nie przywróciły komputera do akceptowalnego stanu. Skończyło się na tym, że musiałem nuke'ować wszystko /tmpi uruchomić ponownie.

/tmpKatalog zawierał różne gniazda i rur i etażerka, ponieważ kilka osób uruchomić Gnome poprzez VNC i używam screenktóry ma swoje fajki.

Czy istnieje bezpieczny sposób na przeniesienie /tmpkatalogu do innego woluminu w działającym systemie? Nie jestem pewien, co bym zrobił, żeby wszystko działało. Szczególnie ciekawi mnie, co dzieje się z rurami i gniazdami.

Greg Hewgill
źródło

Odpowiedzi:

20

Na komputerach „klienckich” bezpiecznym sposobem na przejście /tmpjest restart. Tutaj, przez klienta, mam na myśli wszystko, co uruchamia programy wkładające gniazda /tmp, w szczególności serwery X i screen.

Nowy /tmpzdecydowanie musi mieć odpowiednie uprawnienia (1777), w przeciwnym razie nie możesz mieć nadziei, że masz działający system.

Ponieważ /tmppraktycznie nie można skopiować żadnych plików. To dlatego, że przez większość czasu programy, które umieszczają różne rzeczy, /tmpotwierają pliki. Jeśli skopiujesz plik, spowoduje to skopiowanie zawartości, ale programy nadal będą mieć otwarte stare pliki. Możesz być w stanie dotrzeć do nich za pomocą debuggera ( ptrace), ale będzie to o wiele bardziej skomplikowane niż ponowne uruchomienie, a przy wielu programach wszystko co zrobisz, to i tak je zawiesisz.

Jeśli twój /tmpjest pełny i chcesz przełączyć się na nowy na żywo, musisz zrestartować wszystkie programy, które mają tam otwarte pliki. Ponieważ oznacza to ponowne uruchomienie sesji X i screena, nie jest to dużo lepsze niż ponowne uruchomienie.

Powinieneś być w stanie przełączyć się na nowe programy, ale utrzymywać istniejące otwarte pliki na miejscu za pomocą podłączenia unii . (Zasada jest dobra, ale nigdy nie próbowałem, więc mogą wystąpić nieoczekiwane problemy.) Oto sposób na zrobienie tego w systemie Linux.

  1. Zachowaj wszystkie istniejące pliki z /tmpwyjątkiem kilku ręcznie wybranych dużych.
  2. Utwórz /tmp.new(tryb 1777).
  3. Wystawiać /tmpna inną ścieżkę: mount --bind / /.root.only. Jest to konieczne, ponieważ następny krok będzie cień /tmp. Mogą istnieć różne implementacje podłączenia unii, które nie wymagają tego kroku.
  4. Zrób łącznik montowany z /.root.only/tmpi /tmp.newzamontowany na /tmp. W ten sposób nowe pliki utworzone w /tmpzostaną zapisane /tmp.new, ale pliki w /.root.only/tmpsą również widoczne pod /tmp. Jedną z możliwości jest unionfs bezpiecznik : unionfs-fuse /tmp.new:/.root.only/tmp /tmp.

Jeśli nie chcesz korzystać z głównego katalogu montowania unii (np. Ponieważ nie jest on dostępny na twojej platformie lub jest to zbyt duży problem), przynajmniej nie usuwaj starego katalogu. Przenieś go, aby działające programy nadal korzystały ze starego katalogu, a nowe programy będą korzystać z nowego. (Oczywiście nowe programy nie będą mogły komunikować się ze starymi programami przez gniazda lub potoki, /tmpchyba że ustawisz TMPDIRlub w inny sposób powiesz im, gdzie mają szukać).

mv /tmp /tmp.old && mkdir /tmp
Gilles „SO- przestań być zły”
źródło
Czy mógłbyś wyjaśnić, jak sprawić, by nowa lokalizacja / tmp utrzymywała się przez ponowne uruchomienie?
FoxDeploy,
@ FoxDeploy Wstaw dla tego wpis/etc/fstab
Gilles „SO- przestań być zły”
Czy mógłbyś rozwinąć tę kwestię?
FoxDeploy
@ FoxDeploy Nie jestem pewien, o co tu pytasz. Jeśli chcesz /tmpbyć w innym miejscu niż główny system plików, wypisz go /etc/fstab, podobnie jak każdy inny system plików, który chcesz zamontować podczas uruchamiania. Jeśli nie o to pytasz, powinieneś zadać nowe pytanie z wystarczającym kontekstem.
Gilles „SO- przestań być zły”