Bagaimana saya bisa mendapatkan jalur pemasangan perangkat USB di OSX?

58

Saya memiliki skrip cadangan yang mencadangkan beberapa data ke perangkat USB. Masalah yang saya miliki adalah bahwa OSX terkadang mengubah jalur mount yang diharapkan. Misalnya jika beberapa file dikunci di bawah jalur pemasangan yang diharapkan, OSX memasangnya di jalur lain. Perangkat USB bernama 'BACKUP' dapat dipasang di / Volume / BACKUP-1 sebagai ganti / Volume / BACKUP.

Apakah ada cara untuk mengetahui jalur pemasangan perangkat USB saat ini di OSX Terminal? Sesuatu seperti 'mount_path BACKUP' (perintah palsu) yang kemudian akan mengembalikan '/ Volume / BACKUP-1' atau tidak sama sekali jika perangkat tidak dipasang?

xastor
sumber

Jawaban:

68

Perintah berikut ini menunjukkan kepada Anda informasi tentang volume yang dipasang:

  • Unix yang terkenal mount, menunjukkan misalnya /dev/disk5s3dipasang di/Volumes/Foo
  • diskutil list menunjukkan gambaran umum dari semua disk dan volume
  • diskutil info /dev/disk5s3menunjukkan informasi tentang volume itu, termasuk Volume UUIDyang dapat digunakan untuk mengidentifikasi secara unik volume itu.

Anda dapat meminta diskutil infodengan menggunakan UUID volume:

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

Contoh perintah output pada sistem saya:

$ 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
sumber
Saya berharap untuk tidak harus menggunakan perintah-perintah itu dan menguraikan cara saya melalui ini :) Tapi jika tidak ada cara lain, apakah Anda tahu ada fungsi bash yang melakukan ini untuk Anda?
xastor
@ xastor Menambahkan info yang relevan. man diskutilakan membantu.
Daniel Beck
Terima kasih, saya menulis skrip sekarang dan berfungsi. Saya berharap ada cara lain, saya seharusnya menyebutkan itu dalam pertanyaan. Misalnya, apa yang terjadi pada sistem OSX dengan bahasa lain? Saya tidak dapat grep 'Mount Volume' pada sistem Perancis kurasa ..
xastor
@xastor diskutiltidak dilokalkan.
Daniel Beck
1
Ini adalah solusi yang bisa diandalkan saat itu. Terima kasih!
xastor
10

Bagaimana dengan perintah ini:

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

Di kolom "Mounted on" Anda mendapatkan semua Mount Points dari semua perangkat yang terpasang "/Volumes", yang dalam kasus saya hampir selalu merupakan perangkat USB ;-)

The grepperintah pada dasarnya melewatkan hard drive yang terpasang pada "/".

Di terminal OSX Snow Leopard saya, saya menggunakannya untuk tinjauan singkat tentang Mount Points dari Perangkat USB saya yang saat ini terhubung. Jika Anda hanya tertarik pada Mount Points dan tidak semua parameter lain seperti UUID dll., Ini menurut saya akan menjadi cara yang lebih langsung daripada "diskutil"dengan semua informasinya.

Mallin
sumber
2

Saya mengambilnya dalam sebuah variabel:

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

atau

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

The dfperintah daftar partisi, output yang dihasilkan disalurkan sebagai masukan untuk perintah grep yang filter dan membuat hanya baris yang mengandung kata media, yang kemudian disalurkan ke awkperintah yang hanya membuat kolom 6 input satu lini.

Stephane
sumber
Bentuk kedua harus lebih disukai, tetapi tidak jelas bagaimana untuk lulus dalam /media/regex parametrized. Cobalah media=$(df | awk -v regex="$regex" '$1 ~ regex { print $6 }')untuk mengirimkan variabel shell $regexsebagai hal yang dicari.
tripleee
1

Hanya orang tua yang baik diskutil. Ini bukan Linux, di mana Anda mungkin bisa mengintip / sys atau sesuatu.

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

Saya hanya akan menggunakan fstab untuk ini. Ada utas tentang topik ini di sini di Pengguna Super: Mac Lion: fstab sudah usang. jadi apa yang menggantikannya untuk mencegah pemasangan partisi?

dag729
sumber
1
Dan bagaimana cara Anda menggunakannya fstab?
Daniel Beck
Mengambil UUId drive USB, membuat titik mount dan memberikan semuanya ke / etc / fstab. Setiap kali drive USB tersebut terpasang, akan dipasang pada titik pemasangan itu, yang diakui oleh UUID-nya.
dag729
Perhatikan bahwa masalah pengguna berasal dari titik pemasangan default yang sedang digunakan.
Daniel Beck
Itulah yang saya maksud: memberi OS titik mount dengan menggunakan / etc / fstab. Sejak saat itu, sistem akan membaca / etc / fstab, menemukan bahwa ada UUID dengan mount point yang terkait, dan ia akan menggunakannya sebagai ganti default.
dag729
0

Saya akhirnya menggunakan skrip bash ini:

#!/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
sumber
Ini September lalu, dan belum ada yang mengomentari itu? 'Mount Point' Anda SEHARUSNYA menjadi 'Device Node' jika Anda mengharapkan skrip ini melakukan apa yang dikatakan komentar.
1
@Blakat Node perangkat bukanlah yang diminta OP. Titik puncaknya adalah /Volumes/…, itulah yang dibicarakan semua orang jika saya membaca pertanyaan ini dengan benar.
slhck
Jika Anda sedtetap menggunakan , maka grepdan cuttidak berguna ; diskutil info "$1" | sed -n '/^ *Mount Point: */!d;s///;s/ *$//p'
tripleee
0

Inilah yang saya gunakan dalam skrip shell saya di OS X

df | awk '{print $6}' | grep -Ex "/Volumes/myvolume"
DannyRe
sumber
Bisakah Anda menambahkan beberapa kalimat untuk menjelaskan cara kerjanya? Terima kasih.
fixer1234
Ini adalah cara bundaran mengatakan df | awk '$6 == "/Volumes/myvolume" { print $6 }'cetak jalur volume jika itu persis yang diharapkan. The grep -Ebendera berlebihan di sini dan greptidak berguna karena AWK sudah tahu cukup baik bagaimana untuk mencocokkan ekspresi reguler.
tripleee
Perintah yang lebih berguna mungkin akan menerima volume sebelum mencetak hanya bidang keenam, atau bahkan lebih baik mengubah yang pertama $6ke $1dalam komentar saya sebelumnya.
tripleee
-1

Ini mungkin bekerja lebih baik:

df -lH | grep -E "*putinyourvolumelabel*$" | awk '{print $1}''
Dennis Eisen
sumber
6
Mengapa itu bekerja lebih baik?
bertieb
Dennis, selamat datang di Pengguna Super. Beberapa jawaban lain bukanlah contoh yang baik, tetapi tujuan jawaban adalah untuk mendidik daripada hanya memberikan kode tempel dan tempel. Saya bukan pembuat kode, jadi saya tidak bisa menjawab seberapa bagus solusi Anda, tetapi saya curiga komentar bertieb, dan mungkin downvote, buka fakta bahwa ini hanya kode yang tidak dijelaskan, daripada kualitas solusi. Bisakah Anda menambahkan beberapa kalimat untuk menjelaskan apa yang dilakukannya, dan apa yang menjadikannya solusi yang lebih baik daripada apa pun yang Anda bandingkan? Terima kasih.
fixer1234