wtorek, 24 listopada 2009

Sprawdzanie nazw podzespołów pod Linuksem

Rozpoznanie poszczególnych komponentów z jakich zbudowany jest nasz komputer w systemie Fedora, serwer w systemie Windows nie jest zbyt skomplikowane. Wystarczy, że uruchomimy menadżer urządzeń czy informacje o systemie. Zatem nawet początkujący użytkownik w łatwy sposób potrafi określić zasoby sprzętowe bez wyłączania maszyny. Pod Linuksem jednak nie jest tak łatwo i przyjemnie, w szczególności gdy się tego nigdy nie robiło.

Podstawą jest posiadanie dostępu do konta root -a systemie operacyjnym Linuks Fedora na maszynie, której będziemy musieli zidentyfikować poszczególne zasoby sprzętowe. Bez tego oczywiście da się odnaleźć różne informacje, ale nie do wszystkich ma dostęp zwykły użytkownik, chyba, że posiada śrubokręt i młotek.

Większość informacji w systemie Linuks Fedora można odczytać z procfs. Jest to to wirtualny system plików, który pozwala na komunikację z jądrem uniksowego systemu operacyjnego poprzez interfejs VFS. Jego struktura plików i katalogów nie jest związana z żadnym nośnikiem danych, a występuje jedynie w pamięci operacyjnej komputera.








Rozpoznanie procesora

Jest to nie wątpliwie najprostsza rzecz jaką możemy zidentyfikować w systemie Linux. Wystarczy jako root wpisać następujące czerwome polecenie:





root@adam-desktop:/home/adam# cat /proc/cpuinfo

processor : 0

vendor_id : AuthenticAMD

cpu family : 15

model : 67

model name : AMD Athlon(tm) 64 X2 Dual Core Processor 6000+

stepping : 3

cpu MHz : 3000.000

cache size : 1024 KB

physical id : 0

siblings : 2

core id : 0

cpu cores : 2

apicid : 0

initial apicid : 0

fdiv_bug : no

hlt_bug : no

f00f_bug : no

coma_bug : no

fpu : yes

fpu_exception : yes

cpuid level : 1

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy

bogomips : 6027.49

clflush size : 64

power management: ts fid vid ttp tm stc



processor : 1

vendor_id : AuthenticAMD

cpu family : 15

model : 67

model name : AMD Athlon(tm) 64 X2 Dual Core Processor 6000+

stepping : 3

cpu MHz : 3000.000

cache size : 1024 KB

physical id : 0

siblings : 2

core id : 1

cpu cores : 2

apicid : 1

initial apicid : 1

fdiv_bug : no

hlt_bug : no

f00f_bug : no

coma_bug : no

fpu : yes

fpu_exception : yes

cpuid level : 1

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy

bogomips : 6027.49

clflush size : 64

power management: ts fid vid ttp tm stc




Jeżeli nasz procesor jest wielordzeniowy, lub nasza maszyna posiada kilka fizycznych procesorów, to taki układ danych:



procesor: rdzeń_id



Bogomips: bogomips_rdzenia




zostanie wyświetlony kilka razy jeden za drugim, i będą się różnić tylko pierwszym i ostatnim wierszem.



O ile w przypadku maszyn z maksymalnie jednym procesorem najbardziej istotną informacją są obsługiwane flagi - wspiera sprzętowe wirtualizację (flaga vmx dla Intela i svm dla AMD), 64 bitowy procesor (flaga lm), tak w przypadku płyt dwu i więcej procesorowych różnica chociaż jednego z tych elementów:







vendor_id

cpu family

model

model name

stepping

flags




może spowodować wiele problemów. Między innymi:



  • niestabilnej pracy usług i aplikacji
  • maszyny wirtualne lub usługa je nadzorująca może się nie uruchomić
  • niestabilnej pracy systemu
  • nie możności uruchomienia systemu


Innym sposobem na pozyskanie informacji o procesorze jest wykorzystanie pliku logu dmesg znajdującego się domyślnie w /var/log. W tym celu posłużymy się poleceniem: cat /var/log/dmesg | grep -i cpu





root@adam-desktop:/home/adam# cat /var/log/dmesg | grep -i cpu

