Gdy Linux otrzymuje błąd ATA, sysloguje go komunikatem identyfikującym dysk jako „ata% d.00”. Jak mam to przetłumaczyć na nazwę urządzenia (np. /dev/sdb
)? Wydaje mi się, że powinno to być trywialne, ale nie mogę tego rozgryźć.
linux
hard-drive
nelhage
źródło
źródło
Odpowiedzi:
Peter zainspirował mnie do napisania zaawansowanego skryptu (let), który może nawet wykryć pamięć USB (zamiast wypisywać głupie rzeczy, takie jak „ata0.00”). W przeciwieństwie do skryptu Piotra, otrzymasz również pod-numer (jak w 4.01), jeśli masz więcej niż jedno urządzenie na tym samym kontrolerze lub. kanał. Dane wyjściowe będą dokładnie takie, jak je otrzymujesz
syslog
. Przetestowany. Działa bardzo dobrze na moim pudełku Debiana, chociaż zawsze jest wiele ulepszeń (np. Zbyt niezdarne wyrażenia regularne). Ale TRZYMAJ! Pozornie zbyt duża liczba znaków ucieczki, które możesz znaleźć w moich wyrażeniach regularnych, to tylko ze względu na kompatybilność! Nie możesz założyć GNUsed
ze wszystkimi, dlatego celowo zrobiłem to bez rozszerzonych wyrażeń regularnych.AKTUALIZACJE
(1) Nie będą już analizować
ls
danych wyjściowych. (ups!) Ponieważ wszyscy wiecie: nie analizujcie ls.(2) Teraz działa również w środowiskach tylko do odczytu.
(3) Zainspirowany sugestią z tego chit-czatu tutaj udało mi się jeszcze bardziej uprościć zdania sed.
źródło
Spójrz
/proc/scsi/scsi
, który będzie wyglądał mniej więcej tak:scsi0 id 0 to sda i ata1.00, scsi1 id 0 to sdb i ata2.00 itp.
Zobacz także
/var/log/dmesg
, która pokazuje informacje o ładowaniu sterownika ata i sprawi, że będzie trochę jaśniej. Poszukaj linii zaczynającej się od „libata”.źródło
Wolę skrypty zamiast długich wyjaśnień. Działa to na moim systemie Ubuntu. Dodaj komentarze do swoich upodobań:
źródło
ls -l /sys/block/sd* | sed -e 's@.*-> \.\..*/ata@/ata@' -e 's@/host@ @' -e 's@/target.*/@ @'
To jest właściwie dość trudne. Chociaż można bezpiecznie założyć, że „identyfikator scsi” to „identyfikator SATA minus jeden”, wolę być naprawdę bezpieczny i sprawdzam,
unique_id
co, jak zakładam (na podstawie tego postu ), jest identyfikatorem SATA.Mój błąd to:
Więc moja procedura, aby dowiedzieć się, co
ata4
to jest:znajdź identyfikator PCI kontrolera SATA
znajdź pasujący unikalny identyfikator:
więc jest włączony
scsi_host/host3
, na który możemy przetłumaczyć3:x:x:x
, na który możemydmesg
się dowiedzieć, aby dowiedzieć się więcej:oto nasze urządzenie, możemy (opcjonalnie) znaleźć numer seryjny, aby zabrać to urządzenie stamtąd (lub sprawdzić okablowanie lub cokolwiek innego), zanim nasza macierz RAID całkowicie zawiedzie:
I jesteś skończony!
źródło
Spróbuj tego:
Nigdy nie rozumiałem dmesg - niektóre wiersze dotyczą „ata4”, inne zaś dotyczą „scsi” lub sdc, ale nikt nie przypisuje „ata4 ... sdc” pokazane polecenie znajduje ścieżkę / sys / bus / path, gdzie zarówno ata4, jak i sdc są określone.
źródło
Miałem ten sam problem i byłem w stanie zidentyfikować dyski, sprawdzając dmesg. Tam możesz zobaczyć identyfikator kontrolera (poprawny termin?) I model dysku. Następnie użyj ls -l / dev / disk / by-id, aby dopasować numer modelu do / dev / sda (lub cokolwiek innego). Alternatywnie podoba mi się Narzędzie dyskowe dla tych informacji. Uwaga: działa to tylko wtedy, gdy dyski mają różne numery modeli, w przeciwnym razie nie można ich rozróżnić.
źródło
Najprostszym sposobem jest przejrzenie dziennika jądra od startu, ponieważ nazwy urządzeń napędowych są mieszane z różnych źródeł (np. Napędów USB) lub są przypisywane na podstawie typu urządzenia (np. Cdrom może być scdX zamiast tego i wszystko ma sgX ). W praktyce, chyba że masz do czynienia z różnymi rodzajami magistrali (np. SATA + USB), urządzeniem ATA o najniższym numerze będzie SDA, chyba że jest to urządzenie CDROM.
W zależności od systemu można go rozróżnić wędrując po dysfunkcjach. W moim systemie
ls -l /sys/dev/block
ujawnia, że8:0
(major: minor from / dev entry) wskazuje na/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
Podobnie,ls -l /sys/class/ata_port
ujawnia teata1
punkty, na/sys/devices/pci0000:00/0000:00:1f.2/ata1/ata_port/ata1
których znajduje się to samo urządzenie podrzędne PCI.Ponieważ używam SATA i na każdym porcie jest tylko jeden dysk, mogę wywnioskować, że ata1.00 = sda. Wszystkie moje dyski mają 0,00, podejrzewam, że gdybym użył multiplikatora portów, moje dyski otrzymałyby 0,01, 0,02, 0,03 itd. Patrząc na logi innych ludzi Kontrolery PATA używają 0,00 i 0,01 dla master i slave , i na podstawie ich dzienników, jeśli masz ataX.01, .01 powinien być mapowany na „ID” w hoście: kanał: ID: folder LUN z
/sys/dev/block/
listy. Jeśli masz wiele folderówataX/
ihostY/
folderów w tym samym folderze urządzenia PCI, podejrzewam, że folder ataX o najniższym numerze odpowiada folderowi hostY o najniższym numerze.źródło
W
/sys/class/ata_port/ata${n}/device/
możesz zobaczyćhost${x}
folder. Np. Na moim komputerze:Symbol
${x}
inhost${x}
odnosi się do tej pierwszej liczby w[0:0:0:0]
. Więc dla mnieata1
odnosi się do,host0
który może być również reprezentowany w formie SCSI jako0:*
:źródło
Poniższy skrypt da Ci takie fajne podsumowanie:
Tak więc w jednym wierszu na dysk masz nazwę urządzenia SDX , rozmiar , model , s / n oraz numery pci i ata . Sdc powyżej odpowiada czytnikowi kart USB SD bez włożonej karty. Stąd ---- zamiast prawdziwej informacji.
(testowany tylko na Ubuntu 12.04 / 14.04 i CentOS 6)
źródło
Skrypt umożliwiający znalezienie tych informacji i nie tylko można znaleźć na stronie https://www.av8n.com/computer/disk-hw-host-bus-id
Jest podobny do skryptu dostarczonego przez pana Syntaxerrora, ale jest bardziej fantazyjny. - Działa zarówno z dyskami USB, jak i ATA. - Podaje markę i model napędu oraz numer seryjny, - i oczywiście punkt mocowania. - Jest prostszy, czytelniejszy i łatwiejszy w utrzymaniu.
źródło