W systemie Linux informacje o punkcie montowania można uzyskać bezpośrednio z jądra /proc/mounts
. mount
Program zapisuje informacje w podobny /etc/mtab
. Ścieżki i opcje mogą być różne, ponieważ /etc/mtab
reprezentuje to, co mount
przekazano do jądra, podczas gdy /proc/mounts
pokazuje dane widoczne w jądrze. /proc/mounts
jest zawsze aktualny, /etc/mtab
ale może nie być, jeśli /etc
był tylko do odczytu w pewnym momencie, którego nie spodziewali się skrypty rozruchowe. Format jest podobny do /etc/fstab
.
W obu plikach pierwsze pole oddzielone spacjami zawiera ścieżkę urządzenia, a drugie pole zawiera punkt podłączenia.
awk -v needle="$device_path" '$1==needle {print $2}' /proc/mounts
lub jeśli nie masz awk:
grep "^$device_path " /proc/mounts | cut -d ' ' -f 2
Istnieje wiele przypadków, w których możesz nie otrzymać tego, czego oczekujesz. Jeśli urządzenie zostało zamontowane inną ścieżką /dev
oznaczającą to samo urządzenie, nie zauważysz tego w ten sposób. W /proc/mounts
oprawach bindowania nie można odróżnić od oryginału. Może być więcej niż jedno dopasowanie, jeśli punkt montowania ocienia inny (jest to niezwykłe).
W /proc/self
lub /proc/$pid
znajduje się mounts
plik na proces , który naśladuje plik globalny. Informacje o podłączeniu mogą się różnić między procesami, na przykład z powodu chroot
. Istnieje dodatkowy plik o nazwie, mountinfo
który ma inny format i zawiera więcej informacji, w szczególności numery główne i podrzędne urządzenia. Z dokumentacji :
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
(1) mount ID: unique identifier of the mount (may be reused after umount)
(2) parent ID: ID of parent (or of self for the top of the mount tree)
(3) major:minor: value of st_dev for files on filesystem
(4) root: root of the mount within the filesystem
(5) mount point: mount point relative to the process's root
(6) mount options: per mount options
(7) optional fields: zero or more fields of the form "tag[:value]"
(8) separator: marks the end of the optional fields
(9) filesystem type: name of filesystem of the form "type[.subtype]"
(10) mount source: filesystem specific information or "none"
(11) super options: per super block options
Jeśli więc szukasz urządzenia według numeru, możesz to zrobić w następujący sposób:
awk -v dev="$major:minor" '$3==dev {print $5}'
awk -v dev="$(stat -L -c %t:%T /dev/block/something)" '$3==dev {print $5}'
udisks
dowiązanie symboliczne (w / dev / disk / by-label / ...). Ale mogę rozwiązać do węzła urządzenia za pomocąreadlink -f
. Podoba mi się ten/proc/mounts
pomysł, myślę, że może być nieco bardziej niezawodny niż/etc/mtab
.mountinfo
. Zadzwoń,stat
aby uzyskać numery urządzeń (zobacz moją zaktualizowaną odpowiedź, zapomniałem wcześniej podać polecenie).-d " "
opcja dlacut
tegogrep
polecenia.findmnt
ilsblk
dedykowane polecenia, które wykonują dla ciebie ciężką pracę (bardziej solidnie)W systemie Linux możesz teraz użyć
findmnt
polecenia zutil-linux
(od wersji 2.18):Lub
lsblk
(również odutil-linux
, od 2.19):Ten jest także przydatny do znalezienia całego systemu plików zamontowanego na określonym urządzeniu (dysku lub partycji ...):
Aby uzyskać tylko punkt montowania:
Powyższe
findmnt
powraca ze statusem wyjścia z awarii, jeśli urządzenie nie jest zamontowane, nielsblk
.Więc:
źródło
mount
Polecenia bez argumentów spowoduje wyświetlenie wszystkich aktualnie zamontowanych systemów plików; możesz to zrobićgrep
dla dysku, który chcesz (lubgrep
/etc/mtab
, który jest plikmount
odczytuje informacje z):źródło
grep ${NODE} /etc/mtab | cut -d ' ' -f 2
powinienem to zrobić.grep ^"${NODE}[[:space:]]\+" /etc/mtab | cut -d ' ' -f 2"
jest znacznie mniej kruchy ...Tak. Możesz zobaczyć Pokazywanie tylko interesujących punktów montowania / Filtrowanie nieciekawych typów lub katalogów list, pod
/
którymi nie ma pod tym samym punktem montowania dla niektórych przykładowych zastosowań, ale poniżej znajduje się także krótki przegląd. Polecenie, o które pytasz, tofindmnt
(choćlsblk
może również służyć) :Teraz, jak widać,
/dev/sda1
jest zamontowany/esp
. Zastanawiam się, czy jest również montowany gdzie indziej?Aha. Widzę. Podfolder jest również
--bind
montowany na bootie. Dobrze...Nic. Co do cholery?
Ohhh ... Cóż, to miłe. Hmmm...
Och, tak, to naprawdę miłe.
Teraz odłóżmy sda1 tam, gdzie należy i spróbujmy jeszcze raz ...
Ale gdzie znalazłem to magiczne polecenie?
źródło
Nie znam czystego i prostego sposobu na wykrycie, czy
/dev
zamontowany jest węzeł urządzenia . Ale to właśnie mogę zaoferować. Obsługuje bezpośrednio montowane urządzenia (/dev/sda1
) i urządzenia montowane przez UUID (/dev/disk/by-uuid/aa4e7b08-6547-4b5a-85ad-094e9e1af74f
). Łamie się, jeśli nazwy urządzeń zawierają spacje.Funkcja zapisuje pozycję od
/proc/mounts
do stdout, jeśli zostanie znaleziona, a także ustawia status wyjścia na 0. W przeciwnym razie status wyjścia to 1.źródło
Po prostu uruchom poniższe polecenie:
źródło