Existuje jednoduchý příkaz, který vezme uzel zařízení disku jako vstup a řekne mi, kde (a zda) je tento disk připojen? Je možné získat bod připojení sám, abych ho mohl předat jinému příkazu?
Pracuji na živém systému Debian Squeeze s minimální instalací (v případě potřeby mohu nainstalovat další balíčky).
Přijatá odpověď:
V Linuxu můžete získat informace o přípojných bodech přímo z jádra v /proc/mounts
. mount
program zaznamenává podobné informace v /etc/mtab
. Cesty a možnosti se mohou lišit, například /etc/mtab
představuje co mount
předán jádru, zatímco /proc/mounts
zobrazuje data tak, jak jsou vidět uvnitř jádra. /proc/mounts
je vždy aktuální, zatímco /etc/mtab
nemusí být, pokud /etc
byl v určitém okamžiku pouze pro čtení, což spouštěcí skripty neočekávaly. Formát je podobný /etc/fstab
.
V obou souborech obsahuje první pole oddělené mezerami cestu k zařízení a druhé pole obsahuje bod připojení.
awk -v needle="$device_path" '$1==needle {print $2}' /proc/mounts
nebo pokud nemáte awk:
grep "^$device_path " /proc/mounts | cut -d ' ' -f 2
Existuje řada okrajových případů, kdy možná nedostanete to, co očekáváte. Pokud bylo zařízení připojeno jinou cestou v /dev
který označuje stejné zařízení, tímto způsobem si toho nevšimnete. V /proc/mounts
, držáky vazby jsou k nerozeznání od originálu. Může existovat více než jedna shoda, pokud přípojný bod zastíní jiný (toto je neobvyklé).
V /proc/self
nebo /proc/$pid
, existuje pro každý proces mount
soubor, který napodobuje globální soubor. Informace o připojení se mohou mezi procesy lišit, například kvůli chroot
. Existuje další soubor s názvem mountinfo
který má jiný formát a obsahuje více informací, zejména hlavní a vedlejší čísla zařízení. Z dokumentace:
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
Pokud tedy hledáte zařízení podle čísla, můžete to udělat takto:
awk -v dev="$major:minor" '$3==dev {print $5}'
awk -v dev="$(stat -L -c %t:%T /dev/block/something)" '$3==dev {print $5}'