Páginas

sábado, 8 de septiembre de 2012

Conoce los detalles de tu hardware - Interpretando el output de lshw

Hola! Espero, con este post, comenzar una serie de post dedicados a comandos utiles. Para realizar este post intente recopilar la mayor cantidad de informacion, de manera de poder crear uno de los post mas completos en castellano. Dado que el post tiene mucha informacion, esta es de diferente nivel tecnico. Cada apartado esta escrito con letra grande, por ende, si hay algo que no entiendes, y solo quieres saber como se usa el programa, puedes buscar el titulo asociado al uso del programa y listo.

lshw
Los elementos del hardware de tu sistema, al ser detectados por el nucleo y sus modulos siempre dejaran rastros, ya sea en algunos logs, o en carpetas como /proc y /sys. Mediante la recopilacion y analisis de esta informacion, lshw nos entrega un output completisimo, claro, conciso y sencillo de interpretar.

lshw (Hardware Lister) es una pequena herramienta desarrollada solo para Linux, que provee informacion detallada sobre la configuracion de hardware de tu maquina. Puede reportar la configuracion exacta de la memoria, version del firmware, configuracion de la placa madre, version y velocidad del CPU, configuracion del cache, velocidad del bus, dispositivos conectados a interfaces PCI, USB o IDE, etc. 

Con lshw puedes obtener informacion detalladisima de tu maquina, sin siquiera sacar un tornillo. Ademas es sumamente util en caso de que trabajes con un servidor alojado en un data center al que no tengas acceso fisico.

lshw es una herramienta desarrollada para utilizar mediante linea de comando, sin embargo existe una herramienta grafica. Esta herramienta grafica, si bien facilita el uso al usuario, no es tan completa como utilizarla desde la linea de comando. El nombre de la herramienta grafica es lshw-gtk, y para instalarla, utilicen su getsor de paquetes preferido, dado que probablemente , o adecuado a su distro. En mi caso:
apt-get install lshw-gtk
Dado que la herramienta grafica es sumamente intuitiva, en este post me referire solamente a como trabajar con lshw (desde linea de comando).


Como interpretar el output de lshw

Un ejemplo de output para lshw seria asi (en un Dell OptiPlex GXa, Pentium II 266MHz, Memoria de 192 MB):

dell product: OptiPlex GXa 266L EM+ vendor: Dell Computer Corporation serial: NL2SC capabilities: smbios-2.2 dmi-2.2 *-core *-firmware description: BIOS vendor: Dell Computer Corporation version: A10 (06/23/00) size: 64KB capacity: 192KB capabilities: isa pci pnp apm upgrade shadowing escd cdboot bootselect edd int13floppytoshiba int13floppy360 int13floppy1200 int13floppy720 int13floppy2880 int5printscreen int9keyboard int14serial int17printer int10video *-cpu product: Pentium II (Klamath) vendor: GenuineIntel slot: Microprocessor size: 266MHz capacity: 333MHz clock: 66MHz capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov mmx *-cache:0 description: Internal L1 Cache size: 32KB capacity: 32KB *-cache:1 description: Pipeline burst Synchronous External L2 write-back Cache size: 512KB capacity: 512KB *-memory description: System Memory slot: System board or motherboard size: 192MB capacity: 384MB *-bank:0 description: DIMM DRAM Synchronous 64 bits slot: DIMM_A size: 64MB *-bank:1 description: DIMM DRAM Synchronous 64 bits slot: DIMM_B size: 64MB *-bank:2 description: DIMM DRAM Synchronous 64 bits slot: DIMM_C size: 64MB

Entonces, podemos ver que lshw nos entrega su output dividido en nodos con atributos desplegados en la siguiente estructura de arbol:
system information motherboard information cpu information cache, logical cpu memory capacity, total size, individual bank information pci slot information ide slot information disk information total size, partition, usb slot information network
Cada nodo tiene un estatus individual. Puede ser CLAIMED (potencialmente usable) o UNCLAIMED (no hay driver detectado para este nodo), ENABLED (este dispositivo es soportado y puede ser usado) o DISABLED (este dispositivo es soportado, pero ha sido deshabilitado):
  • Un nodo sera marcado como CLAIMED si ha sido cargado un driver para el nodo.
  • Un nodo sera marcado como UNCLAIMED si no se ha cargado soporte especifico para el.
  • Un nodo sera marcado como ENABLED si se ha cargado un nodo para el, y esta funcionando completamente.
  • Un nodo sera marcado como DISABLED si el nodo ha sido deshabilitado por la configuracion, algun fallo del hardware, etc.
