Zamiast używać mount | grep
, chciałbym użyć mount -l -t bind
, ale to nie działa i -t none
pokazuje wszystkie wierzchowce.
źródło
Zamiast używać mount | grep
, chciałbym użyć mount -l -t bind
, ale to nie działa i -t none
pokazuje wszystkie wierzchowce.
Montowania powiązań nie są typem systemu plików ani parametrem podłączonego systemu plików; są parametrami operacji montowania . O ile mi wiadomo, następujące sekwencje poleceń prowadzą do zasadniczo identycznych stanów systemu, jeśli chodzi o jądro:
mount /dev/foo /mnt/one; mount --bind /mnt/one /mnt/two
mount /dev/foo /mnt/two; mount --bind /mnt/two /mnt/one
Jedynym sposobem, aby zapamiętać, które wierzchowce były łączeniem wierzchowców, jest dziennik pozostałych mount
poleceń /etc/mtab
. Operacja podłączenia powiązania jest wskazywana przez opcjębind
podłączenia (która powoduje, że typ systemu plików jest ignorowany). Ale nie ma opcji, aby wyświetlić listę tylko systemów plików zamontowanych z określonym zestawem opcji. Dlatego musisz wykonać własne filtrowanie.mount
mount | grep -E '[,(]bind[,)]'
</etc/mtab awk '$4 ~ /(^|,)bind(,|$)/'
Pamiętaj, że /etc/mtab
przydaje się to tylko wtedy, gdy jest to plik tekstowy obsługiwany przez mount
. Niektóre dystrybucje skonfigurowane /etc/mtab
jako dowiązanie symboliczne /proc/mounts
; /proc/mounts
jest w większości równoważny, /etc/mtab
ale ma kilka różnic, z których jedna nie śledzi montowań powiązań.
Jedną z informacji, które są zatrzymywane przez jądro, ale nie są pokazywane w /proc/mounts
, jest to, gdy punkt podłączenia pokazuje tylko część drzewa katalogów w zamontowanym systemie plików. W praktyce dzieje się tak głównie z oprawami bind:
mount --bind /mnt/one/sub /mnt/partial
W /proc/mounts
, wpisy dla /mnt/one
i /mnt/partial
mają to samo urządzenie, ten sam typ systemu plików i te same opcje. Informacje, które /mnt/partial
pokazują tylko tę część systemu plików, która jest zrootowana, /sub
są widoczne w informacjach o punkcie montowania na proces w /proc/$pid/mountinfo
(kolumna 4). Wpisy wyglądają tak:
12 34 56:78 / /mnt/one rw,relatime - ext3 /dev/foo rw,errors=remount-ro,data=ordered
12 34 56:78 /sub /mnt/partial rw,relatime - ext3 /dev/foo rw,errors=remount-ro,data=ordered
findmnt | fgrep [
jak wyjaśniono tutaj .mount --version
wykorzystujesz tebind
informacje/etc/mtab
? Korzystam z wersji 2.20.1 i sprawdziłem najnowsze źródła i w żadnym przypadku nie widzę zapisanych informacji o powiązaniach, które pozwoliłyby na grepbind
. Z drugiej strony, to, co zasugerowałem w mojej odpowiedzi , faktycznie wyświetla listę opraw montowanych utworzonych za pomocą,--bind
jak również przy użyciubind
opcji .</etc/mtab awk …
jest zgodny z POSIX (nie pamiętam, czy jest obsługiwany w Bourne). Sprawdź swoje fakty. Mogę potwierdzić, że/etc/mtab
mabind
opcję dla systemu plików zamontowanegomount --bind /source /target
na stabilnej wersji Debiana (mount z util-linux-ng 2.17.2).mount
i/etc/mtab
. Używasz stabilnej wersji Debiana, która ma starszą wersję util-linux-ng; Używam testów Debiana, który ma nowszą wersję, która nie wydaje się mieć ten sam/etc/mtab
problem, co jest być może dlatego @rozcietrzewiacz nie widzibind
w w/etc/mtab
razie jego dystrybucja jest również za pomocą nowszej wersji?findmnt
jako odpowiedź. Nawiasem mówiąc, działa to tylko wtedy, gdy katalog docelowy nie jest innym punktem montowania. Spróbuj na przykładsudo mount --bind / foo && findmnt | grep foo
Może to załatwi sprawę:
Przykład:
źródło
/
Na przykład, jeśli samo jest zamontowane na wiązaniu, dane wyjściowe nie mają wartości[...]
.Jądro po fakcie nie obsługuje mocowań łączenia innych niż normalne . Jedyne różnią się tym, co dzieje się podczas
mount
uruchamiania.Kiedy montujesz system plików (np. Z
mount -t ext4 /dev/sda1 /mnt
), jądro (nieco uproszczone) wykonuje trzy kroki:-t
lub użyjesz-t auto
mount
zgaduje typ dla ciebie i dostarcza zgadnięty typ do jądra)nodev
na przykład jest opcją w punkcie montowania, a nie w systemie plików. Możesz mieć podłączenie montowania znodev
jednym bez niego)Jeśli wykonasz podłączenie wiązania (np. Za pomocą
mount --bind /a /b
), dzieje się tak:(Pominę
mount --move
, bo to nie dotyczy pytania).Jest to dość podobne do sposobu tworzenia plików w systemie Linux:
Jeśli zrobisz twardy link, dzieje się tak:
Jak widać, utworzony plik i twardy link są nierozróżnialne:
Ale ponieważ można zidentyfikować wszystkie dowiązania twarde do pliku, porównując numery i-węzłów, można zidentyfikować wszystkie podłączenia do systemu plików, porównując główne: mniejsze liczby podłączeń.
Możesz to zrobić
findmnt -o TARGET,MAJ:MIN
bezpośrednio lub bezpośrednio/proc/self/mountinfo
( patrz dokumentacja jądra Linux, aby uzyskać więcej informacji ).Poniższy skrypt Pythona zawiera listę wszystkich podłączeń powiązań. Zakłada się, że najstarszym punktem podłączenia z najkrótszą ścieżką względną do katalogu głównego podłączonego systemu plików jest oryginalne podłączenie.
źródło
źródło
Jest to podobne do innej odpowiedzi findmnt, ale pozwala uniknąć problemu z formatowaniem.
Aby wyświetlić wszystkie submounty:
Aby wyświetlić wszystkie podzbiory systemów plików typu ext4:
Aby wyświetlić wszystkie wierzchowce z wyłączeniem podrzędnych:
Aby wyświetlić wszystkie podłączenia systemów plików typu ext4 z wyłączeniem podliczeń:
„-N” usuwa nagłówki, a „--list” usuwa wiersze formatu „drzewa”.
Testowane na odcinku Debian.
źródło