Когда блок Linux получает ошибку ATA, он заносит его в журнал сообщением, идентифицирующим диск как «ata% d.00». Как мне перевести это на имя устройства (например /dev/sdb
)? Я чувствую, что это должно быть тривиально, но я не могу понять это.
linux
hard-drive
nelhage
источник
источник
Ответы:
Питер вдохновил меня написать расширенный сценарий (пусть), который может даже обнаруживать флешки USB (вместо вывода глупых вещей вроде «ata0.00»). В отличие от сценария Питера, вы также получите дополнительный номер (как в 4.01), если у вас более одного устройства на одном контроллере, соответственно. канал. Вывод будет точно таким, каким вы его получили
syslog
. Проверено. Очень хорошо работает на моей коробке Debian, хотя всегда есть много улучшений (например, слишком неуклюжие регулярные выражения). Но держи его! Казалось бы, слишком большое число экранированных символов, которые вы можете найти в моих регулярных выражениях, просто из соображений совместимости! Вы не можете использовать GNUsed
со всеми, поэтому я специально сделал это без расширенных регулярных выражений.ОБНОВЛЕНИЯ
(1) больше не будет анализировать
ls
вывод. (упс!) Так как вы все знаете: не разбирайте ls.(2) Теперь также работает в средах только для чтения.
(3) Навеяно предложением от этой болтовни здесь мне удалось снова получить этот анализ заявление пути менее сложным.
источник
Посмотрите
/proc/scsi/scsi
, что будет выглядеть примерно так:ID 0 scsi0 - это sda и ata1.00, id 0 scsi1 - это sdb и ata2.00 и т. д.
Также посмотрите
/var/log/dmesg
, что показывает информацию о загрузке драйвера ata и немного прояснит ситуацию. Ищите строку, начинающуюся с «libata».источник
Я предпочитаю сценарии вместо длинных объяснений. Это работает на моей коробке Ubuntu. Добавьте комментарии по своему вкусу:
источник
ls -l /sys/block/sd* | sed -e 's@.*-> \.\..*/ata@/ata@' -e 's@/host@ @' -e 's@/target.*/@ @'
Это на самом деле довольно сложно. Хотя можно с уверенностью предположить, что «идентификатор scsi» является «идентификатором SATA минус один», я предпочитаю быть действительно безопасным и проверять, как
unique_id
я полагаю (основываясь на этом посте ), идентификатор SATA.Моя ошибка была:
Итак, моя процедура, чтобы узнать, что
ata4
это:найти идентификатор PCI контроллера SATA
найти соответствующий уникальный идентификатор:
так что это
scsi_host/host3
, что мы можем перевести3:x:x:x
, что мы можемdmesg
найти, чтобы узнать больше:вот наше устройство, мы можем (необязательно) найти серийный номер, чтобы вывести это устройство (или проверить кабельные соединения или что-то еще), прежде чем наш RAID-массив полностью выйдет из строя:
И вы сделали!
источник
Попробуй это:
Я никогда не понимал dmesg - некоторые строки о «ata4», другие о «scsi» или sdc, но никто не назначает «ata4 ... sdc», показанная команда находит / sys / bus / path, где и ata4, и sdc указаны.
источник
У меня была та же проблема, и я смог определить диски, проверив dmesg. Там вы можете увидеть идентификатор контроллера (правильный термин ??) и модель диска. Затем используйте ls -l / dev / disk / by-id, чтобы сопоставить номер модели с / dev / sda (или любым другим). Кроме того, мне нравится Дисковая утилита для этой информации. Примечание: это работает, только если у ваших дисков разные номера моделей, иначе вы не сможете различить их.
источник
Самый простой способ - просмотреть журнал ядра при загрузке, поскольку имена устройств дисков смешаны из разных источников (например, USB-накопителей) или назначаются в зависимости от типа устройства (т. Е. Вместо этого cdrom может быть scdX, и все есть sgX. ). На практике, если вы не смешали разные типы шин (например, SATA + USB), устройство с самым низким номером ata будет sda, если это не устройство cdrom.
В зависимости от вашей системы, это может быть предсказано блужданием по sysfs. В моей системе
ls -l /sys/dev/block
показывается, что8:0
(major: minor from / dev entry) указывает на/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
аналогично,ls -l /sys/class/ata_port
выявляется, чтоata1
указывает/sys/devices/pci0000:00/0000:00:1f.2/ata1/ata_port/ata1
на то же устройство PCI.Поскольку я использую SATA, и на каждом порту только один диск, я могу сделать вывод, что ata1.00 = sda. Все мои диски имеют значение .00, я подозреваю, что если бы я использовал множитель порта, мои диски получили бы 0,01, 0,02, 0,03 и т. Д. При просмотре журналов других пользователей контроллеры PATA используют 0,00 и 0,01 для главного и подчиненного устройств. и на основе их журналов, если у вас есть ataX.01, .01 должен быть сопоставлен с «ID» в папке host: channel: ID: LUN из
/sys/dev/block/
списка. Если у вас есть несколько папокataX/
иhostY/
папок в одной папке устройства PCI, то я подозреваю, что папка ataX с наименьшим номером соответствует папке hostY с наименьшим номером.источник
В
/sys/class/ata_port/ata${n}/device/
, вы можете увидетьhost${x}
папку. Например, на моей машине:${x}
Вhost${x}
относится к этому первому номеру в[0:0:0:0]
. Так что для меняata1
относится кhost0
которому также может быть представлен в форме SCSI как0:*
:источник
Сценарий ниже даст вам хорошее резюме, как это:
Таким образом, в одной строке на диске у вас есть имя устройства sdX , размер , модель , s / n и номера pci и ata . Приведенный выше sdc отвечает на устройство чтения карт памяти SD SD без вставленной карты. Следовательно ---- вместо реальной информации.
(протестировано только на Ubuntu 12.04 / 14.04 и CentOS 6)
источник
Сценарий для поиска этой информации и многое другое можно найти по адресу https://www.av8n.com/computer/disk-hw-host-bus-id.
Это похоже на сценарий, предоставленный Mr. Syntaxerror, но причудливее. - Работает как с USB-накопителями, так и с ATA-накопителями. - В нем указывается марка привода, модель и серийный номер, - и, конечно, точка крепления. - Это более простой, читаемый и поддерживаемый.
источник