0. 메인보드별 SATA DISK Device명 별 ATA명 (CentOS 4.x 커널_2.6.9.x 기준)
* 메인보드에 따라, 그리고 커널에 따라 디바이스 맵핑명이 조금씩 다르다.
1) Foxconn G31MX-K
ata1.00 ==> sda
ata1.01 ==> sdb
ata2.00 ==> sdc
ata2.01 ==> sdd
2) MSI 945GCM5-F V2 (FSB 1333)
ata1: dev 0 ==> sda
ata1: dev 1 ==> sdb
ata2: dev 0 ==> sdc
ata2: dev 1 ==> sdd
3) Biostar VIA K8M800-M7A 와 K8M800-AM2
ata1: dev 0 ==> sda
ata2: dev 0 ==> sdb
* 바이오스타 메인보드 구분
K8M800-M7A : CPU는 소켓 754, 메모리는 DDR1 사용
K8M800-AM2 : CPU는 소켓 AM2, 메모리는 DDR2 사용
1. Translating to a device name?
참고사이트 :
http://serverfault.com/questions/244944/linux-ata-errors-translating-to-a-device-name
아래는 ATA 명을 자동으로 디바이스에 맞게 뽑아내는 쉘스크립트인데, 2.6.9 커널을 사용하는 CentOS 4.x 는 디렉토리 경로가 달라 제대로 값이 안나오고 에러가 난다. 따라서 커널에 맞게 스크립트를 수정해야 된다. 참고로 CentOS 6.x 와 Ubunto 12.04.1(커널 3.2.0-29) 에서는 제대로 동작이 된다.
#!/bin/bash
# note: inspired by Peter
ls -l /sys/block/sd* \
\
| sed -e 's^.*-> \.\.^/sys^' \
-e 's^/host[0-9]\{1,2\}/target^ ^' \
-e 's^/[0-9]\{1,2\}\(:[0-9]\)\{3\}/block/^ ^' \
\
| while read Path HostFull ID
do
# this nifty line will tokenize HostFull into named substrings ( = host numbers)
IFS=: read HostMain HostMid HostSub <<< "$HostFull"
if grep -q '/usb[0-9]*/' <<< $Path; then
echo "(Device $ID is not an ATA device, but a USB device [e. g. a pen drive])"
else
echo $ID: ata$(cat $Path/host$HostMain/scsi_host/host$HostMain/unique_id).$HostMid$HostSub
fi
done