Wie kann ich den Mount-Pfad eines USB-Geräts unter OSX ermitteln?

58

Ich habe ein Sicherungsskript, das einige Daten auf einem USB-Gerät sichert. Das Problem, das ich habe, ist, dass OSX manchmal den erwarteten Bereitstellungspfad ändert. Wenn beispielsweise eine Datei unter dem erwarteten Mount-Pfad gesperrt ist, wird sie von OSX unter einem anderen Pfad gemountet. Ein USB-Gerät mit dem Namen 'BACKUP' kann unter / Volumes / BACKUP-1 anstelle von / Volumes / BACKUP eingehängt werden.

Gibt es eine Möglichkeit, den aktuellen Bereitstellungspfad eines USB-Geräts im OSX-Terminal herauszufinden? So etwas wie 'mount_path BACKUP' (Befehl ist falsch), der dann '/ Volumes / BACKUP-1' oder nichts zurückgibt, wenn das Gerät nicht gemountet ist?

xastor
quelle

Antworten:

67

Die folgenden Befehle zeigen Informationen zu bereitgestellten Volumes an:

  • Das bekannte Unix mountzeigt sich zB /dev/disk5s3montiert an/Volumes/Foo
  • diskutil list zeigt eine Übersicht aller Festplatten und Volumes
  • diskutil info /dev/disk5s3Zeigt Informationen zu diesem Volume an, einschließlich eines Volume UUID, mit dem dieses Volume eindeutig identifiziert werden kann.

Sie können diskutil infomithilfe der UUID des Volumes abfragen :

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

Beispielbefehlsausgabe auf meinem System:

$ 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
Daniel Beck
quelle
Ich hatte gehofft, dass ich diese Befehle nicht verwenden und mich durch diese hindurcharbeiten muss :) Aber wenn es keinen anderen Weg gibt, kennen Sie irgendwelche Bash-Funktionen, die dies für Sie tun?
Xastor
@xastor Relevante Informationen hinzugefügt. man diskutilhätte geholfen.
Daniel Beck
Danke, ich habe jetzt ein Skript geschrieben und es funktioniert. Ich hatte gehofft, dass es einen anderen Weg gibt, ich hätte das in der Frage erwähnen sollen. Was passiert beispielsweise auf einem OSX-System mit einer anderen Sprache? Ich kann 'Mount Volume' auf einem französischen System nicht
lesen,
@xastor diskutilist nicht lokalisiert.
Daniel Beck
1
Dies ist dann eine zuverlässige Lösung. Danke!
Xastor
10

Was ist mit diesem Befehl:

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

In der Spalte "Mounted on" werden alle Mount Points aller Geräte angezeigt "/Volumes", bei denen es sich in meinem Fall fast immer um USB-Geräte handelt ;-)

Die grepBefehle überspringen im Wesentlichen die Festplatte, auf der sich das Laufwerk befindet "/".

Im Terminal meines OSX Snow Leopard verwende ich es, um einen schnellen Überblick über die Mount-Punkte meiner aktuell angeschlossenen USB-Geräte zu erhalten. Wenn Sie sich nur für Mount Points und nicht für alle anderen Parameter wie UUID usw. interessieren, ist dies meiner Meinung nach der einfachere Weg als "diskutil"mit all seinen Informationen.

Mallin
quelle
2

Ich rufe es in einer Variablen ab:

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

oder

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

Der dfBefehl listet die Partitionen auf, die resultierende Ausgabe wird als Eingabe an den Befehl grep weitergeleitet, der nur die Zeilen filtert und aufbewahrt, die das Wort media enthalten, und der dann an den awkBefehl weitergeleitet wird, der nur die sechste Spalte seiner einzeiligen Eingabe enthält.

Stephane
quelle
Die zweite Form sollte sehr bevorzugt werden, aber es ist nicht offensichtlich, wie man den /media/parametrisierten regulären Ausdruck übergibt. Versuchen Sie media=$(df | awk -v regex="$regex" '$1 ~ regex { print $6 }'), die Shell-Variable $regexals Suchkriterium anzugeben.
Tripleee
1

