Come posso ottenere il percorso di montaggio di un dispositivo USB su OSX?


58

Ho uno script di backup che esegue il backup di alcuni dati su un dispositivo USB. Il problema che ho è che a volte OSX cambia il percorso di montaggio previsto. Ad esempio se un file è bloccato sotto il percorso di montaggio previsto, OSX lo monta su un altro percorso. Un dispositivo USB chiamato 'BACKUP' può essere montato su / Volumes / BACKUP-1 invece di / Volumes / BACKUP.

C'è un modo per scoprire il percorso di montaggio corrente di un dispositivo USB nel terminale OSX? Qualcosa come 'mount_path BACKUP' (comando falso) che restituirebbe '/ Volumes / BACKUP-1' o niente se il dispositivo non fosse montato?

Risposte:


68

I seguenti comandi mostrano informazioni sui volumi montati:

  • Il noto Unix mount, che mostra ad esempio /dev/disk5s3montato a/Volumes/Foo
  • diskutil list mostra una panoramica di tutti i dischi e volumi
  • diskutil info /dev/disk5s3mostra informazioni su quel volume, incluso un Volume UUIDche può essere usato per identificare in modo univoco quel volume.

È possibile eseguire una query diskutil infoutilizzando l'UUID del volume:

$ diskutil info DEC8759E-F77D-3EAE-B3EB-B6438F1AA428 | grep 'Mount Point'
   Mount Point:              /Volumes/DroboOne

Esempio di output del comando sul mio sistema:

$ mount
/dev/disk1 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
localhost:/bNqIvVr1ZdFBdf19Io81Q4 on /Volumes/MobileBackups (mtmfs, nosuid, read-only, nobrowse)
/dev/disk4 on /Volumes/MyBook (hfs, local, nodev, nosuid, journaled)
/dev/disk5s3 on /Volumes/DroboOne (hfs, local, nodev, nosuid, journaled, noowners)
/dev/disk7s3 on /Volumes/DroboTwo (hfs, local, nodev, nosuid, journaled, noowners)
/dev/disk6s3 on /Volumes/DroboThree (hfs, local, nodev, nosuid, journaled, noowners)

$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *256.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:          Apple_CoreStorage                         240.0 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Servus10 HD            *239.7 GB   disk1
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *3.0 TB     disk2
   1:                        EFI                         209.7 MB   disk2s1
   2:          Apple_CoreStorage                         3.0 TB     disk2s2
   3:                 Apple_Boot Boot OS X               134.2 MB   disk2s3
/dev/disk4
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS MyBook                 *3.0 TB     disk4
/dev/disk5
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        *2.2 TB     disk5
   1:        Apple_partition_map                         32.3 KB    disk5s1
   2:                  Apple_HFS DroboOne                2.2 TB     disk5s3
/dev/disk6
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        *2.2 TB     disk6
   1:        Apple_partition_map                         32.3 KB    disk6s1
   2:                  Apple_HFS DroboThree              2.2 TB     disk6s3
/dev/disk7
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        *2.2 TB     disk7
   1:        Apple_partition_map                         32.3 KB    disk7s1
   2:                  Apple_HFS DroboTwo                2.2 TB     disk7s3

$ diskutil info /dev/disk5s3
   Device Identifier:        disk5s3
   Device Node:              /dev/disk5s3
   Part of Whole:            disk5
   Device / Media Name:      Untitled

   Volume Name:              DroboOne
   Escaped with Unicode:     DroboOne

   Mounted:                  Yes
   Mount Point:              /Volumes/DroboOne
   Escaped with Unicode:     /Volumes/DroboOne

   File System Personality:  Journaled HFS+
   Type (Bundle):            hfs
   Name (User Visible):      Mac OS Extended (Journaled)
   Journal:                  Journal size 172032 KB at offset 0x4001000
   Owners:                   Disabled

   Partition Type:           Apple_HFS
   OS Can Be Installed:      No
   Media Type:               Generic
   Protocol:                 FireWire
   SMART Status:             Not Supported
   Volume UUID:              DEC8759E-F77D-3EAE-B3EB-B6438F1AA428

   Total Size:               2.2 TB (2198888927232 Bytes) (exactly 4294704936 512-Byte-Blocks)
   Volume Free Space:        169.4 GB (169412173824 Bytes) (exactly 330883152 512-Byte-Blocks)
   Device Block Size:        512 Bytes

   Read-Only Media:          No
   Read-Only Volume:         No
   Ejectable:                Yes

   Whole:                    No
   Internal:                 No

Speravo di evitare di dover usare quei comandi e di analizzarmi in questo modo :) Ma se non c'è altro modo, conosci qualche funzione bash che fa questo per te?
xastor,

@xastor Aggiunte informazioni rilevanti. man diskutilavrebbe aiutato.
Daniel Beck

Grazie, ho scritto una sceneggiatura ora e funziona. Speravo che ci fosse un altro modo, avrei dovuto menzionarlo nella domanda. Ad esempio, cosa succede su un sistema OSX con un'altra lingua? Non riesco a riprodurre "Mount Volume" su un sistema francese, suppongo ...
xastor,

@xastor diskutilnon è localizzato.
Daniel Beck