[ 0.000000] Initializing cgroup subsys cpuset

[ 0.000000] Initializing cgroup subsys cpu

[ 0.000000] KERNEL supported cpus:

[ 0.000000] Transmeta TransmetaCPU

[ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs

[ 0.000000] PERCPU: Allocating 45056 bytes of per cpu data

[ 0.000000] NR_CPUS: 64, nr_cpu_ids: 2, nr_node_ids 1

[ 0.000000] Initializing CPU#0

[ 0.004000] SLUB: Genslabs=12, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1

[ 0.004000] HPET: 3 timers in total, 0 timers will be used for per-cpu timer

[ 0.004000] Initializing cgroup subsys cpuacct

[ 0.004000] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)

[ 0.004000] CPU: L2 Cache: 1024K (64 bytes/line)

[ 0.004000] CPU: Physical Processor ID: 0

[ 0.004000] CPU: Processor Core ID: 0

[ 0.251533] CPU0: AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ stepping 03

[ 0.004000] Initializing CPU#1

[ 0.004000] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)

[ 0.004000] CPU: L2 Cache: 1024K (64 bytes/line)

[ 0.004000] CPU: Physical Processor ID: 0

[ 0.004000] CPU: Processor Core ID: 1

[ 0.336193] CPU1: AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ stepping 03

[ 0.336229] Brought up 2 CPUs

[ 0.336329] CPU0 attaching sched-domain:

[ 0.336330] domain 0: span 0-1 level CPU

[ 0.336336] CPU1 attaching sched-domain:

[ 0.336337] domain 0: span 0-1 level CPU

[ 0.440013] Switched to high resolution mode on CPU 0

[ 0.440242] Switched to high resolution mode on CPU 1

[ 0.885651] cpufreq: No nForce2 chipset.

[ 0.915950] processor ACPI_CPU:00: registered as cooling_device1

[ 0.915973] processor ACPI_CPU:01: registered as cooling_device2

[ 10.469541] cpuidle: using governor ladder

[ 10.469542] cpuidle: using governor menu

[ 10.470477] powernow-k8: Found 1 AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ processors (2 cpu cores) (version 2.20.00)

root@adam-desktop:/home/adam#




Jak widać ilość danych jest spora, ale jeżeli weźmiemy pod uwagę ich użyteczność to jest bardzo niska. Z całego liseningu najistotniejsze wpisy to:







CPU: Processor Core ID: 0

CPU0: AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ stepping 03

CPU: Processor Core ID: 1

CPU0: AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ stepping 03





CPU: Processor Core ID: 0 CPU: Processor Core ID: 1 informują, iż procesor jest dwurdzeniowy. W przypadku gdyby to były dwa niezależne procesory tych wpisów by nie było.







Rozpoznanie dysków twardych



W celu identyfikacji dysków zainstalowanych w naszej maszynie posłużymy się poleceniem: hdparm. Jednakże ze względu na różny sposób prezentacji urządzeń w systemie, który jest zależny od między innymi rodzaju interfejsu polecenie wyjściowe może się różnić Aby zidentyfikować sposób prezentacji dysku (nie partycji) wykorzystamy polecenie: fdisk z odpowiednim filtrowaniem, które ostatecznie będzie wyglądać tak:









root@adam-desktop:/home/adam# fdisk -l | grep -i disk

Disk /dev/sda: 320.0 GB, 320072933376 bytes

Disk identifier: 0xdcfddcfd

Disk /dev/sdb: 80.0 GB, 80026361856 bytes

Disk identifier: 0x05720571

root@adam-desktop:/home/adam#






Widzimy 2 dyski /dev/sda: 320.0 GB i /dev/sdb: 80.0 GB





Skoro już znamy ścieżkę do naszych urządzeń to możemy przystąpić do ich identyfikacji. Do tego celu wykorzystamy polecenie:



root@adam-desktop:/home/adam# hdparm -i /dev/sda |grep -i model

Model=ST3320620AS , FwRev=3.AAK , SerialNo= 9QF55JBD

root@adam-desktop:/home/adam#






