Як я можу отримати шлях монтажу USB-пристрою на OSX?


58

У мене є резервний скрипт, який створює резервне копіювання деяких даних на USB-пристрій. Проблема у мене полягає в тому, що OSX іноді змінює очікуваний шлях монтажу. Наприклад, якщо якийсь файл заблокований під очікуваним шляхом монтажу, OSX змонтує його на іншому шляху. USB-пристрій під назвою "BACKUP" можна встановити на / Volumes / BACKUP-1 замість / Volumes / BACKUP.

Чи є спосіб дізнатися поточний шлях монтажу USB-пристрою в терміналі OSX? Щось на кшталт 'mount_path BACKUP' (команда підроблена), яка б потім повернула '/ Volumes / BACKUP-1' або нічого, якби пристрій не був встановлений?

Відповіді:


67

Наступні команди показують інформацію про встановлені томи:

  • Відомий Unix mount, показуючи, наприклад, /dev/disk5s3встановлений на/Volumes/Foo
  • diskutil list показує огляд усіх дисків і томів
  • diskutil info /dev/disk5s3показує інформацію про цей обсяг, включаючи таку, Volume UUIDяку можна використовувати для однозначної ідентифікації цього обсягу.

Ви можете здійснити запит diskutil info, використовуючи UUID тома:

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

Зразок виводу команди в моїй системі:

$ 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

Я сподівався уникнути необхідності використовувати ці команди і аналізувати свій шлях через це :) Але якщо іншого способу немає, чи знаєте ви якісь функції bash, які роблять це для вас?
xastor

@xastor Додана відповідна інформація. man diskutilдопомогло б.
Даніель Бек

Дякую, я написав сценарій зараз, і він працює. Хоча я сподівався, що існує інший шлях, я повинен був це зазначити у питанні. Наприклад, що відбувається в системі OSX з іншою мовою? Я не можу зіткнути 'Mount Volume' на французькій системі, я думаю,
xastor

@xastor diskutilне локалізовано.
Даніель Бек

1
Тоді це надійне рішення. Дякую!
xastor

10

Як щодо цієї команди:

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

У стовпці "Вмонтовано" ви отримуєте всі точки монтажу всіх встановлених пристроїв "/Volumes", які в моєму випадку майже завжди є USB-пристроями ;-)

Ці grepкоманди в основному пропустити жорсткий диск , який встановлений на "/".

У терміналі мого OSX Snow Leopard я використовую його для швидкого огляду точок кріплення моїх підключених на даний момент USB-пристроїв. Якщо вас цікавлять лише пункти гори, а не всі інші параметри, такі як UUID тощо, це, на мою думку, буде більш прямим вперед, а не "diskutil"всією його інформацією.


2

Я отримую його у змінній:

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

або

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

У dfкомандних перераховані розділи, в результаті вихід надходить в якості внеску в команду Grep , який фільтрує і зберігає тільки ті рядки , які містять слово носій, який потім передається по конвеєру awkкоманді , яка тільки тримає 6 - й стовпець вхідних даних одна лінія.


Друга форма повинна бути набагато кращою, але не очевидно, як пройти /media/параметризований регулярний вираз. Спробуйте media=$(df | awk -v regex="$regex" '$1 ~ regex { print $6 }')передати змінну оболонки $regexяк річ, яку потрібно шукати.
трійчатка

1

Просто старий добрий diskutil. Це не Linux, де ви, ймовірно, можете зазирнути в / sys чи щось таке.

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

0

Я б просто використав для цього fstab. Тут на тему Super User: Mac Lion: fstab застарілий. так що замінює його, щоб запобігти монтажу перегородки?


1
І як би ви fstabточно використовували для цього?
Даніель Бек

Візьміть UUId USB-накопичувача, створіть точку монтажу та надайте все це / etc / fstab. Щоразу, коли згаданий USB-накопичувач підключений, він буде встановлений на цій точці кріплення, визнаній його UUID.
dag729

Зауважте, що проблема користувача пов’язана з точкою монтажу за замовчуванням, яка вже використовується.
Даніель Бек

Це те, що я мав на увазі: надати ОС точки монтажу за допомогою / etc / fstab. З цього часу система зчитує / etc / fstab, виявить, що є UUID з відповідною точкою монтажу, і він буде використовувати його замість типового.
dag729

0

Я в кінцевому рахунку використовував цей сценарій 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';

Це було минулого вересня, і його ніхто ще не коментував? ваш "Mount Mount" повинен бути "Device Node", якщо ви очікуєте, що цей сценарій буде робити те, що кажуть, що це робить.

1
@Blakat Вузол пристрою - це не те, про що вимагала ОП. Точка кріплення - /Volumes/…це те, про що всі говорили, якщо я правильно прочитав це питання.
slhck

Якщо ви все sedодно користуєтесь , то grepі вони cutє марними ; diskutil info "$1" | sed -n '/^ *Mount Point: */!d;s///;s/ *$//p'
трійчатка

0

Це те, що я використовую в своїх скриптах оболонки на OS X

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

Чи можете ви додати кілька речень, щоб пояснити, як це працює? Дякую.
fixer1234

Це зворотний спосіб сказати, df | awk '$6 == "/Volumes/myvolume" { print $6 }'тобто надрукувати шлях гучності, якщо він є саме очікуваним. grep -EПрапор зайвий тут і grepмарно , тому що Awk вже добре знає , як відповідати регулярному виразу.
трійчатка

Більш корисна команда, ймовірно, буде проглядати обсяг перед друком лише шостого поля, а ще краще змінити перше $6на $1моє попереднє коментар.
трійчатка

-1

Це може працювати краще:

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

6
Чому це може працювати краще?
bertieb

Деннісе, ласкаво просимо до Супер Користувача. Кілька інших відповідей не є гарними прикладами, але мета відповідей - це навчити, а не просто надати вирізати та вставити код. Я не кодер, тому не можу вирішити, наскільки хорошим може бути ваше рішення, але я підозрюю, що коментар bertieb і, можливо, зворотний результат, переходять до того, що це просто необ'яснений код, а не якість рішення. Чи можете ви додати кілька речень, щоб пояснити, що це робить, і що робить це кращим рішенням, ніж те, з чим ви порівнювали це? Дякую.
fixer1234
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.