Jak uzyskać pełną i dokładną listę zamontowanych systemów plików w systemie Linux?

150

Zwykle mountsprawdzam, które systemy plików są zamontowane. Wiem też, że jest jakiś związek między mounta /etc/mtab, ale nie jestem pewien co do szczegółów. Po przeczytaniu Jak sprawdzić, czy / proc / jest zamontowany , coraz bardziej się mylę.

Moje pytanie brzmi: jak uzyskać najbardziej precyzyjną listę zamontowanych systemów plików? Czy powinienem po prostu użyć mountlub przeczytać zawartość /etc/mtablub zawartość /proc/mounts? Co dałoby najbardziej wiarygodny wynik?

Xanpeng
źródło
3
Powinieneś także przeczytać zaakceptowaną odpowiedź na to pytanie: unix.stackexchange.com/questions/12040/…
nozimica
Nie mogę pomóc w linkowaniu do Czym jest / etc / mtab w Linuksie? ponieważ obejmuje szczegóły inne niż Linux, których nie daje żadna z odpowiedzi tutaj.
Weijun Zhou

Odpowiedzi:

140

Ostateczna lista zamontowanych systemów plików znajduje się w /proc/mounts.

Jeśli masz w systemie dowolną formę kontenerów, /proc/mountswymień tylko te systemy plików, które znajdują się w twoim obecnym kontenerze. Na przykład, w chroot , /proc/mountswymienia tylko te systemy plików, których punkt montowania jest w chroot. ( Istnieją sposoby na ucieczkę od chroot, umysł. )

Jest też lista zamontowanych systemów plików /etc/mtab. Ta lista jest obsługiwana przez polecenia mounti umount. Oznacza to, że jeśli nie użyjesz tych poleceń (co jest dość rzadkie), twoje działanie (zamontowanie lub odmontowanie) nie zostanie zarejestrowane. W praktyce głównie w chroot znajdziesz /etc/mtabpliki, które różnią się znacznie od stanu systemu. Również wierzchowce wykonywane w chroot będą odzwierciedlone w chroot, /etc/mtabale nie w main /etc/mtab. Działania wykonywane /etc/mtabw systemie plików tylko do odczytu również tam nie są rejestrowane.

Powodem, dla którego czasami chcesz konsultować się /etc/mtabprzed lub w dodatku, /proc/mountsjest to, że ponieważ ma on dostęp do wiersza polecenia montowania, czasami jest w stanie przedstawić informacje w sposób łatwiejszy do zrozumienia; na przykład widzisz opcje montowania zgodnie z żądaniem (podczas gdy /proc/mountswyświetla również mountwartości domyślne jądra i), a montowania powiązań pojawiają się jako takie w /etc/mtab.

Gilles
źródło
1
Po co mountutrzymywać, /etc/mtabjeśli nie można na nim polegać? Czy nie byłoby lepiej, gdyby zamiast tego mountzaprezentowano informacje /proc/mounts?
Piotr Dobrogost
2
@PiotrDobrogost /etc/mtabmoże rejestrować informacje, których jądro nie śledzi, takie jak pierwotnie żądane opcje, i przypisywać podłączenia, które pojawiają się jako takie, a nie jako duplikaty wpisów dla urządzeń. Niemniej jednak wiele dystrybucji zmierza w kierunku utworzenia /etc/mtabdowiązania symbolicznego /proc/mounts.
Gilles
3
Niemniej jednak wiele dystrybucji zmierza w kierunku utworzenia /etc/mtabdowiązania symbolicznego /proc/mounts. Dobrze słyszeć - dodanie tych informacji do odpowiedzi sprawi, że będzie jeszcze lepiej. Czy uważasz, że śledzenie żądanych opcji przez jądro byłoby wykonalne i korzystne?
Piotr Dobrogost
2
Zauważ, że będziesz musiał usunąć zawartość / proc / mounts. Jak opisano na stronie getmntent (3), spacja (\ 040), tabulator (\ 011), nowa linia (\ 012) i ukośnik odwrotny (\ 134) muszą być obsługiwane specjalnie. Zwłaszcza jeśli włączone są podłączenia użytkownika, musisz być bardzo ostrożny podczas pracy z tymi ścieżkami.
Eric
2
Zobacz także inną odpowiedź dotyczącą używania polecenia, findmntktóra jest preferowanym sposobem od 2010 roku i prawdopodobnie jedynym bezpiecznym sposobem w najbliższej przyszłości, gdy przestrzenie nazw montowania będą powszechne.
Marki555
68