W powyższym przypadku bez problemu pozyskaliśmy informację o dysku twardym. Znamy dokładny model dysku wraz z rewizją oraz numerem seryjnym. W ten sposób uzyskane dane w zupełności wystarczą do znalezienia wszelkich informacji na temat naszego dysku.







Rozpoznanie napędów optycznych



W celu identyfikacji napędu optycznego w naszym komputerze posłużymy się poleceniem:



cat /var/log/dmesg | grep -i rom







root@adam-desktop:/home/adam# cat /var/log/dmesg | grep -i rom

[ 0.000000] Move RAMDISK from 00000000378b9000 - 0000000037fef9e9 to 0087b000 - 00fb19e9

[ 0.356457] pci 0000:00:04.0: PME# supported from D0 D1 D2 D3hot D3cold

[ 0.356663] pci 0000:00:09.1: PME# supported from D3hot D3cold

[ 0.356740] pci 0000:00:0a.0: PME# supported from D0 D1 D2 D3hot D3cold

[ 0.356783] pci 0000:00:0a.1: PME# supported from D0 D1 D2 D3hot D3cold

[ 0.357034] pci 0000:00:0e.1: PME# supported from D3hot D3cold

[ 0.357099] pci 0000:00:10.0: PME# supported from D0 D1 D2 D3hot D3cold

[ 0.357161] pci 0000:00:11.0: PME# supported from D0 D1 D2 D3hot D3cold

[ 0.357198] pci 0000:00:16.0: PME# supported from D0 D1 D2 D3hot D3cold

[ 0.357427] pci 0000:02:0b.0: PME# supported from D0 D1 D2 D3hot

[ 10.379846] scsi 8:0:1:0: CD-ROM HL-DT-ST DVD-RAM GSA-H54L 1.00 PQ: 0 ANSI: 5

[ 10.384013] Uniform CD-ROM driver Revision: 3.20

[ 10.384067] sr 8:0:1:0: Attached scsi CD-ROM sr0 "sr0 nazwa napedu scieżka do niego wygląda tak /dev/sr0"

[ 10.392063] usb usb1: configuration #1 chosen from 1 choice

[ 10.450031] usb usb2: configuration #1 chosen from 1 choice

[ 10.465058] rtc_cmos 00:05: RTC can wake from S4

[ 11.103410] usb 1-9: configuration #1 chosen from 1 choice

[ 11.620084] usb 2-1: configuration #1 chosen from 1 choice

[ 12.139075] usb 2-2: configuration #1 chosen from 1 choice

[ 21.470034] ck804xrom ck804xrom_init_one(): Unable to register resource 0x00000000ff000000-0x00000000ffffffff - kernel bug?

root@adam-desktop:/home/adam#









Uzyskaliśmi informacje o napędzie





Znając ścieżkę systemową możemy teraz sprawdzić również nasz napęd optyczny za pomocą polecenia:





root@adam-desktop:/home/adam# hdparm -i /dev/sr0 | grep -i model

Model=HL-DT-STDVD-RAM GSA-H54L , FwRev=1.00 , SerialNo=

root@adam-desktop:/home/adam#










Rozpoznanie płyty głównej



Żeby zidentyfikować płytę główną wydajemy polecenie z pod roota :





root@adam-desktop:/home/adam# dmidecode -t baseboard

# dmidecode 2.9

SMBIOS 2.4 present.





Handle 0x0002, DMI type 2, 8 bytes

Base Board Information

Manufacturer: ASUSTeK Computer INC.

Product Name: M2N32-SLI DELUXE

Version: 1.XX

Serial Number: 123456789000





root@adam-desktop:/home/adam#





Moja płyta główna to :





Manufacturer: ASUSTeK Computer INC.

Product Name: M2N32-SLI DELUXE

Serial Number: 123456789000




Z pierwszej lini odczytamy nazwę producenta, z drugiej dokładny model, a z trzeciego numer rewizji płyty. W rzeczywistości ostatni wiersz, w przypadku nie firmowych zestawów możemy pominąć. Powodem tego jest fakt, iż płyty główne do tzw. składaków, rzadko kiedy mają uzupełniony numer seryjny. W przypadku markowych zestawów identyfikacja podzespołu odbywa się po przez numer seryjny.

