Esiste un semplice comando che accetta il nodo del dispositivo di un disco come input e mi dice dove (e se) quel disco è montato? È possibile ottenere il punto di montaggio da solo, così posso passarlo a un altro comando?
Sto lavorando su un sistema live Debian Squeeze con un'installazione minima (posso installare pacchetti extra se necessario).
Risposta accettata:
Sotto Linux, puoi ottenere informazioni sul punto di montaggio direttamente dal kernel in /proc/mounts
. Il mount
il programma registra informazioni simili in /etc/mtab
. I percorsi e le opzioni possono essere diversi, come /etc/mtab
rappresenta cosa mount
passato al kernel mentre /proc/mounts
mostra i dati come visti all'interno del kernel. /proc/mounts
è sempre aggiornato mentre /etc/mtab
potrebbe non essere se /etc
era di sola lettura a un certo punto che non era previsto dagli script di avvio. Il formato è simile a /etc/fstab
.
In entrambi i file, il primo campo separato da spazi bianchi contiene il percorso del dispositivo e il secondo campo contiene il punto di montaggio.
awk -v needle="$device_path" '$1==needle {print $2}' /proc/mounts
o se non hai awk:
grep "^$device_path " /proc/mounts | cut -d ' ' -f 2
Esistono numerosi casi limite in cui potresti non ottenere ciò che ti aspetti. Se il dispositivo è stato montato tramite un percorso diverso in /dev
che designa lo stesso dispositivo, non te ne accorgerai in questo modo. In /proc/mounts
, le cavalcature vincolanti sono indistinguibili dall'originale. Potrebbero esserci più corrispondenze se un punto di montaggio ne oscura un altro (questo è insolito).
In /proc/self
o /proc/$pid
, c'è un mounts
per processo file che imita il file globale. Le informazioni di montaggio possono variare tra i processi, ad esempio a causa di chroot
. C'è un file aggiuntivo chiamato mountinfo
che ha un formato diverso e include più informazioni, in particolare i numeri principali e secondari del dispositivo. Dalla documentazione:
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
Quindi, se stai cercando un dispositivo per numero, puoi farlo in questo modo:
awk -v dev="$major:minor" '$3==dev {print $5}'
awk -v dev="$(stat -L -c %t:%T /dev/block/something)" '$3==dev {print $5}'