Cada nodo puede contener subnodos y pueden tener diferentes attribute (atributos), capabilities (capacidades), resources (recursos) y valores de configuracion:

Attributes (Atributos)
AtributoSignificadoEjemplo 1Ejemplo 2Ejemplo 3Ejemplo 4
ididentificador interno usado por lshwcpu:2network:1cdrom:0disk:2
classclase del dispositivoprocessornetworkdiskdisk
descriptiondescripcion del nodo de hardwareCPUEthernet interfaceDVD readerSCSI disk
vendorfabricante del dispositivoIntel Corp.Advanced Micro Devices [AMD]QUANTUM
productnombre de producto del dispositivoIntel(R) Pentium(R) 4 CPU 1.90GHz79c970 [PCnet32 LANCE]Hewlett-Packard DVD Writer 100ATLAS IV 9 WLS
versionversion del dispositivo15.1.2251.370707
serialnumero de serie del dispositivo00:60:b0:87:86:22CN1AA0786J369914632368
capacitycapacidad maxima reportada por del dispositivo100000000 (100MB/s)9167634432(8742MB)
sizetamano del dispositivo1900000000(1.9GHz)10000000 (10MB/s)9105018880(8683MB)
clockReloj del bus (en Hz) del dispositivo100000000(100MHz)33000000 (33MHz)
widthaddress width del dispositivo (32 or 64 bits)
(Nada que ver con tener un driver 32-64)
3232
slotslot en el cual el dispositivo es conectadoProcessor 1
logicalnamenombre logico bajo el cual el nodo es mostrado en el sistemaeth0/dev/hdc/dev/sdc
devnumero del dispositovo (mayor.menor)22d:0d8d:32d
businfoinformacion de buscpu@0pci@02:0a.0ide@1.0scsi@0:0.12.0
physidid fisica4a00.c.0

Capabilities (Capacidades)
Las capacidades se usan para reportar las caracteristicas de un nodo determinado. El significado exacto de cada caracteristica depende del tipo de nodo. Puede ser la presencia de un coprocesador aritmetico para un CPU, la capacidad para correr a 1GB/s de una determinada interfaz de red, etc. En la mayoria de los casos, las capacidades reportadas por lshw son autodocumentadas.

Resources (Recursos)
Resource typeDescripcionEjemplos
irqIRQirq:16
ioportI/O portsioport:1f0(size=8)
ioport:3f6
ioport:170(size=8)
ioport:376
ioport:50c0(size=16)
iomemI/O windowiomem:00006000-000060ff
iomem:00006400-000064ff
memorymemory window (prefetchable or not)memory:88000000-8bfff000(prefetchable)
memory:90000000-93fff000


Clases de dispositivo
Si quieres saber el estado, descripcion o detalles de algun tipo de hardware especifico, por ejemplo, relacionado al almacenamiento, a la red, al sistema, al procesador, los dispositivos usb, pci, etcetera, lshw puede darte un reporte especifico, si usas la opcion -class, -C o -c. mas la clase de dispositivo de la que quieras saber. Asi es la sintaxix del comando:

