GNU/Linux >> Linux Esercitazione >  >> Linux

Data un'eccezione ATA del kernel, come determinare quale disco fisico è interessato?

Ho scritto una battuta sulla base della risposta di Tobi Hahn.

Ad esempio, vuoi sapere quale dispositivo sta per ata3:

ata=3; ls -l /sys/block/sd* | grep $(grep $ata /sys/class/scsi_host/host*/unique_id | awk -F'/' '{print $5}')

Produrrà qualcosa di simile

lrwxrwxrwx 1 root root 0 Jan 15 15:30 /sys/block/sde -> ../devices/pci0000:00/0000:00:1f.5/host2/target2:0:0/2:0:0:0/block/sde

Usa questo comando:

ls -l /sys/block/sd* | sed 's/.*\(sd.*\) -.*\(ata.*\)\/h.*/\2 => \1/'

Sul mio sistema questo produce l'output:

ata1 => sda
ata2 => sdb
ata3 => sdc
ata4 => sdd
ata7 => sde
ata8 => sdf

Funzionerà anche se tutti i dischi hanno lo stesso modello di unità (tra quei 6 dischi ci sono solo due modelli diversi). Nota che questo dipende dalla denominazione di sysfs e funziona nel mio kernel 3.10.17. So che a un certo punto in passato non era così pulito recuperare le mappature, ma non sono sicuro di quale sia la prima versione del kernel per cui funzionerà.

Se non funziona per te, vedi questo link per un modo più indiretto di determinare le mappature:http://www.miriup.de/index.php?option=com_content&view=article&id=84:mapping-linux-kernel- errori-ata-su-un-dispositivo&catid=8:linux&Itemid=25


È venuto fuori che eseguire la mappatura è stato più facile di quanto pensassi.

dmesg | grep ata2 | head fornisce la mappatura dell'unità da parte del kernel durante il processo di avvio. Oppure potresti semplicemente scegliere ata2.00 subito.

[    2.448300] ata2: SATA max UDMA/133 abar [email protected] port 0xfeb0b180 irq 19
[    2.940139] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[    2.942143] ata2.00: ATA-8: ST31000340NS, SN05, max UDMA/133
[    2.942149] ata2.00: 1953525168 sectors, multi 16: LBA48 NCQ (depth 31/32)
[    2.944573] ata2.00: configured for UDMA/133
  (and some stuff I'd rather never have to see about drive errors)

Come puoi vedere, una di queste righe contiene il numero del modello della mia unità (ST31000340NS ) che posso quindi utilizzare per mappare a un /dev file:

$ readlink /dev/disk/by-id/*ST31000340NS* | head -n1
../../sda

Linux
  1. Linux:dato un hash Git Commit, come scoprire quale versione del kernel lo contiene?

  2. Come trovare il modulo del kernel per un determinato dispositivo?

  3. Linux:come determinare quale modulo contamina il kernel?

  4. Come determinare quale processo sta scrivendo su disco in Linux

  5. Come determinare se un determinato Linux è a 32 o 64 bit?

Come determinare cosa sta utilizzando più spazio su disco su un server Linux?

In che modo il kernel Linux determina l'ordine delle chiamate __init?

Come utilizzare in pratica la sicurezza ATA su un disco rigido?

Determina quale guest è in esecuzione su XEN:guest HVM o PV

In che modo Linux carica l'immagine "initrd"?

uname è rotto:come posso determinare il kernel attualmente in esecuzione?