Co stanie się z rzeczywistą zawartością / tmp, kiedy mój dysk twardy zostanie zamontowany?
Prawie nic. Są po prostu ukryte, niedostępne podczas normalnego przechodzenia przez system plików.
Czy możliwe jest wykonywanie operacji r / w na rzeczywistej zawartości / tmp, gdy dysk twardy jest zamontowany?
Tak. Procesy, które miały otwarte uchwyty plików w twoim „oryginale” /tmp
będą nadal mogły z nich korzystać. Możesz także „ponownie wyświetlić” gdzie indziej, łącząc się z /
innymi w innym miejscu.
# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp
Oto mały eksperyment, który możesz przeprowadzić, aby lepiej (mam nadzieję) poczuć to, co się dzieje.
Uwaga: Nie jest to próba bycia całkowicie poprawnym ani wyczerpujący opis tego, co się naprawdę dzieje. Powinien być jednak wystarczająco dokładny, aby dać Ci duży obraz.
Utworzyłem użytkownika wywoływanego me
na moim komputerze i losowy katalog w jego domu z plikiem:
me@home $ pwd
/home/me/tmp
me@home $ echo hello > some_file
me@home $ ls
some_file
me@home $ cat some_file
hello
W tym momencie nie ma nic niezwykłego - to tylko zwykły katalog ze zwykłym plikiem. Sesję pozostawiam otwartą taką, jaka jest, z jej cwd
wewnątrz tego katalogu testowego.
Jako root tworzę mały system plików i montuję go /home/me/tmp
.
root@home # dd if=/dev/zero of=./fs bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00467318 s, 2.2 GB/s
root@home # mkfs -t ext2 ./fs
mke2fs 1.42.12 (29-Aug-2014)
[... snip ...]
Writing superblocks and filesystem accounting information: done
root@home # mount ./fs /home/me/tmp
Następnie otwieram nowy terminal me
i rozglądam się:
me@home #2 $ cd tmp
me@home #2 $ ls
lost+found
me@home #2 $ cat some_file
cat: some_file: No such file or directory
me@home #2 $ echo bye bye > some_file
-su: some_file: Permission denied
Tak więc utworzonego przez nas pliku najwyraźniej nie ma. lost+found
Katalog wskazuje korzenia systemie plików ext. I straciłem uprawnienia do zapisu, więc najwyraźniej nie jest to oryginalny katalog.
Wróć do pierwszej me
sesji, zobaczmy, jak postrzega świat:
me@home $ echo something else > other_file
Nie ma problemu z pisaniem.
me@home $ cat some_file other_file
hello
something else
Oryginalny plik nadal tam jest, nowy plik utworzony bez problemu.
Co? Co się dzieje?
Pierwsza sesja weszła do katalogu, zanim została nałożona przez podłączenie do niego innego systemu plików przez root. Ta czynność montowania w ogóle nie wpływa na oryginalny system plików. Proces powłoki ma doskonale poprawny uchwyt do katalogu w oryginalnym systemie plików i może kontynuować z nim interakcję. To coś w rodzaju biega pod tym dywanie punkt montowania.
Druga sesja weszła do katalogu po złożeniu montowania. Widzi więc nowy, pusty system plików. I sysadmin wykasował uprawnienia, więc nie może użyć żądanego miejsca ... naprawmy to.
root@home # chown me:users /home/me/tmp
me@home #2 $ echo bye bye > some_file
me@home #2 $ ls
lost+found some_file
me@home #2 $ cat some_file
bye bye
Czy sesja 1 może uciec spod dywanu? (Robi się stęchły.)
Pewnie! Jeśli sesja 1 przesunie się w górę drzewa systemu plików poza wierzchowiec, straci ten uchwyt do wewnątrz i podąży za wierzchowcem, jak wszyscy inni.
me@home $ cd
me@home $ pwd
/home/me
me@home $ cd tmp
me@home $ cat some_file other_file
bye bye
cat: other_file: No such file or directory
Ten sam widok, co w sesji nr 2, wróciliśmy do normy.
Ale skąd wiesz, że pliki nie zniknęły? Nikt już nie patrzy!
To jeden z momentów, w których uchwyty do wiązania stają się przydatne. Pozwalają zamontować już zamontowany system plików w innym miejscu.
me@home $ mkdir ~/bind
root@home # mount -o bind /home/me /home/me/bind
(Tak, możesz podłączyć system plików „do siebie”. Fajna sztuczka, co?)
me@home $ ls bind/tmp
other_file some_file
me@home $ cat bind/tmp/*
something else
hello
Są więc naprawdę gotowi do działania. Po prostu nie są widoczne / dostępne w oryginalnym miejscu, mount ukrywa je przed normalnymi przeglądarkami katalogów.
Zachęcam do wspólnej zabawy, naprawdę nie jest to skomplikowane, gdy zrozumiesz „sztuczkę”, którą się gra. A kiedy już go masz, zajrzyj do unijnych systemów plików, aby uzyskać jeszcze więcej ciągnienia dywanów :-)
Jedna uwaga: podłączenie do /tmp
lub /var
(lub dowolnego z głównych katalogów systemu operacyjnego) naprawdę nie jest dobrym pomysłem po zakończeniu procesu rozruchu. Wiele aplikacji pozostawia stan w tych katalogach i może się poważnie zdezorientować, jeśli będziesz grać wokół nich.