Как получить серийный номер с жестких дисков Mac? - PullRequest
12 голосов
/ 07 января 2010

Существует ли простой способ получить серийный номер всех жестких дисков Mac с помощью API?

По сути, я ищу уникальный идентификатор для жесткого диска, с помощью которого я могу выяснить, использовался ли жесткий диск (или упоминался) моим приложением или нет.

Пожалуйста, дайте мне знать, если есть другое решение.

Примечание: мне нужно это решение для 10.4 и выше.

Ответы [ 7 ]

12 голосов
/ 07 января 2010

Я не уверен, что «AppleUSBEHCI» - это то, что нужно искать, но вы можете получить данные такого рода, используя инфраструктуру IOKit:

8 голосов
/ 28 мая 2014

Из командной строки:

ioreg -rd1 -w0 -c AppleAHCIDiskDriver | grep Serial

Это дает вам серийный номер встроенного жесткого диска.

6 голосов
/ 07 января 2010

Я думаю, что лучше получить UUID тома (который появляется в Дисковой утилите, например.) UUID может быть получен с использованием платформы Disk Arbitration , которая немного более высокого уровня, чем IOKit, и более проста в использовании. Создайте DADiskRef, используя DADiskCreateFromBSDName, и используйте DADiskCopyDescription, чтобы получить информационный словарь, и найдите ключ kDADiskDescriptionMediaUUIDKey. Информацию о точке монтирования и т. Д. Можно получить с помощью statfs .

Тем не менее, может быть проще вызвать утилиту командной строки diskutil с опцией -plist для получения информации в формате plist.

Пример кода FSMegaInfo также может быть поучительным, как получить гораздо больше информации о диске.

2 голосов
/ 14 декабря 2015

Далее будут перечислены серийные номера на шине SATA. Вы не узнаете, какое устройство оно есть, но вы можете сделать это с помощью некоторых скриптов / парсинга. Я использовал «sed», чтобы удалить все пробелы, и «awk», чтобы изолировать только серийный номер, если вы не знакомы:

$ system_profiler SPSerialATADataType -detailLevel medium | grep Serial | sed -e 's/[\<\>\"\ ]//g' | -F':' '{print $2}'
2 голосов
/ 01 марта 2012

Идентификаторы дисков можно получить из IORegistry следующим образом:

  • Внутренние диски: IOAHCIBlockStorageDevice string свойство "Serial" Номер «внутри» Характеристики устройства », например: (WD-WCAV5D1345345)

  • USB-накопители: IOUSBDevice string свойство «Серийный номер USB», например: (5743415654564561373734)

  • Диски FireWire: IOReducedBlockServices number свойство "GUID" внутри "Характеристики протокола", например: (407345709348650)

  • Приводы Thunderbolt: ??

Эти идентификаторы являются постоянными, что означает, что одни и те же внешние диски, подключенные к разным машинам, будут иметь один и тот же идентификатор.

1 голос
/ 07 января 2010

Посмотрите на IOKit .

На вашем Mac есть два удобных инструмента, чтобы узнать о его возможностях:

  • ioreg, инструмент командной строки
  • IORegistryExplorer, то же самое с графическим интерфейсом.
0 голосов
/ 07 января 2010

Может быть, вы можете просто разместить скрытый файл на жестком диске, который использовало ваше приложение? Это, например, как Apple Time Machine делает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...