2013-09-30 2 views
2

Я думал, что у меня был хороший способ определить, какие диски были внутренними и какие внешние (USB). Пока я натыкался на это:Идентификация внутренних дисков и USB-накопителей bash

/вар/протоколировать/сообщения *

Sep 24 03:40:02 myHostName kernel: sd 0:0:0:0: [sda] 3907029164 512-byte logical blocks: (2.00 TB/1.81 TiB) 
    Sep 24 03:40:02 myHostName kernel: sd 1:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB) 
    Jul 21 14:57:01 myHostName kernel: sd 6:0:0:0: [sdb] 3907029164 512-byte logical blocks: (2.00 TB/1.81 TiB) 
    Jul 22 06:45:39 myHostName kernel: sd 1:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB) 
    Jul 22 15:06:30 myHostName kernel: sd 0:0:0:0: [sda] 3907029164 512-byte logical blocks: (2.00 TB/1.81 TiB) 
    Jul 22 15:06:30 myHostName kernel: sd 1:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB) 
    Jul 25 15:13:06 myHostName kernel: sd 7:0:0:0: [sdc] 3907029164 512-byte logical blocks: (2.00 TB/1.81 TiB) 
    Jul 26 15:19:39 myHostName kernel: sd 0:0:0:0: [sda] 3907029164 512-byte logical blocks: (2.00 TB/1.81 TiB) 
    Jul 26 15:19:39 myHostName kernel: sd 1:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB) 
    Jul 26 15:23:28 myHostName kernel: sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB) 

SDA и SDB диски на этой системе обмена от внутреннего к внешнему! Кто-нибудь знает, как я могу определить, какие устройства являются внутренними и которые являются внешними в Linux? Мне нужно взглянуть на ИСТОРИЯ, поэтому мне действительно нужно иметь возможность оглянуться на ранее установленные устройства. Моим старым методом было смотреть на все, что есть «sdb-sdX», игнорируя sda. Это неправильно на машине выше. Я даже не знаю, как это делается. Всегда считалось, что SDA является первым внутренним устройством.

ответ

0

на моей системе RHEL6 я был в состоянии сделать следующие запросы, чтобы получить выход, который я искал:

cat /var/log/messages* | egrep -i 'usb [0-9]-|mounted|logical blocks' > ${USBDATA} 
cat ${USBDATA} | grep "New USB device found" > ${NewUSBDev} 


while read line; do 

    MONTH="`echo ${line} | awk '{print $1}'`" ; # -- Jul 
    DAY="`echo ${line} | awk '{print $2}'`" # -- day_ 
    HOUR="`echo ${line} | awk '{print $3}' | cut -d':' -f1`:" # -- hour: 
    MIN="`echo ${line} | awk '{print $3}' | cut -d':' -f2`:" # -- hour: 

    # -- echo "M:[$MONTH] D:[$DAY] H:[${HOUR}${MIN}]" 

    cat ${USBDATA} | grep ${MONTH} | grep "${DAY} ${HOUR}${MIN}" > ${CHUNK} 

    awk '/New USB device found/{p++}p==1' ${CHUNK} > ${TMPFILE} 
    cp ${TMPFILE} ${CHUNK} 

    if [ "$(cat $CHUNK| egrep 'MiB|GiB|TiB')" ] && ! [ "$(cat $CHUNK | grep 'Mounted root filesystem')" ] ;then 
     # -- cat ${CHUNK} 
     STR="$(less ${CHUNK}|grep 'idProduct' | head -1 | awk '{print $1" "$2" "$3" "$12" "$13}')" 
     STR="$STR $(less ${CHUNK}|grep 'Product:' | awk '{print ", "$9" "$10" "$11}')" 
     STR="$STR $(less ${CHUNK}|grep 'Manufacturer:' | awk '{print ", "$9" "$10" "$11}')" 
     STR="$STR $(less ${CHUNK}|grep 'SerialNumber:' | awk '{print ", "$9}')" 
     STR="$STR $(less ${CHUNK}|grep 'logical blocks:' | head -1 | awk '{print ", "$13" "$14" "$15" "}')" 
     echo "${STR}" 
     echo "${STR}" >> ${DEVICES} 
    fi 

    [ -f ${CHUNK} ] && rm ${CHUNK} 

done < ${NewUSBDev} 
echo "----------------------------------------------" 
cat ${DEVICES} | sort -M -k 2 > ${SORTEDDEV} 
cat ${SORTEDDEV} 

В основном, это немного некрасиво, но он ищет все «Новое устройство USB найден "и создает список строк, которые содержат это. Затем вытаскивает все, что соответствует этой отметке времени. Затем вытаскивает все, прежде чем «Новое USB-устройство обнаружит», и все после второго матча на «New USB device found».

Пример $ {} CHUNK данных будет выглядеть следующим образом:

Sep 30 09:55:10 oc7446274465 kernel: usb 2-1: New USB device found, idVendor=1058, idProduct=071a 
    Sep 30 09:55:10 oc7446274465 kernel: usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 
    Sep 30 09:55:10 oc7446274465 kernel: usb 2-1: Product: My Passport 071A 
    Sep 30 09:55:10 oc7446274465 kernel: usb 2-1: Manufacturer: Western Digital 
    Sep 30 09:55:10 oc7446274465 kernel: usb 2-1: SerialNumber: 575846314136304130353235 
    Sep 30 09:55:10 oc7446274465 kernel: usb 2-1: configuration #1 chosen from 1 choice 
    Sep 30 09:55:22 oc7446274465 kernel: sd 5:0:0:0: [sdb] 1465092096 512-byte logical blocks: (750 GB/698 GiB) 

Кладет эти данные в временный файл, а затем отбирает из важных битов. Это может быть улучшено точно, но он работает на данный момент (оглавлению части не входит в коде выше):

Пример вывод:

Sep 10 16:19:14 idVendor=8564, idProduct=1000 , Mass Storage Device , JetFlash , 2978449637 , (31.6 GB/29.4 GiB) 
    Sep 14 15:15:04 idVendor=054c, idProduct=0544 , DSC-HX9V , Sony , D89BE0866 , (20.0 MB/19.1 MiB) 
    Sep 17 19:38:04 idVendor=054c, idProduct=0544 , DSC-HX9V , Sony , D89BE0866 , (31.9 GB/29.7 GiB) 
    Sep 19 05:23:07 idVendor=054c, idProduct=0544 , DSC-HX9V , Sony , D89BE0866 , (31.9 GB/29.7 GiB) 
    Sep 30 09:55:10 idVendor=1058, idProduct=071a , My Passport 071A , Western Digital , 57584631413630XXXXXX235 , (750 GB/698 GiB) 

Поэтому я получаю время, идентификатор информация, название продукта, серийный номер и т. д. Я должен, вероятно, включить проверки на отсутствие данных. Но вы понимаете. Спасибо за входных парней.

3

Я использую это, чтобы определить, если привод откидной (USB): -

diskutil info /dev/disk[n|s{n}] | grep Ejectable 

Disk Utility дает серийные номера для всех ваших дисков.

+0

Не думайте, что это сработает для меня ... Мне нужно увидеть историю. –

+0

Также diskutil не на платформах. Спасибо за помощь. Очень ценится. –

Смежные вопросы