Od wersji 2.18 (lipiec 2010) util-linux zawiera narzędzie, które pozwala wyświetlić listę aktualnie podłączonych systemów plików:

findmnt

Możesz przełączać się z domyślnego widoku drzewa na widok listy za pomocą -l, definiować kolumny wyjściowe za pomocą -o(podobnie do lsblk), filtrować wyniki na podstawie typu systemu plików za pomocą -titp ...

findmnt -lo źródło, cel, fstype, etykieta, opcje, używane -t ext4
SOURCE    TARGET      FSTYPE LABEL OPTIONS                           USED
/dev/sda1 /           ext4   ARCH  rw,noatime,discard,data=ordered  17.6G
/dev/sdb2 /media/DATA ext4   DATA  rw,noatime,discard,data=ordered    44M

Aby uzyskać więcej informacji, przeczytaj manstronę (i findmnt --helpuzyskaj listę dostępnych kolumn)

don_crissti
źródło
33

Może dlatego, że minęło 5 lat od odpowiedzi na to pytanie, wiele się zmieniło. cat /proc/mountsTworzy wiele informacji nie zależy. Dzisiaj, według IMHO, jest to najlepsze rozwiązanie.

df -h --output=source,target

kiedy czytasz strony podręcznika, możesz robić różne opcje, ale właśnie to. Na przykład, aby jeszcze bardziej wyczyścić wyniki, możesz wykluczyć typy plików „tmpfs” za pomocą tego polecenia:

df -hx tmpfs --output=source,target

df działa na poziomie systemu plików, a nie na poziomie pliku.

Powyższe polecenia obejmują również podłączenia sieciowe.

Aby zobaczyć trochę więcej informacji, użyj tego:

df -hT

UWAGA W przypadku wolno montowanych połączeń sieciowych może to potrwać kilka minut!

Jeśli nie masz lub nie dbasz o zamontowane połączenia sieciowe (i masz uprawnienia roota), jest to jeszcze lepsze:

sudo lsblk -f
Stóg
źródło
Nie musisz być rootem, ale niektóre pola / kolumny (takie jak Etykieta) będą zawierały dane zerowe, co może być nadal w porządku, ponieważ pytania chcą wiedzieć, jakie systemy plików są zamontowane.
Rick,
Ubuntu. Jednak właśnie odkryłem „findmnt”, który nie używa roota i zawiera listę systemów plików zamontowanych w sieci. Myślałem o zredagowaniu mojej odpowiedzi, aby uwzględnić tę wiedzę.
Rick
:-) Zmęczyłem się oddaniem głosu na twoją odpowiedź, ale nie mogę, dopóki nie będę mieć przedstawiciela 15+
Rick
1
Przy okazji, jeśli próbujesz używać --outputczegoś takiego jak Ubuntu 12, który nie akceptuje tych opcji, sprawdź odpowiedź don_crissti findmntponiżej, która to robi.
Mat Schaffer
findmntwydaje się, że potrzebuje wyższych możliwości (testowane z rootem; root ma wszystkie możliwości) do wyświetlania etykiet.
ctrl-alt-delor
23

Przez większość czasu mountjest to najwygodniejsza metoda. Aby uzyskać pełną i dokładną listę aktualnie zamontowanych systemów plików, powinieneś przeczytać zawartość /proc/mounts(np. Za pomocą cat /proc/mounts).

Na przykład, jeśli montowanie /readwrite nie powiodło się, a następnie zostało zamontowane tylko do odczytu jako awaryjne, /etc/mtab(z którego mountpolecenie odczytuje, aby powiedzieć, co jest zamontowane, i zapisuje do - jeśli to możliwe - kiedy zmienia to, co zostało zamontowane) nie zostanie zaktualizowane aby odzwierciedlić to /(co zawiera /etc/mtab) jest obecnie montowane tylko do odczytu. W tej sytuacji uruchomienie mountzazwyczaj mówi (niepoprawnie), że /został zamontowany tryb zapisu do odczytu.

W normalnych warunkach (tzn. Gdy system plików, który go zawiera, może zostać zapisany), /etc/mtabzawiera listę aktualnie zamontowanych systemów plików. Nie należy tego mylić /etc/fstab, który zawiera listę systemów plików, które powinny zostać zamontowane automatycznie podczas uruchamiania systemu.

Oczywiście, jeśli /procwirtualny system plików sam nie jest zamontowany, nie można odczytać żadnego z wirtualnych plików, w tym /proc/mounts. Jest to bardzo rzadkie. W tej sytuacji mountjest to prawdopodobnie najlepsza opcja, aby zobaczyć, co jest zamontowane.

Eliah Kagan
źródło