lshw -class clase lshw -C clase lshw -c clase
donde debes reemplazar la palabra "clase" por cualquiera de las siguientes opciones:
ClasseDescripcionEjemplos
systemSe refiere a toda la maquinalaptop, server, desktop computer
bridgeconvertidor de bus internoPCI-to-PCI brige, AGP bridge, PCMCIA controler, host bridge
memorybanco de memoria que puede contener info, codigo ejecutable, etc.RAM, BIOS, firmware, extension ROM
processorprocesadorCPUs, RAID controller on a SCSI bus
addressmemory address rangeextension ROM, video memory
storagecontrolador de almcenamientoSCSI controller, IDE controller
diskdispositivo de almacenamiento de acceso remotodiscs, optical storage (CD-ROM, DVD±RW...)
tapedispositivo de almacenamiento de acceso secuencialDAT, DDS
busdevice-connecting busUSB, SCSI, Firewire
networkinterfaz de redEthernet, FDDI, WiFi, Bluetooth
displayadaptador de displayEGA/VGA, UGA...
inputdispositivo de input de usuariokeyboards, mice, joysticks...
printerdispositivo de impresionprinter, all-in-one
multimediadispositivo de audio/video sound card, TV-output card, video acquisition card
communicationdispositivo de comunicacion de lineaserial ports, modem
powerfuente de energiapower supply, internal battery
volumevolumen de discofilesystem, swap, etc.
genericdispositivo generico (se usa cuando no hay una clase predefinida)

Aca encontre la misma tabla, pero for dummies:

Opciones y uso de lshw
lshw necesita correr con privilegios de usuario root para poder acceder a toda la informacion disponible.
Si pides ayuda al programa (usuario@computador:~# lshw -help ; usuario@computador:~# lshw -h), el output es el siguiente:


usage: lshw [-format] [-options ...]
       lshw -version

-version        print program version (B.02.15)

format can be
-html           output hardware tree as HTML
-xml            output hardware tree as XML
-short          output hardware paths
-businfo        output bus information

options can be
-class CLASS    only show a certain class of hardware
-C CLASS        same as '-class CLASS'
-c CLASS        same as '-class CLASS'
-disable TEST   disable a test (like pci, isapnp, cpuid, etc. )
-enable TEST    enable a test (like pci, isapnp, cpuid, etc. )
-quiet          don't display status
-sanitize       sanitize output (remove sensitive information like serial numbers, etc.)
-numeric        output numeric IDs (for PCI, USB, etc.)

Entonces. lshw tiene opciones de formato, en las que puedes escoger que el output salga en archivos HTML o xml:

# lshw [-html | -xml] [resto de opciones] > /ruta/donde/alojarlo/archivo.html
# lshw -html > hwinfo.html
# lshw -xml > hwinfo.xml
Puedes "pedir" que te de un reporte mas corto (-short), que te muestra los paths del hardware, y puedes pedir un reporte que presente la informacion de bus (-businfo)
La forma general de la informacion de bus es tipo_de_bus@direccion.hexadecimal.punteada

BusDescripcionFormatoEjemplo
cpuCPUscpu@id[,logicalcpu]cpu@0
cpu@0,1
firewireFireWire (IEEE1394)firewire@GUIDfirewire@0030e0f4e020ca8c
ideATA/ATAPI/IDEide@controler.idide@0.0 (master)
ide@0.1 (slave)
pciPCI (or AGP) buspci@bus:slot.functionpci@02:0a.0
scsiSCSI busscsi@controler:target.id.lunscsi@0:0.12.0
usbUniversal Serial Bususb@controler:slot.idusb@1:2.2


Si quieres saber la version de lshw, simplemente: lshw -version
Si tienes la version GUI, la puedes lanzar con lshw -X

Hay otro grupo de opciones, las que no son de formato.
Ya sabemos que para acotar el output de lshw a un tipo de dispositivos, ya sea, disco, memoria, red, etc, hacemos:
lshw -C clase_de_dispositivo
lshw -c clase_de_dispositivo
lshw -C clase_de_dispositivo
Estas tres maneras otorgan el mismo output.
Si quieres deshabilitar el output de algun dispositivo, lshw -disable test, donde test es el dispositivo
Si quieres habilitar el output de algun dispositivo, lshw -enable test, donde test es el dispositivo
La opcion -quiet no muestra el estado del dispositivo en cuestion
Con -numeric, lshw te otorga un output numerico para los IDs de los dispositivos
Y finalmente, una opcion interesantisima si quieres hacer preguntas en foros, mailing lists, etc es -sanitize, que oculta datos que debieran ser privados, ya que identifican tu HW, o incluso te podrian identificar a ti (como numeros seriales, ips, etc)



Fuentes:
Wiki del proyecto
Articulo en Linux Magazine
Post en The Geek Stuff
Wiki en esdebian