Dodatkowe informacje o płycie głównej (np. kontroler USB, informacje o chipsecie mostka południowego) można odczytać używając polecenia lspci.







Rozpoznanie biosu

Aby odczytać informacje o wersji naszego biosu w systemie Linux wykorzystamy polecenie:



dmidecode -t bios



root@adam-desktop:/home/adam# dmidecode -t bios

# dmidecode 2.9

SMBIOS 2.4 present.



Handle 0x0000, DMI type 0, 24 bytes

BIOS Information

Vendor: Phoenix Technologies, LTD

Version: ASUS M2N32-SLI DELUXE ACPI BIOS Revision 1201

Release Date: 06/20/2007

Address: 0xE0000

Runtime Size: 128 kB

ROM Size: 1024 kB

Characteristics:

PCI is supported

PNP is supported

APM is supported

BIOS is upgradeable

BIOS shadowing is allowed

Boot from CD is supported

Selectable boot is supported

BIOS ROM is socketed

EDD is supported

5.25"/360 KB floppy services are supported (int 13h)

5.25"/1.2 MB floppy services are supported (int 13h)

3.5"/720 KB floppy services are supported (int 13h)

3.5"/2.88 MB floppy services are supported (int 13h)

Print screen service is supported (int 5h)

8042 keyboard services are supported (int 9h)

Serial services are supported (int 14h)

Printer services are supported (int 17h)

CGA/mono video services are supported (int 10h)

ACPI is supported

USB legacy is supported

LS-120 boot is supported

ATAPI Zip drive boot is supported

BIOS boot specification is supported

Targeted content distribution is supported



Handle 0x003E, DMI type 13, 22 bytes

BIOS Language Information

Installable Languages: 3

n|US|iso8859-1

n|US|iso8859-1

r|CA|iso8859-1

Currently Installed Language: n|US|iso8859-1



root@adam-desktop:/home/adam#










Na ekran została wypisana pokaźna liczba danych. Jednak interesujące nas fragmenty znajdują się głównie tuż przy wywołaniu polecenia, i są to:



BIOS Information

Vendor: Phoenix Technologies, LTD

Version: ASUS M2N32-SLI DELUXE ACPI BIOS Revision 1201

Release Date: 06/20/2007








Co to znaczy:



Vendor: Phoenix Technologies, LTD -> rodzaj biosu

Version: ASUS M2N32-SLI DELUXE ACPI
"BIOS Revision 1201 -> wersja biosu"

Release Date: 06/20/2007 -> data wydania biosu






Rozpoznanie pamięci





Pamięci sprawdzamy wydając polecenie :



dmidecode -t memory




Konsola wyrzuciła nam dość sporo informacji ale najważniejsze są linie wyglądające tak:





Handle 0x0040, DMI type 17, 27 bytes

Memory Device

Array Handle: 0x003F

Error Information Handle: Not Provided

Total Width: 64 bits

Data Width: 64 bits

Size: 1024 MB

Form Factor: DIMM

Set: None

Locator: DIMM_A1

Bank Locator: Bank0/1

Type: Unknown

Type Detail: None

Speed: 800 MHz (1.2 ns)

Manufacturer: None

Serial Number: None

Asset Tag: None

Part Number: None



Handle 0x0041, DMI type 17, 27 bytes

Memory Device

Array Handle: 0x003F

Error Information Handle: Not Provided

Total Width: 64 bits

Data Width: 64 bits

Size: 1024 MB

Form Factor: DIMM

Set: None

Locator: DIMM_B1

Bank Locator: Bank2/3

Type: Unknown

Type Detail: None

Speed: 800 MHz (1.2 ns)

Manufacturer: None

Serial Number: None

Asset Tag: None

Part Number: None



Handle 0x0042, DMI type 17, 27 bytes

Memory Device

Array Handle: 0x003F

Error Information Handle: Not Provided

Total Width: 64 bits

Data Width: 64 bits

Size: 1024 MB

Form Factor: DIMM

Set: None

Locator: DIMM_A2

Bank Locator: Bank4/5

Type: Unknown

Type Detail: None

Speed: 800 MHz (1.2 ns)

Manufacturer: None

Serial Number: None

Asset Tag: None

Part Number: None



Handle 0x0043, DMI type 17, 27 bytes