1
Questa è una soluzione affidabile quindi. Grazie!
xastor,

10

Che dire di questo comando:

df -lH | grep "Filesystem"; df -lH | grep "/Volumes/*"

Nella colonna "Montato su" ottieni tutti i punti di montaggio di tutti i dispositivi montati "/Volumes", che nel mio caso sono quasi sempre dispositivi USB ;-)

I grepcomandi sostanzialmente saltano il disco rigido su cui è montato "/".

Nel terminale del mio OSX Snow Leopard, lo uso per una rapida panoramica dei punti di montaggio dei miei dispositivi USB attualmente collegati. Se sei interessato solo ai Mount Point e non a tutti gli altri parametri come UUID ecc., Questo sarebbe secondo me il modo più diretto piuttosto che "diskutil"con tutte le sue informazioni.


2

Lo recupero in una variabile:

media=\`df | grep "media" | awk '{print $6}'\`

o

media=$(df | awk '/media/ {print $6}')

Il dfcomando elenca le partizioni, l'output risultante viene reindirizzato come input al comando grep che filtra e mantiene solo le righe contenenti la parola media, che viene quindi reindirizzato al awkcomando che mantiene solo la sesta colonna del suo input di una riga.


La seconda forma dovrebbe essere molto preferita, ma non è ovvio come passare nella /media/regex parametrizzata. Prova media=$(df | awk -v regex="$regex" '$1 ~ regex { print $6 }')a passare la variabile shell $regexcome oggetto da cercare.
triplo

1

Solo il buon vecchio diskutil. Questo non è Linux, dove probabilmente puoi sbirciare in / sys o qualcosa del genere.

diskutil info "$VolumeName" | grep "Mount Point" | tr " " "\n" | tail -1

0

Vorrei solo usare fstab per questo. C'è un thread su questo argomento qui su Super User: Mac Lion: fstab è deprecato. quindi cosa lo sostituisce per impedire il montaggio di una partizione?


1
E come useresti fstabesattamente per questo?
Daniel Beck

Prendendo l'UUId dell'unità USB, creando un mount point e consegnandolo a / etc / fstab. Ogni volta che viene collegata la suddetta unità USB, verrà montata su quel punto di montaggio, riconosciuto dal suo UUID.
dag729,

Si noti che il problema dell'utente deriva dal punto di montaggio predefinito già in uso a causa.
Daniel Beck

Questo è ciò che intendevo: dare al sistema operativo un punto di montaggio usando / etc / fstab. Da quel momento in poi, il sistema leggerà / etc / fstab, scoprirà che esiste un UUID con un mount point associato e lo utilizzerà invece di quello predefinito.
dag729,

0

Ho finito per usare questo script bash:

#!/bin/sh
#
# Retrieves the mount point of an OSX volume name or UUID.
# @param $1 Name of the volume or UUID of the volume.
# @return returns the mount path or an empty string if the volume is not mounted. 
#
diskutil info $1 | grep 'Mount Point' | cut -d : -f 2 | sed 's/^ *//g' | sed 's/ *$//g';

Era lo scorso settembre, e nessuno lo ha ancora commentato? il tuo 'Mount Point' DOVREBBE invece essere 'Device Node' se ti aspetti che questo script faccia quello che dicono i commenti.

1
@Blakat Il nodo del dispositivo non è quello richiesto dall'OP. Il punto di montaggio è /Volumes/…, che è ciò di cui tutti parlavano se leggevo correttamente questa domanda.
Slhck,

Se si utilizza sedcomunque, il grepe il cutsono inutili ; diskutil info "$1" | sed -n '/^ *Mount Point: */!d;s///;s/ *$//p'
triplo

0

Questo è quello che uso nei miei script di shell su OS X

df | awk '{print $6}' | grep -Ex "/Volumes/myvolume"

Puoi aggiungere qualche frase per spiegare come funziona? Grazie.
fixer1234

Questo è un modo rotatorio per dire df | awk '$6 == "/Volumes/myvolume" { print $6 }'cioè stampare il percorso del volume se è esattamente quello previsto. La grep -Ebandiera qui è superflua ed grepè inutile perché Awk sa già abbastanza bene come abbinare un'espressione regolare.
tripleee

Un comando più utile sarebbe probabilmente grep per il volume , prima di stampare solo il sesto campo, o meglio ancora modificare il primo $6a $1nel mio commento precedente.
triplo

-1

Questo potrebbe funzionare meglio:

df -lH | grep -E "*putinyourvolumelabel*$" | awk '{print $1}''

6
Perché potrebbe funzionare meglio?
bertieb,

Dennis, benvenuto in Super User. Un paio di altre risposte non sono buoni esempi, ma l'obiettivo delle risposte è educare piuttosto che fornire semplicemente il codice taglia e incolla. Non sono un programmatore, quindi non riesco a capire quanto possa essere buona la tua soluzione, ma sospetto che il commento di bertieb, e forse il downvote, vadano al fatto che si tratta solo di un codice inspiegabile, piuttosto che alla qualità della soluzione. Puoi aggiungere qualche frase per spiegare cosa fa questo e cosa lo rende una soluzione migliore di qualsiasi cosa tu stia confrontando? Grazie.
fixer1234,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.