Reconocimiento de hardware. Pablo Sanz Mercado. 1
La información que tiene el sistema operativo acerca del hardware instalado en nuestro ordenador está básicamente ubicada en el directorio /proc que es un claro desconocido para la mayoría de los administradores de sistemas. El sistema proc presenta el estado actual del kernel, y es, podríamos decir, un sistema de archivos virtual, cambiante permanentemente no fácilmente modificable y cuya modificación puede implicar un colapso inmediato del sistema si se hace incorrectamente. Cuando queramos obtener información del hardware de nuestro sistema, básicamente lo que tendremos que hacer es consultar (mediante el comando cat por ejemplo) los archivos contenidos en esta estructura, o bien utilizar herramientas gráficas o comandos que traten esta información y nos la presenten en pantalla de forma clara. 1. Sistema proc. Archivos interesantes que nos podemos encontrar en el directorio /proc son: 1.1. vmstat. Que muestra estadísticas detalladas de la memoria virtual, como por ejemplo: El número de páginas sucias, bajo reescritura o inestable: nr_dirty 1550 nr_writeback 0 nr_unstable 0 Páginas libres: pgfree 110549163 y así un largo etcétera que nos da información muy apreciada cuando necesitemos saber si la memoria está causando algún tipo de inestabilidad que suframos en nuestro equipo. 1.2. partitions En este archivo encontraremos la información de las distintas particiones existentes en nuestros discos duros. La información será el nombre de la partición, los bloques que ocupa y los major number y minor number de las mismas: major minor #blocks name 8 0 58605120 sda 2
8 1 20523006 sda1 8 2 1 sda2 8 3 10265535 sda3 8 4 16434495 sda4 8 5 6144831 sda5 8 6 1004031 sda6 8 7 104391 sda7 8 8 4128673 sda8 1.3. meminfo Si mostramos el contenido de este fichero, obtendremos información sobre la memoria de nuestro equipo, como por ejemplo la memoria total del mismo MemTotal: 481684 kb Memoria libre: MemFree: 52600 kb Swap total: SwapTotal: 1004020 kb Swap disponible SwapFree: 956228 kb etc. 1.4. cpuinfo En este fichero encontraremos la información de las cpus disponibles en nuestro servidor. Dichas cpus (o núcleos), estarán numerados empezando con el número 0, pudiendo así identificar cada una de ellas. Un ejemplo de las primeras líneas de este fichero bien podría ser: processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : Intel(R) Pentium(R) M processor 1.60GHz de tal forma que accediendo al contenido de cpuinfo tendremos la información exacta de las características de nuestras cpus. 3
2. Comandos. Obviamente la información que podemos obtener por comandos, aunque sea la misma que podríamos obtener nosotros accediendo a los archivos previamente comentados, por regla general nos será de mayor utilidad al estar mejor estructurada y al tener ciertas herramientas que nos permiten gestionar esta información de forma más cómoda. Comandos hay muchos, así como herramientas gráficas que básicamente son interfaces gráficos que en última instancia ejecutan comandos presentando la información en un formato altamente agradable. De todos los comandos existentes comentaremos los más utilizados a la hora de localizar problemas en nuestro equipo: 2.1. iostat Este comando lo encontramos en el paquete sysstat, que muchos sistemas no tienen instalado por defecto, pero que es conveniente instalar. iostat nos muestra estadísticas de la cpu así como de entrada y salida de dispositivos, particiones y sistemas de archivos de red, por lo tanto nos podemos hacer una buena idea de la potencia de este comando. Si ejecutamos sin más el comando iostat, obtendremos una imagen del estado actual del equipo: avg-cpu: %user %nice %system %iowait %steal %idle 4,53 0,12 1,11 3,72 0,00 90,52 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 8,25 243,63 83,71 3128500 1074870 no obstante siempre podremos incluir en la ejecución del comando un intervalo, en segundos, de tal forma que nos mostrará esta información cada x segundos que hayamos pedido, por ejemplo: iostat 1 nos mostraría información de la cpu y de los dispositivos cada segundo. 2.2. mpstat Al igual que iostat, este comando se encuentra dentro del útil paquete sysstat muy utilizado desde el punto de vista de administración de sistemas. mpstat nos proporciona la actividad de cada una de las cpus que dispongamos, ofreciéndonos algo más de información que el comando iostat y pudiendo también elegir un intervalo de tiempo, de tal forma que a partir de ese momento cada x segundos se mostraría en pantalla las estadísticas de las cpus. 4
2.3. vmstat Es un comando que nos muestra estadísticas de la memoria virtual. Podríamos decir que básicamente es una salida ordenada del contenido de /proc/meminfo pudiendo además elegir un intervalo de tiempo vmstat 1 para que cada segundo (siguiendo el ejemplo especificado), podamos obtener información actualizada. Obviamente podremos elegir el intervalo de tiempo que más se ajuste a nuestras necesidades. 2.4. top top es un comando ampliamente utilizado por los administradores de sistemas y existente en prácticamente todos los sistemas operativos Linux y UNIX. Este comando nos muestra en pantalla la situación actual de los procesos del sistema, pudiendo cambiar el intervalo de tiempo para que cada x segundos nos muestre esta información actualizada. Teniendo en cuenta que hoy por hoy no es raro administrar máquinas con múltiples cpus (o núcleos), pues la mayoría de los ordenadores personales que se venden ya incluyen procesadores con doble núcleo, cuanto más los servidores dedicados al cálculo, una de las opciones más interesantes de este comando es 1 Si cuando hemos invocado top, pulsamos 1, encontraremos que la información que encontrábamos en la zona superior que era un resumen de todas las cpus existentes, se despliega para dar información pormenorizada de todas y cada una de las cpus existentes top - 17:27:51 up 153 days, 3:06, 4 users, load average: 1.00, 1.00, 1.02 Tasks: 90 total, 2 running, 88 sleeping, 0 stopped, 0 zombie Cpu0 : 0.0% us, 0.0% sy, 0.0% ni, 100.0% id, 0.0% wa, 0.0% hi, 0.0% si Cpu1 : 0.0% us, 0.0% sy, 0.0% ni, 100.0% id, 0.0% wa, 0.0% hi, 0.0% si Cpu2 : 100.0% us, 0.0% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.0% si Cpu3 : 0.0% us, 0.0% sy, 0.0% ni, 100.0% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 2074672k total, 2019472k used, 55200k free, 75196k buffers Swap: 4096564k total, 3360k used, 4093204k free, 1679804k cached 5
2.5. lspci lspci es un comando no muy conocido por administradores noveles, y sin embargo es un poderoso comando que nos muestra la información de los dispositivos pci disponibles en nuestro equipo, con la consiguiente facilidad para poder configurarlos gracias a esta información obtenida. Al ejecutar el comando sin ninguna opción, obtendremos un resumen de los dispositivos encontrados, por ejemplo una de las entradas bien podría ser: 02:07.0 FireWire (IEEE 1394): Texas Instruments TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link) las dos opciones más utilizadas con este comando son -v y -x, que sirven respectivamente para obtener información más detallada y un volcado hexadecimal del espacio de configuración. Además podemos utilizar varias veces -v, concretamente podríamos teclear: lspci -v lspci -vv lspci -vvv obteniendo en cada caso mayor información, por ejemplo la última ejecución nos daría el siguiente resultado para el ejemplo que habíamos utilizado anteriormente: 02:07.0 FireWire (IEEE 1394): Texas Instruments TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link) (prog-if 10 [OHCI]) Subsystem: Hewlett-Packard Company Unknown device 3084 Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- Latency: 64 (500ns min, 1000ns max), Cache Line Size: 32 bytes Interrupt: pin A routed to IRQ 11 Region 0: Memory at e0205000 (32-bit, non-prefetchable) [size=2k] Region 1: Memory at e0200000 (32-bit, non-prefetchable) [size=16k] Capabilities: [44] Power Management version 2 Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+, 6
D3hot+,D3cold-) Status: D0 PME-Enable- DSel=0 DScale=0 PME+ Con respecto a -x, podremos ejecutar: lspci -x lspci -xxx lspci -xxxx 2.6. lsusb Este comando lista los dispositivos USB que tenemos en nuestro sistema, pudiendo utilizar la opción -v para obtener mayor información. La salida del comando bien podría ser: Bus 004 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 Bus 002 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000 obteniendo una cuantiosa información al utilizar la opción -v 2.7. fdisk Si bien esta herramienta se suele utilizar la mayoría de las veces sólo para realizar modificaciones de la tabla de partición, ejecutando sin más el comando y eligiendo diferentes opciones dentro del prompt que se nos ofrece, puede ser utilizada para obtener información de los discos que disponemos mediante la utilización de la opción -l Disk /dev/sda: 60.0 GB, 60011642880 bytes 255 heads, 63 sectors/track, 7296 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1* 1 2555 20523006 7 HPFS/NTFS /dev/sda2 2556 3972 11382052+ f W95 Ext d (LBA) /dev/sda3 3973 5250 10265535 c W95 FAT32 (LBA) /dev/sda4 5251 7296 16434495 c W95 FAT32 (LBA) /dev/sda5 2556 3320 6144831 83 Linux /dev/sda6 3321 3445 1004031 82 Linux swap / Solaris /dev/sda7* 3446 3458 104391 83 Linux /dev/sda8 3459 3972 4128673+ 83 Linux 7
de tal forma que podemos obtener fácilmente y sin posibilidad de dañar nuestro disco información sobre el mismo. Ejecutándolo sin especificar absolutamente nada (sólo utilizando la opción -l), nos mostrará información de todos los discos duros de nuestro sistema. Para obtener información de un disco en concreto, tendremos que especificarlo: fdisk -l /dev/hda 8