Memory Device

Array Handle: 0x003F

Error Information Handle: Not Provided

Total Width: 64 bits

Data Width: 64 bits

Size: 1024 MB

Form Factor: DIMM

Set: None

Locator: DIMM_B2

Bank Locator: Bank6/7

Type: Unknown

Type Detail: None

Speed: 800 MHz (1.2 ns)

Manufacturer: None

Serial Number: None

Asset Tag: None

Part Number: None










Można odczytać że posiadam 4 kości pamięci po 1024 Mb pojemności o pracujące z częstotliwością 800 Mhz







Rozpoznanie karty sieciowej



Informacje o karcie sieciowej możemy uzyskać na dwa sposoby. Pierwszym z nich jest wykorzystanie polecenia



lspci | grep -i eth
















root@adam-desktop:/home/adam# lspci | grep -i eth 00:10.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3) 00:11.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3) root@adam-desktop:/home/adam#
Z powyższego listingu bez problemu jesteśmy w stanie zidentyfikować karty sieciowe znajdującej się w naszej maszynie. Są to dwie karty sieciowe:



nVidia Corporation MCP55 Ethernet (rev a3)




Drugim sposobem jest przejrzenie logu dmesg. Jednak podobnie jak w poprzednich przypadkach trzeba użyć odpowiedniego filtrowania aby nie zostać zalanym zbędnymi danymi, które w tym przypadku nas nie interesują. A zatem wykorzystamy polecenie:



cat /var/log/dmesg | grep -i eth





A za tym które polecenie wyświetla więcej przydatnych informacji? W tym przypadku będzie to lspci. Powodem jest fakt, iż oprócz dokładnej identyfikacji producenta i chipsetu karty sieciowej, możemy również odczytać numer jej rewizji.

W remoncie post.







Rozpoznanie karty graficznej



Najszybszym i w miarę dokładnym sposobem na określenie rodzaju i modelu karty graficznej jest użycie polecenia:



lspci | grep -i vga


root@adam-desktop:/home/adam# lspci | grep -i vga

01:00.0 VGA compatible controller: ATI Technologies Inc RV570 [Radeon X1950 Pro]

root@adam-desktop:/home/adam#




W tym przykładzie z wyniku wykonania polecenia oprócz informacji o producencie, modelu GPU oraz rodzinie do której należy karta graficzna nie uzyskamy nic więcej. Ilość i typ pamięci czy interfejs komunikacji PCI/AGP nadal są nieznane.







Rozpoznanie karty dźwiękowej

W celu określenia karty dźwiękowej jaka została zainstalowana w naszej maszynie, posłużymy się poleceniem:



lspci | grep -i audio



root@adam-desktop:/home/adam# lspci | grep -i audio

00:0e.1 Audio device: nVidia Corporation MCP55 High Definition Audio (rev a2)

root@adam-desktop:/home/adam#




Wynik polecenia, a co za tym idzie w ten sposób pozyskane dane są ogólnikowe i mogą nie wystarczyć do poprawnej identyfikacji. Jednakże bez większych problemów jesteśmy w stanie określić producenta oraz rodzinę, do której przynależy nasz dźwiękówka.





Rozpoznanie innych komponentów

W przypadku urządzeń podłączanych np. przez USB, czyli między innymi:

  • napędy USB
  • drukarki
  • skanery
  • kamery
najbardziej pomocne będzie polecenie: cat /var/log/messages . Jednakże ilość pozyskanych w ten sposób danych jest bardzo duża, wyłowienie interesujących nas kawałków może być bardzo trudne.





Polecenie rozpoznające użądzenia podłączone pod USB:



lsusb





root@adam-desktop:/home/adam# lsusb

Bus 001 Device 006: ID 054c:0243 Sony Corp. MicroVault Flash Drive

Bus 001 Device 004: ID 0bda:8187 Realtek Semiconductor Corp. RTL8187 Wireless Adapter

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 002 Device 003: ID 06b9:4061 Alcatel Telecom SpeedTouch ISDN or ADSL Modem

Bus 002 Device 002: ID 041e:4052 Creative Technology, Ltd Live! Cam Vista IM

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

root@adam-desktop:/home/adam#