Nur das gute alte diskutil. Dies ist nicht Linux, wo Sie wahrscheinlich in / sys oder so reinschauen können.

diskutil info "$VolumeName" | grep "Mount Point" | tr " " "\n" | tail -1
Haotian Yang
quelle
0

Ich würde dafür einfach fstab verwenden. Es gibt einen Thread zu diesem Thema hier auf Super User: Mac Lion: fstab ist veraltet. Was ersetzt es also, um die Montage einer Partition zu verhindern?

dag729
quelle
1
Und wie würden Sie fstabdas genau nutzen?
Daniel Beck
Nehmen Sie die UUId des USB-Laufwerks, erstellen Sie einen Einhängepunkt und geben Sie alles an / etc / fstab weiter. Jedes Mal, wenn das oben genannte USB-Laufwerk angeschlossen ist, wird es an diesem Bereitstellungspunkt bereitgestellt, der von der UUID erkannt wird.
dag729
Beachten Sie, dass das Problem des Benutzers auf den bereits verwendeten Standardeinhängepunkt zurückzuführen ist.
Daniel Beck
Das habe ich gemeint: Geben Sie dem Betriebssystem einen Mount-Punkt mit / etc / fstab. Von diesem Zeitpunkt an liest das System / etc / fstab, stellt fest, dass eine UUID mit einem zugeordneten Mount-Punkt vorhanden ist, und verwendet diese anstelle der Standard-ID.
dag729
0

Am Ende habe ich dieses Bash-Skript verwendet:

#!/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';
xastor
quelle
Das war im letzten September, und noch hat niemand etwas dazu gesagt? Ihr "Mount Point" sollte stattdessen "Device Node" sein, wenn Sie erwarten, dass dieses Skript das tut, was die Kommentare sagen.
1
@Blakat Der Geräteknoten ist nicht das, wonach das OP gefragt hat. Der Einhängepunkt ist /Volumes/…, worüber alle gesprochen haben, wenn ich diese Frage richtig gelesen habe.
Slhck
Wenn Sie mit sedwie auch immer, das grepund das cutist nutzlos ; diskutil info "$1" | sed -n '/^ *Mount Point: */!d;s///;s/ *$//p'
Tripleee
0

Dies ist, was ich in meinen Shell-Skripten unter OS X verwende

df | awk '{print $6}' | grep -Ex "/Volumes/myvolume"
DannyRe
quelle
Können Sie ein paar Sätze hinzufügen, um zu erklären, wie das funktioniert? Vielen Dank.
Fixer1234
Dies ist ein Umweg, der besagt df | awk '$6 == "/Volumes/myvolume" { print $6 }', dass der Datenträgerpfad gedruckt werden muss, wenn er genau dem erwarteten Pfad entspricht. Die grep -EFlagge ist hier überflüssig und grepnutzlos, da Awk bereits recht gut weiß, wie man einen regulären Ausdruck findet.
Tripleee
Ein nützlicher Befehl würde wahrscheinlich für die Lautstärke grep vor Drucken nur das sechste Feld, oder noch besser die erste Änderung $6an $1in meinem vorherigen Kommentar.
Tripleee
-1

Das könnte besser funktionieren:

df -lH | grep -E "*putinyourvolumelabel*$" | awk '{print $1}''
Dennis Eisen
quelle
6
Warum könnte das besser funktionieren?
Bertieb
Dennis, willkommen bei Super User. Einige der anderen Antworten sind keine guten Beispiele, aber das Ziel der Antworten besteht darin, zu informieren, anstatt nur Code zum Ausschneiden und Einfügen bereitzustellen. Ich bin kein Programmierer, daher kann ich nicht ansprechen, wie gut Ihre Lösung sein könnte, aber ich vermute, dass Bertiebs Kommentar und möglicherweise die Ablehnung eher auf die Tatsache zurückzuführen sind, dass es sich nur um unerklärten Code handelt, als auf die Qualität der Lösung. Können Sie ein paar Sätze hinzufügen, um zu erklären, was dies bewirkt und was es zu einer besseren Lösung macht als das, womit Sie es verglichen haben? Vielen Dank.
Fixer1234