Ketika sebuah kotak Linux mendapatkan kesalahan ATA, ia men-slog-nya dengan pesan yang mengidentifikasi disk sebagai "ata% d.00". Bagaimana cara menerjemahkannya ke nama perangkat (misalnya /dev/sdb
)? Saya merasa ini sepele, tetapi saya tidak bisa mengetahuinya.
linux
hard-drive
nhage
sumber
sumber
Jawaban:
Peter mengilhami saya untuk menulis skrip tingkat lanjut (biarkan), yang bahkan dapat mendeteksi stik USB (alih-alih mengeluarkan hal-hal konyol seperti "ata0.00"). Berbeda dengan skrip Peter, Anda juga akan mendapatkan sub-angka (seperti pada 4.01) jika Anda memiliki lebih dari satu perangkat pada resp controller yang sama. saluran. Outputnya akan persis seperti yang Anda dapatkan
syslog
. Diuji. Bekerja sangat baik pada kotak Debian saya, meskipun selalu ada banyak peningkatan (misalnya regexps terlalu canggung). Tapi TAHAN! Jumlah karakter luput yang tampaknya terlalu tinggi yang mungkin Anda temukan di regexps saya hanya untuk alasan kompatibilitas! Anda tidak dapat mengasumsikan GNUsed
dengan semua orang, itulah sebabnya saya sengaja melakukannya tanpa memperpanjang regexps.PEMBARUAN
(1) Tidak akan lagi menguraikan
ls
output. (ups!) Karena Anda semua tahu: Jangan parsing ls.(2) Sekarang juga berfungsi pada lingkungan read-only.
(3) Terinspirasi oleh saran dari obrolan-obrolan ini di sini saya telah berhasil membuat pernyataan sed tidak terlalu rumit.
sumber
Lihat
/proc/scsi/scsi
, yang akan terlihat seperti ini:scsi0 id 0 adalah sda dan ata1.00, scsi1 id 0 adalah sdb dan ata2.00, dll.
Lihat juga
/var/log/dmesg
, yang menunjukkan info memuat driver ata dan akan membuat hal-hal sedikit lebih jelas. Cari baris mulai "libata".sumber
Saya lebih suka scriptlets daripada penjelasan panjang. Ini berfungsi pada kotak Ubuntu saya. Tambahkan komentar sesuai keinginan Anda:
sumber
ls -l /sys/block/sd* | sed -e 's@.*-> \.\..*/ata@/ata@' -e 's@/host@ @' -e 's@/target.*/@ @'
Ini sebenarnya cukup rumit. Meskipun aman untuk menganggap bahwa "ID scsi" adalah "SATA ID minus satu", saya lebih suka benar-benar aman dan memeriksa
unique_id
yang saya asumsikan (berdasarkan posting ini ) adalah pengidentifikasi SATA.Kesalahan saya adalah:
Jadi prosedur saya untuk mencari tahu apa
ata4
itu:temukan id PCI dari pengontrol SATA
temukan ID unik yang cocok:
jadi aktif
scsi_host/host3
, yang bisa kita terjemahkan3:x:x:x
, yang bisa kita ambil untukdmesg
mengetahui lebih lanjut:inilah perangkat kami, kami dapat (opsional) menemukan nomor seri untuk mengeluarkan perangkat itu dari sana (atau memeriksa kabel atau apa pun) sebelum array RAID kami gagal total:
Dan kamu selesai!
sumber
Coba ini:
Saya tidak pernah mengerti dmesg - beberapa baris adalah tentang "ata4" beberapa lainnya tentang "scsi" atau sdc, tetapi tidak ada yang menugaskan "ata4 ... sdc" perintah yang ditampilkan menemukan / sys / bus / path, di mana baik ata4 dan sdc ditentukan.
sumber
Saya memiliki masalah yang sama dan dapat mengidentifikasi drive dengan memeriksa dmesg. Di sana Anda dapat melihat pengontrol pengontrol (istilah yang benar ??) dan model disk. Kemudian gunakan ls -l / dev / disk / by-id untuk mencocokkan nomor model dengan / dev / sda (atau apa pun). Atau, saya suka Disk Utility untuk informasi ini. Catatan: ini hanya berfungsi jika disk Anda memiliki nomor model yang berbeda, jika tidak, Anda tidak dapat membedakan keduanya.
sumber
Cara termudah adalah dengan meninjau log kernel dari boot, karena nama perangkat drive dicampur dari berbagai sumber (misalnya drive USB), atau ditugaskan berdasarkan jenis perangkat (yaitu cdrom mungkin scdX sebagai gantinya, dan semuanya memiliki sgX ). Dalam praktiknya, kecuali jika Anda telah mencampur berbagai jenis bus (misalnya SATA + USB), perangkat ata bernomor terendah akan menjadi sda kecuali jika itu adalah perangkat cdrom.
Tergantung pada sistem Anda, itu mungkin diramalkan dengan berkeliaran di sekitar sysfs. Pada sistem saya
ls -l /sys/dev/block
mengungkapkan bahwa8:0
(utama: minor dari / entri dev) menunjuk ke/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
Demikian juga,ls -l /sys/class/ata_port
mengungkapkanata1
hal itu/sys/devices/pci0000:00/0000:00:1f.2/ata1/ata_port/ata1
yang pada sub-perangkat PCI yang sama.Karena saya menggunakan SATA, dan hanya satu drive di setiap port saya dapat menyimpulkan bahwa ATA1.00 = sda. Semua drive saya adalah 0,00, saya curiga bahwa jika saya menggunakan port multiplier, drive saya akan diberikan .01, .02, .03 dll. Melihat log orang lain Pengontrol PATA menggunakan .00 dan .01 untuk master dan slave , dan berdasarkan log mereka jika Anda memiliki ataX.01, .01 harus dipetakan ke "ID" di host: saluran: ID: folder LUN dari
/sys/dev/block/
daftar. Jika Anda memiliki banyakataX/
danhostY/
folder dalam folder perangkat PCI yang sama, maka saya menduga bahwa folder ataX bernomor terendah cocok dengan folder hostY bernomor terendah.sumber
Di
/sys/class/ata_port/ata${n}/device/
, Anda dapat melihathost${x}
folder. Misalnya, di komputer saya:The
${x}
dalamhost${x}
mengacu pada nomor pertama dalam[0:0:0:0]
. Jadi bagi sayaata1
merujukhost0
yang juga dapat direpresentasikan dalam bentuk SCSI sebagai0:*
:sumber
Script di bawah ini akan memberi Anda ringkasan yang bagus seperti ini:
Jadi dalam satu baris per drive Anda memiliki nama perangkat sdX , ukuran , model , s / n dan nomor pci dan ata . Sdc di atas sesuai dengan pembaca kartu SD USB tanpa kartu dimasukkan. Karenanya ---- di tempat informasi nyata.
(hanya diuji di ubuntu 12.04 / 14.04 dan CentOS 6)
sumber
Sebuah skrip untuk menemukan informasi ini, dan banyak lagi, dapat ditemukan di https://www.av8n.com/computer/disk-hw-host-bus-id
Ini mirip dengan skrip yang disediakan oleh Mr. Syntaxerror, tetapi lebih bagus. - Ini berfungsi untuk drive USB dan drive ATA. - Ini menyediakan drive drive dan model dan nomor seri, - dan tentu saja titik lampiran. - Ini lebih mudah, mudah dibaca, dan dipelihara.
sumber