<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hardware on Marco Antonio Blanco</title><link>https://marcoantonioblanco.es/tags/hardware/</link><description>Recent content in Hardware on Marco Antonio Blanco</description><generator>Hugo -- gohugo.io</generator><language>es-es</language><copyright>Marco Antonio Blanco</copyright><lastBuildDate>Wed, 08 Oct 2014 10:33:55 +0000</lastBuildDate><atom:link href="https://marcoantonioblanco.es/tags/hardware/index.xml" rel="self" type="application/rss+xml"/><item><title>Obteniendo informacion del sistema desde consola e IRC con inxi</title><link>https://marcoantonioblanco.es/2014/10/obteniendo-informacion-del-sistema-desde-consola-e-irc-con-inxi/</link><pubDate>Wed, 08 Oct 2014 10:33:55 +0000</pubDate><guid>https://marcoantonioblanco.es/2014/10/obteniendo-informacion-del-sistema-desde-consola-e-irc-con-inxi/</guid><description>&lt;p&gt;No hace mucho publiqué una serie de artículos sobre &lt;a class="link" href="https://marcoantonioblanco.es/2013/07/comprobando-el-hardware-de-un-servidor-linux-sin-abrirlo-hwinfo-i/" &gt;cómo obtener información del hardware de un sistema Linux&lt;/a&gt; en producción sin necesidad de pararlo. Recientemente me he topado con otra herramienta que nos sirve para esta tarea: &lt;a class="link" href="https://code.google.com/p/inxi/" target="_blank" rel="noopener"&#10; &gt;inxi&lt;/a&gt;, un &lt;em&gt;script&lt;/em&gt; que recaba información completa sobre el hardware y el software más importante de un sistema y lo muestra en consola o, si así lo configuramos, a través de IRC.&lt;/p&gt;&#10;&lt;p&gt;La instalación de inxi es muy sencilla y en su web oficial se encuentran las &lt;a class="link" href="https://code.google.com/p/inxi/wiki/Installation" target="_blank" rel="noopener"&#10; &gt;instrucciones&lt;/a&gt; para las distribuciones Linux más populares, si no se encuentra instalado ya de serie como es el caso de Linux Mint y otras.&lt;/p&gt;&#10;&lt;p&gt;Para su instalación en Debian, tendremos que seguir pasos diferentes dependiendo de la versión que tengamos instalada. Si usamos Jessie o posterior, tenemos un paquete a nuestra disposición en los repositorios oficiales, por lo que bastará con el siguiente comando:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# apt-get install inxi&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sin embargo, en el caso de Wheezy (la actual versión estable), hay que descargarse el paquete e instalarlo a mano. Primero, accedemos al &lt;a class="link" href="https://packages.debian.org/jessie/all/inxi/download" target="_blank" rel="noopener"&#10; &gt;repositorio de inxi en Jessie&lt;/a&gt; y nos lo descargamos del servidor que queramos. Después, instalaremos con este comando:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# dpkg -i inxi_2.1.28-1_all.deb&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La forma más sencilla y directa de utilizar inxi es invocarlo directamente sin parámetro alguno:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# inxi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CPU~Dual core AMD A6-5400K APU with Radeon HD Graphics (-MCP-) clocked at Min:1400.000Mhz Max:3600.000Mhz Kernel~3.16-0.bpo.2-amd64 x86_64 Up~16:29 Mem~1798.6/7406.1MB HDD~4000.8GB(19.8% used) Procs~190 Client~Shell inxi~2.1.28&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La salida de inxi por defecto es a color, por lo que si nos resulta molesto podemos o bien cambiar el esquema de color utilizado con el parámetro &lt;code&gt;-c&lt;/code&gt;, que admite un número de 0 a 32, donde 0 lo desactiva completamente. El otro parámetro genérico es -v, que aumenta el nivel de detalle de la salida de inxi según el valor que le indiquemos entre 0 (mínimo) y 7.&lt;/p&gt;&#10;&lt;p&gt;El resto de parámetros están dedicados a obtener información específica sobre componentes hardware concretos, lo que podemos consultar en el manual electrónico (&lt;code&gt;man inxi&lt;/code&gt;) de inxi. Por ejemplo, si queremos información sin color sobre la CPU y la tarjeta gráfica:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# inxi -C -G -c0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CPU: Dual core AMD A6-5400K APU with Radeon HD Graphics (-MCP-) cache: 2048 KB &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Clock Speeds: 1: 1900 MHz 2: 1400 MHz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Graphics: Card: Advanced Micro Devices [AMD] ATI Device 9991&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Display Server: N/A driver: N/A tty size: 177x25 Advanced Data: N/A for root out of X&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En cuanto al uso de inxi a través de IRC, basta con que lo integremos con nuestro cliente IRC favorito y recibiremos la información de nuestros sistema a través suyo. En el &lt;a class="link" href="https://code.google.com/p/inxi/wiki/inxi_usage" target="_blank" rel="noopener"&#10; &gt;wiki oficial del proyecto&lt;/a&gt; se habla de los clientes IRC más populares. Por ejemplo, para integrar inxi con Konversation en KDE4:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# ln -s /usr/local/bin/inxi /usr/share/kde4/apps/konversation/scripts/inxi&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En el poco tiempo que llevo probándolo, inxi me está resultando muy útil y es más que probable que termine definitivamente formando parte de mi &amp;ldquo;caja de herramientas&amp;rdquo; de administración de sistemas. Si lo probáis, no dudéis en compartir vuestra experiencia con inxi.&lt;/p&gt;&#10;</description></item><item><title>Cómo recuperar ficheros de discos defectuosos bajo Linux</title><link>https://marcoantonioblanco.es/2014/02/como-recuperar-ficheros-de-discos-defectuosos-bajo-linux/</link><pubDate>Thu, 20 Feb 2014 14:38:50 +0000</pubDate><guid>https://marcoantonioblanco.es/2014/02/como-recuperar-ficheros-de-discos-defectuosos-bajo-linux/</guid><description>&lt;p&gt;En un artículo anterior describía unos procedimientos para &lt;a class="link" href="https://marcoantonioblanco.es/2013/11/comprobando-la-salud-de-los-discos-duros-en-un-sistema-linux/" &gt;comprobar la salud de los discos duros de un sistema Linux&lt;/a&gt;. El objetivo de dicho artículo era descubrir si los discos presentaban algún tipo de problema físico, recomendando su sustitución lo antes posible. Sin embargo, ¿qué hacemos si queremos recuperar ficheros que tienen partes de los mismos residiendo en sectores defectuosos? Veámoslo, teniendo en cuenta que la información que se encuentre en dichos sectores tiene una alta probabilidad de ser irrecuperable. En este caso, al menos podemos intentar recuperar el contenido accesible, que podemos editar a posteriori.&lt;/p&gt;&#10;&lt;p&gt;El método consiste en realizar una copia del fichero con tolerancia a fallos, de forma que cuando se produzca un error de lectura el procedimiento siga adelante y recupere al final la información que sí ha podido leer sin problemas. Para ello contamos con una herramienta clásica de UNIX, el comando &lt;code&gt;dd&lt;/code&gt;, tan útil como peligroso si no lo utilizamos bien.&lt;/p&gt;&#10;&lt;p&gt;En el caso que nos ocupa, tendremos que indicarle a dd el fichero a recuperar, el destino en el que guardaremos el contenido recuperado y que debe realizar la copia con tolerancia a errores de lectura. El comando completo, que hay que ejecutar como &lt;code&gt;root&lt;/code&gt;, sería el siguiente:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# dd if=/home/usuario/fichero of=/media/usbdrive/fichero_limpio conv=noerror,sync&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Como se puede ver, la salida se realiza en un dispositivo diferente al disco defectuoso (por ejemplo, un &lt;em&gt;pendrive&lt;/em&gt;) para evitar males mayores.&lt;/p&gt;&#10;&lt;p&gt;Una vez terminada la copia, sólo resta desechar el disco y sustituirlo por otro en buenas condiciones. POr cierto, debido a los errores de lectura, la copia con &lt;code&gt;dd&lt;/code&gt; puede tardar bastante tiempo en llevarse a cabo, sobre todo dependiendo del tamaño del fichero original y de la cantidad de sectores defectuosos por los que hay que pasar. En definitiva, que hay que armarse de paciencia.&lt;/p&gt;&#10;&lt;p&gt;Si no queremos deshacernos del disco problemático (por ejemplo, forma parte de un RAID, no tenemos recambio a mano o simplemente lo queremos reutilizar), existe una opción que hay que utilizar como último recurso, ya que se trata de un procedimiento que elimina la información del sector y que tiene un alto grado de riesgo destructivo para todo el sistema de ficheros. Se trata de forzar la relocalización dinámica de sectores defectuosos, algo que los discos suelen llevar a cabo de forma automática por su cuenta pero que en esta ocasión vamos a obligarle a hacer.&lt;/p&gt;&#10;&lt;p&gt;Para ello contamos con la herramienta &lt;code&gt;hdparm&lt;/code&gt;, la cual ya mencionamos en el artículo anterior. Pero antes de comenzar con la relocalización, comprobaremos si el disco ya ha reasignado sectores en el pasado. Hay que tener en cuenta que cada disco duro ofrece un número máximo de sectores de reserva y que si se ha agotado este procedimiento será inútil. El comando es el siguiente:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# smartctl -a /dev/sda | grep -i reallocated&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si nos fijamos en el último dato, vemos que está a cero, lo que indica que nunca se han relocalizado sectores en el disco. En el ejemplo del artículo anterior, la cuenta estaba en 10640, una mala noticia sin duda.&lt;/p&gt;&#10;&lt;p&gt;El siguiente paso es confirmar que el supuesto sector defectuoso tiene realmente problemas de lectura. Siguiendo en el ejemplo del otro artículo, el comando es como sigue:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# hdparm --read-sector 2307480536 /dev/sda&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/dev/sda:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;reading sector 2307480536: FAILED: Input/output error&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Efectivamente, el sector es defectuoso, así que podemos proceder a relocalizarlo:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# hdparm --write-sector 2307480536 /dev/sda&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/dev/sda:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Use of --write-sector is VERY DANGEROUS.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;You are trying to deliberately overwrite a low-level sector on the media&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This is a BAD idea, and can easily result in total data loss.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please supply the --yes-i-know-what-i-am-doing flag if you really want this.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Program aborted.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# hdparm --write-sector 2307480536 --yes-i-know-what-i-am-doing /dev/sda&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/dev/sda: re-writing sector 2307480536: succeeded&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Como comentaba más arriba, &lt;code&gt;hdparm&lt;/code&gt; nos avisa de que se trata de una operación peligrosa porque estamos escribiendo en el disco duro a bajo nivel saltándonos los mecanismos estándares de escritura de bloques del sistema de ficheros residente.&lt;/p&gt;&#10;&lt;p&gt;Si la operación anterior tiene éxito, podemos comprobar el resultado:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# hdparm --read-sector 2307480536 /dev/sda&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/dev/sda:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;reading sector 2307480536: succeeded&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000 0000 0000 0000 0000 0000 0000 0000&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(siguen muchas líneas con ceros a continuación)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# smartctl -a /dev/sda | grep -i reallocated&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vemos que el sector vuelve a estar disponible para su uso y que la cuenta de sectores relocalizados ha aumentado en uno.&lt;/p&gt;&#10;&lt;p&gt;Ahora sólo es cuestión de decidir si seguimos con el disco adelante, lo reutilizamos para datos menos importantes o lo tiramos a la basura directamente.&lt;/p&gt;&#10;</description></item><item><title>Comprobando la salud de los discos duros en un sistema Linux</title><link>https://marcoantonioblanco.es/2013/11/comprobando-la-salud-de-los-discos-duros-en-un-sistema-linux/</link><pubDate>Fri, 22 Nov 2013 13:13:29 +0000</pubDate><guid>https://marcoantonioblanco.es/2013/11/comprobando-la-salud-de-los-discos-duros-en-un-sistema-linux/</guid><description>&lt;p&gt;En los últimos meses nos hemos visto en la tesitura de tener que sustituir discos duros defectuosos en diversos servidores cuyo mantenimiento caen bajo nuestra responsabilidad, algunos con acceso local y otros sólo con acceso remoto por encontrarse geográficamente en otros países. Afortunadamente todos esos servidores corren Linux, lo que facilita enormemente la tarea de detectar fallos en discos duros, proceder a su parada y sustituirlos por otros nuevos, integrándolos transparentemente en el RAID que solemos implementar en nuestros servidores.&lt;/p&gt;&#10;&lt;p&gt;¿Cómo se detecta que un disco es defectuoso? La primera pista nos la va a dar un cambio drástico en el servidor: bajada de rendimiento, problemas de acceso a ficheros, servicios caídos, etc. Es en ese momento cuando debemos pasar a comprobar la salud de los discos duros del sistema y descubrir cuál (o cuales) es el que tiene problemas.&lt;/p&gt;&#10;&lt;p&gt;La forma más directa y sencilla de comprobar si un disco duro está teniendo problemas es consultar el registro de los mensajes del núcleo con el comando &lt;code&gt;dmesg&lt;/code&gt;. Ahí buscaremos referencias a errores de acceso a disco, problemas en las operaciones de lectura/escritura, menciones a relocalización de sectores, etc.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# dmesg | less&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ata2.00: failed command: READ FPDMA QUEUED&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ata2.00: cmd 60/08:00:d8:5b:89/00:00:89:00:00/40 tag 0 ncq 4096 in&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; res 41/40:08:d8:5b:89/00:00:89:00:00/00 Emask 0x409 (media error)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ata2.00: status: { DRDY ERR }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ata2.00: error: { UNC }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sd 1:0:0:0: [sdb] Unhandled sense code&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sd 1:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sd 1:0:0:0: [sdb] Sense Key : Medium Error [current] [descriptor]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sd 1:0:0:0: [sdb] Add. Sense: Unrecovered read error - auto reallocate failed&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sd 1:0:0:0: [sdb] CDB: Read(10): 28 00 89 89 5b d8 00 00 08 00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;end_request: I/O error, dev sdb, sector 2307480536&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En el ejemplo vemos que el disco problemático es &lt;code&gt;sdb&lt;/code&gt;. Igualmente sencillo es comprobar si se ha caído algún disco del RAID del servidor:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# cat /proc/mdstat &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Personalities : [raid1] &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;md3 : active raid1 sda4[2] sdb4[1](F)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 1839220031 blocks super 1.2 [2/1] [U_]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;De nuevo comprobamos que &lt;code&gt;sdb&lt;/code&gt; es el culpable. Sin embargo, al tratarse de servidores, la forma más adecuada de detectar fallos en los discos es mediante la prevención a través de un &lt;a class="link" href="https://marcoantonioblanco.es/2009/01/la-necesidad-de-monitorizar-un-sistema-informatico/" &gt;sistema de monitorización&lt;/a&gt; al que incorporemos los controles necesarios, normalmente basados en la tecnología &lt;a class="link" href="http://es.wikipedia.org/wiki/S.M.A.R.T." target="_blank" rel="noopener"&#10; &gt;S.M.A.R.T.&lt;/a&gt; que se encuentra presente en los discos duros desde hace ya muchos años.&lt;/p&gt;&#10;&lt;p&gt;El soporte S.M.A.R.T. en Linux se consigue a través del paquete &lt;code&gt;smartmontools&lt;/code&gt;, que permite controlar y monitorizar sistemas de almacenamiento utilizando dicha tecnología. De hecho, se incluye un demonio que nos avisa inmediatamente si se producen errores en alguno de los discos monitorizados.&lt;/p&gt;&#10;&lt;p&gt;Una vez identificado el disco defectuoso procedemos a comprobar su salud mediante &lt;code&gt;smartctl&lt;/code&gt;, una herramienta de línea de comandos incluida en &lt;code&gt;smartmontools&lt;/code&gt;. Con esta utilidad podremos no sólo obtener detallada información sobre el disco, sino además llevar a cabo completos tests que nos mostrarán si es defectuoso y cuál es el defecto concreto. Veamos unos ejemplos.&lt;/p&gt;&#10;&lt;p&gt;Para obtener información sobre un disco tenemos a nuestra disposición varios parámetros. Si queremos información sobre el hardware:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# smartctl -i /dev/sdb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;=== START OF INFORMATION SECTION ===&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Device Model: ST...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Serial Number: W...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Firmware Version: C...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;User Capacity: 3,000,592,982,016 bytes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Device is: Not in smartctl database [for details use: -P showall]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ATA Version is: 8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ATA Standard is: ATA-8-ACS revision 4&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Local Time is: Fri Nov 22 12:33:54 2013 CET&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMART support is: Available - device has SMART capability.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMART support is: Enabled&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Podemos ampliar estos datos con la información SMART del disco duro con el parámetro &lt;code&gt;-a&lt;/code&gt;. Si en cambio usamos &lt;code&gt;-x&lt;/code&gt;, la salida del comando incluirá la información que no proviene de SMART.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# smartctl -a /dev/sdb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;=== START OF INFORMATION SECTION ===&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;=== START OF READ SMART DATA SECTION ===&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMART overall-health self-assessment test result: PASSED&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;General SMART Values:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Offline data collection status: (0x00) Offline data collection activity&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; was never started.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Auto Offline Data Collection: Disabled.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Self-test execution status: ( 121) The previous self-test completed having&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; the read element of the test failed.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMART Attributes Data Structure revision number: 10&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Vendor Specific SMART Attributes with Thresholds:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 1 Raw_Read_Error_Rate 0x000f 107 098 006 Pre-fail Always - 186855524&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 3 Spin_Up_Time 0x0003 093 093 000 Pre-fail Always - 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 5 Reallocated_Sector_Ct 0x0033 092 092 036 Pre-fail Always - 10640&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 7 Seek_Error_Rate 0x000f 083 060 030 Pre-fail Always - 219208774&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si alguno de los anteriores comandos falla, podemos añadir el parámetro &lt;code&gt;-T permissive&lt;/code&gt; (e incluso &lt;code&gt;-T verypermissive&lt;/code&gt;) para intentar que &lt;code&gt;smartctl&lt;/code&gt; ignore los errores que pueda y obtenga toda la información posible del disco.&lt;/p&gt;&#10;&lt;p&gt;Pasemos a lo realmente interesante: la realización de tests en los discos duros. La primera y más sencilla opción que tenemos a nuestra disposición es el parámetro &lt;code&gt;-H&lt;/code&gt;, que nos informa de la salud SMART del disco.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# smartctl -H /dev/sdb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;=== START OF READ SMART DATA SECTION ===&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMART overall-health self-assessment test result: PASSED&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Esta opción sólo indica que la salud es mala cuando el disco ya ha fallado o va a fallar en las próximas 24 horas. Podemos ver en el ejemplo que, a pesar de que &lt;code&gt;sdb&lt;/code&gt; es defectuoso, se nos informa de que la salud SMART del disco es buena.&lt;/p&gt;&#10;&lt;p&gt;Para detectar el problema del disco en detalle contamos con el parámetro &lt;code&gt;-t&lt;/code&gt;, que a su vez admite un argumento que indica el tipo de test a realizar: &lt;code&gt;offline&lt;/code&gt;, &lt;code&gt;short&lt;/code&gt;, &lt;code&gt;long&lt;/code&gt; y &lt;code&gt;conveyance&lt;/code&gt;. Todas estas pruebas se pueden realizar con el sistema en producción, a menos que usemos el parámetro &lt;code&gt;-C&lt;/code&gt;, que las ejecuta en modo cautivo (no tiene efecto en tests de tipo &lt;code&gt;offline&lt;/code&gt;). Este modo sirve para realizar las pruebas más rápidamente y tiene especial utilidad cuando la máxima prioridad es comprobar la salud del disco. La explicación en detalle de cada uno de estos tests se encuentra en el manual electrónico de &lt;code&gt;smartctl&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Excepto en el mencionado modo cautivo, los tests se realizan en segundo plano, por lo que no obtenemos ninguna información por pantalla a menos que la pidamos explícitamente con el parámetro &lt;code&gt;-l selftest&lt;/code&gt;. Dado que esto sólo nos muestra un instante del progreso del test, es interesante combinarlo con el comando &lt;code&gt;watch&lt;/code&gt;, que por defecto realiza la tarea que le asignemos cada dos segundos. Veamos un ejemplo:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# smartctl -t short /dev/sdb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Sending command: &amp;#34;Execute SMART Short self-test routine immediately in off-line mode&amp;#34;.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Drive command &amp;#34;Execute SMART Short self-test routine immediately in off-line mode&amp;#34; successful.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Testing has begun.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please wait 1 minutes for test to complete.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Test will complete after ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Use smartctl -X to abort test.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# watch smartctl -l selftest /dev/sdb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Every 2,0s: smartctl -l selftest /dev/sdb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;=== START OF READ SMART DATA SECTION ===&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMART Self-test log structure revision number 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 1 Short offline Completed: read failure 90% 15073 2307480536&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;¡Eureka, hemos encontrado el defecto del disco sospechoso! Se trata de un error de lectura en al menos un sector del disco, siendo el primero detectado el especificado en la salida de &lt;code&gt;smartctl&lt;/code&gt;. Ahora sólo queda cambiarlo por uno nuevo y llevar el defectuoso al fabricante a que nos lo cambie (si está en garantía, claro). Por cierto, en el ejemplo vemos cómo se nos informa de que podemos abortar cualquier test con &lt;code&gt;smartctl -X&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Como curiosidad, si necesitamos conocer el modelo y número de serie del disco para el trámite con el fabricante, podemos obtenerlos con este sencillo comando (además de con &lt;code&gt;smartctl -i&lt;/code&gt;):&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# hdparm -i /dev/sdb | grep SerialNo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Model=ST..., FwRev=C..., SerialNo=W...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;¡Suerte con los discos duros!&lt;/p&gt;&#10;</description></item><item><title>Comprobando el hardware de un servidor Linux sin abrirlo: pequeñas utilidades de línea de comandos (y IV)</title><link>https://marcoantonioblanco.es/2013/10/comprobando-el-hardware-de-un-servidor-linux-sin-abrirlo-pequenas-utilidades-de-linea-de-comandos-y-iv/</link><pubDate>Tue, 22 Oct 2013 10:36:53 +0000</pubDate><guid>https://marcoantonioblanco.es/2013/10/comprobando-el-hardware-de-un-servidor-linux-sin-abrirlo-pequenas-utilidades-de-linea-de-comandos-y-iv/</guid><description>&lt;p&gt;Para terminar esta serie de artículos sobre herramientas software para conocer el hardware de un servidor que esté en producción sin pararlo ni abrirlo, quiero dedicar este artículo a enumerar una serie de sencillas utilidades de línea de comandos que sólo hacen una tarea pero la hacen de una manera muy especializada y eficiente, lo que las convierten en realmente útiles para el administrador de sistemas.&lt;/p&gt;&#10;&lt;h2 id="lspci"&gt;lspci&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;lspci&lt;/code&gt; es una herramienta que lista todos los dispositivos PCI presentes en el sistema.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# lspci&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:00.0 Host bridge: Intel Corporation Device 0150 (rev 09)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:01.0 PCI bridge: Intel Corporation Device 0151 (rev 09)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:02.0 VGA compatible controller: Intel Corporation Device 0162 (rev 09)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:14.0 USB Controller: Intel Corporation Device 1e31 (rev 04)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:16.0 Communication controller: Intel Corporation Device 1e3a (rev 04)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:1a.0 USB Controller: Intel Corporation Device 1e2d (rev 04)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:1c.0 PCI bridge: Intel Corporation Device 1e10 (rev c4)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:1c.4 PCI bridge: Intel Corporation Device 1e18 (rev c4)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:1d.0 USB Controller: Intel Corporation Device 1e26 (rev 04)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:1f.0 ISA bridge: Intel Corporation Device 1e4a (rev 04)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:1f.2 SATA controller: Intel Corporation Device 1e02 (rev 04)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:1f.3 SMBus: Intel Corporation Device 1e22 (rev 04)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 09)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Gracias a la gran cantidad de parámetros que admite, podemos controlar el nivel de detalle y la forma de presentar la información que nos devuelve &lt;code&gt;lspci&lt;/code&gt;. Por ejemplo, &lt;code&gt;-k&lt;/code&gt; nos indica el módulo del kernel que gestiona cada dispositivo, &lt;code&gt;-t&lt;/code&gt; nos muestra los dispositivos en un árbol, &lt;code&gt;-m&lt;/code&gt; saca la información en un formato fácilmente analizable por scripts y &lt;code&gt;-v&lt;/code&gt; nos da información detallada sobre cada dispositivo (podemos poner hasta tres v para aumentar el nivel de detalle).&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# lspci -k&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:00.0 Host bridge: Intel Corporation Device 0150 (rev 09)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Subsystem: ASUSTeK Computer Inc. Device 84ca&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Kernel driver in use: agpgart-intel&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:01.0 PCI bridge: Intel Corporation Device 0151 (rev 09)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Kernel driver in use: pcieport&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:02.0 VGA compatible controller: Intel Corporation Device 0162 (rev 09)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Subsystem: ASUSTeK Computer Inc. Device 84ca&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:14.0 USB Controller: Intel Corporation Device 1e31 (rev 04)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Subsystem: ASUSTeK Computer Inc. Device 84ca&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Kernel driver in use: xhci_hcd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00:16.0 Communication controller: Intel Corporation Device 1e3a (rev 04)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Subsystem: ASUSTeK Computer Inc. Device 84ca&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# lspci -t&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-[0000:00]-+-00.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-01.0-[01]--&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-02.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-14.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-16.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-1a.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-1c.0-[02]--&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-1c.4-[03]----00.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-1d.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-1f.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+-1f.2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;\-1f.3&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="lsusb"&gt;lsusb&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;lsusb&lt;/code&gt; realiza un trabajo similar pero con el subsistema USB y los dispositivos conectados.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# lsusb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Bus 002 Device 002: ID 046d:c50e Logitech, Inc. Cordless Mouse Receiver&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;lsusb&lt;/code&gt; cuenta con un menor número de parámetros que modifican su salida pero son igualmente útiles. Por ejemplo, &lt;code&gt;-t&lt;/code&gt; nos muestra los dispositivos en un árbol, &lt;code&gt;-v&lt;/code&gt; nos da información detallada y &lt;code&gt;-s&lt;/code&gt; y &lt;code&gt;-d&lt;/code&gt; muestran sólo los dispositivos especificados por bus y dispositivo o por identificador de fabricante, respectivamente.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# lsusb -d 046d:c50e -v&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Bus 002 Device 002: ID 046d:c50e Logitech, Inc. Cordless Mouse Receiver&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Device Descriptor:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bLength 18&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bDescriptorType 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bcdUSB 1.10&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bDeviceClass 0 (Defined at Interface level)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bDeviceSubClass 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bDeviceProtocol 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bMaxPacketSize0 8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;idVendor 0x046d Logitech, Inc.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;idProduct 0xc50e Cordless Mouse Receiver&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ethtool"&gt;ethtool&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;ethtool&lt;/code&gt; sirve para mostrar o cambiar la configuración de los interfaces de red. Esta herramienta necesita de al menos un argumento para trabajar (el interfaz de red a consultar) y de parámetros que indiquen qué información requerimos.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# ethtool eth0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Settings for eth0:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Supported ports: [ MII ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Supported link modes: 10baseT/Half 10baseT/Full&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;100baseT/Half 100baseT/Full&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1000baseT/Full&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Supported pause frame use: No&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Supports auto-negotiation: Yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Advertised link modes: 10baseT/Half 10baseT/Full&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;100baseT/Half 100baseT/Full&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1000baseT/Full&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Advertised pause frame use: No&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Advertised auto-negotiation: Yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Speed: 1000Mb/s&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Duplex: Full&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Port: MII&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PHYAD: 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Transceiver: external&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Auto-negotiation: on&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Supports Wake-on: g&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wake-on: d&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Link detected: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# ethtool -i eth0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;driver: forcedeth&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;version: 0.64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firmware-version:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bus-info: 0000:00:08.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;supports-statistics: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;supports-test: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;supports-eeprom-access: no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;supports-register-dump: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;supports-priv-flags: no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# ethtool -S eth0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NIC statistics:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tx_bytes: 266807800&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tx_zero_rexmt: 333342&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tx_one_rexmt: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tx_many_rexmt: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tx_late_collision: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# ethtool -t eth0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The test result is PASS&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The test extra info:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;link (online/offline) 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;register (offline) 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;interrupt (offline) 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;loopback (offline) 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="dmesg"&gt;dmesg&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;dmesg&lt;/code&gt; es un comando que nos muestra el contenido del registro del núcleo, lo que implica que al comienzo se encuentra toda la información relativa a la detección del hardware. Personalmente recomiendo su invocación de la siguiente manera para no mostrar las marcas de tiempo del núcleo y paginar la exhaustiva información que se nos va a mostrar en pantalla:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# dmesg -t | less&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Initializing cgroup subsys cpuset&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Initializing cgroup subsys cpu&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Linux version 3.9-0.bpo.1-amd64 (debian-kernel@lists.debian.org) (gcc version 4.7.2 (Debian 4.7.2-5) ) #1 SMP Debian 3.9.6-1~bpo70+1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Command line: BOOT_IMAGE=/boot/vmlinuz-3.9-0.bpo.1-amd64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;e820: BIOS-provided physical RAM map:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;BIOS-e820: [mem 0x0000000000000000-0x000000000009f7ff] usable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NX (Execute Disable) protection: active&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMBIOS 2.3 present.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DMI: /M55S-S3, BIOS FB 01/10/2007&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;No AGP bridge found&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ACPI: RSDP 00000000000f6260 00014 (v00 GBT )&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ACPI: RSDT 00000000cfff3000 00038 (v01 GBT NVDAACPI 42302E31 NVDA 01010101)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ehci_hcd: USB 2.0 &amp;#39;Enhanced&amp;#39; Host Controller (EHCI) Driver&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;forcedeth: Reverse Engineered nForce ethernet driver. Version 0.64.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ehci-pci: EHCI PCI platform driver&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ACPI: PCI Interrupt Link [APCH] enabled at IRQ 21&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;forcedeth 0000:00:08.0: setting latency timer to 64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;forcedeth 0000:00:08.0: ifname eth0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="proc"&gt;/proc&#10;&lt;/h2&gt;&lt;p&gt;Para terminar el artículo, quiero hablar de &lt;code&gt;/proc&lt;/code&gt;, que no es una herramienta en sí, sino el sistema de ficheros a través del cual se puede interactuar con el núcleo en vivo. Por tanto, podemos utilizar los comandos habituales tanto para consultar información como para modificarla al vuelo. Veamos varios ejemplos de uso de &lt;code&gt;/proc&lt;/code&gt; para conocer el hardware del sistema.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# cat /proc/cpuinfo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;processor : 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vendor_id : GenuineIntel&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cpu family : 6&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;model : 58&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;model name : Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stepping : 9&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;microcode : 0x12&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cpu MHz : 1600.000&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cache size : 8192 KB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;physical id : 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;siblings : 2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;core id : 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cpu cores : 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apicid : 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;initial apicid : 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fpu : yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fpu_exception : yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cpuid level : 13&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wp : yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flags : fpu de tsc msr pae cx8 apic sep cmov pat clflush acpi mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl nonstop_tsc pni pclmulqdq est ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes avx f16c rdrand hypervisor lahf_lm ida arat epb xsaveopt pln pts dtherm fsgsbase smep erms&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bogomips : 6800.20&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;clflush size : 64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cache_alignment : 64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;address sizes : 36 bits physical, 48 bits virtual&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;power management:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# cat /proc/meminfo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;MemTotal: 19554776 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;MemFree: 156468 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Buffers: 239696 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cached: 18424088 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SwapCached: 5088 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Active: 9483528 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Inactive: 9367064 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Active(anon): 152516 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Inactive(anon): 34384 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Active(file): 9331012 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Inactive(file): 9332680 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Unevictable: 20 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mlocked: 20 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SwapTotal: 33553332 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SwapFree: 33537992 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# cat /proc/partitions&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;major minor #blocks name&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2 0 4 fd0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;11 0 1048575 sr0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8 0 156289847 sda&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8 1 1951744 sda1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8 2 97655808 sda2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8 3 56680448 sda3&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="conclusión"&gt;Conclusión&#10;&lt;/h2&gt;&lt;p&gt;Existen muchas más herramientas, como &lt;code&gt;free&lt;/code&gt;, &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;uname&lt;/code&gt;, &lt;code&gt;lsmod&lt;/code&gt;, &lt;code&gt;fdisk&lt;/code&gt;, etc. La lista es sencillamente interminable. Basta con hacer una sencilla búsqueda por Internet para encontrar pequeñas joyas como las que he comentado en este artículo, consultar su manual y añadirlas a nuestra &amp;ldquo;caja de herramientas&amp;rdquo; particular.&lt;/p&gt;&#10;&lt;p&gt;Con esta serie de artículos espero haber facilitado un poquito el día a día a mis colegas administradores de sistemas. Espero vuestros comentarios.&lt;/p&gt;&#10;</description></item><item><title>Comprobando el hardware de un servidor Linux sin abrirlo: OCS Inventory (III)</title><link>https://marcoantonioblanco.es/2013/09/comprobando-el-hardware-de-un-servidor-linux-sin-abrirlo-ocs-inventory-iii/</link><pubDate>Thu, 19 Sep 2013 13:58:58 +0000</pubDate><guid>https://marcoantonioblanco.es/2013/09/comprobando-el-hardware-de-un-servidor-linux-sin-abrirlo-ocs-inventory-iii/</guid><description>&lt;p&gt;Las herramientas de las que he hablado hasta ahora en esta serie de artículos eran utilidades de línea de comandos dirigidas a descubrir de forma puntual qué hardware tiene un sistema en producción sin pararlo. Si lo que buscamos es algo más complejo más allá de una simple consulta de vez en cuando, que nos permita elaborar y mantener el inventario hardware y software de los sistemas a nuestro cargo, una gran opción es sin duda &lt;a class="link" href="http://www.ocsinventory-ng.org" target="_blank" rel="noopener"&#10; &gt;OCS Inventory&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Se trata de un completo entorno de gestión (de licencia libre) de los activos TIC de cualquier organización. Cuando se publicó por primera vez en 2001, OCS Inventory permitía la creación automatizada del inventario del hardware. A día de hoy ha &lt;a class="link" href="https://web.archive.org/web/20130919/http://www.ocsinventory-ng.org/en/about/features/" target="_blank" rel="noopener"&#10; &gt;evolucionado&lt;/a&gt; tanto que inventaria también el software, realiza escaneos de red e incluso permite la instalación distribuida de software. También incluye un sistema de &lt;em&gt;plugins&lt;/em&gt; que permite ampliar las capacidades de serie de OCS Inventory. Aunque la &lt;a class="link" href="https://web.archive.org/web/20130919/http://www.ocsinventory-ng.org/en/download/plugins.html" target="_blank" rel="noopener"&#10; &gt;lista de &lt;em&gt;plugins&lt;/em&gt; disponibles&lt;/a&gt; no es muy extensa, ofrece la suficiente utilidad como para tenerlos en cuenta.&lt;/p&gt;&#10;&lt;p&gt;OCS Inventory se compone de tres elementos: un servidor, los agentes y las herramientas de distribución de software. El servidor es el elemento principal del entorno, gestionando la información y poniéndola a disposición de los administradores del sistema. Existen versiones tanto para Linux (y otros Unix) como para Windows.&lt;/p&gt;&#10;&lt;p&gt;Sin embargo, el servidor no serviría de nada sin los agentes, pequeños componentes software que se instalan en los dispositivos que queremos inventariar y gestionar a través del servidor y que nutren a éste con toda la información que puedan descubrir sobre el sistema en el que están instalados. Por la naturaleza de su función, en el caso de los agentes existen versiones para todos los sistema operativos más populares, incluyendo los de los smartphones y tablets (excepto iOS).&lt;/p&gt;&#10;&lt;p&gt;Por último se encuentran las herramientas de distribución de software, con versiones para Linux, Windows y MacOS, que permiten de una manera sencilla la instalación remota y controlada de programas en equipos que corran dichos sistemas operativos. Es sin duda una gran ayuda para los administradores de redes y una de las capacidades más celebradas de OCS Inventory.&lt;/p&gt;&#10;&lt;p&gt;Su instalación es realmente sencilla. Basta con dirigirnos a la &lt;a class="link" href="https://web.archive.org/web/20130919/http://www.ocsinventory-ng.org/en/download/" target="_blank" rel="noopener"&#10; &gt;sección de descargas&lt;/a&gt; de la web oficial y obtener las versiones adecuadas a los sistemas que vamos a gestionar. Sin embargo, lo más sencillo para instalar un servidor OCS Inventory es utilizar una distribución Linux en cuyos repositorios esté disponible.&lt;/p&gt;&#10;&lt;p&gt;Por ejemplo, en Debian empezaríamos con el servidor:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# apt-get install ocsinventory-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;y seguiríamos con la consola de administración, que se puede instalar en el mismo equipo que el servidor o en otro de nuestra elección:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# apt-get install ocsinventory-reports&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si accedemos mediante navegador a &lt;code&gt;http://servidor_consola_admon/ocsreports&lt;/code&gt; , podremos proceder a configurar la consola de administración, indicando entre otras cosas dónde se encuentra el servidor de OCS Inventory.&lt;/p&gt;&#10;&lt;p&gt;Sólo restaría instalar los agentes en los equipos a monitorizar. En el caso de Debian sería así:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# apt-get install ocsinventory-agent&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Durante la instalación debemos elegir &lt;code&gt;http&lt;/code&gt; como método para generar el inventario e introducir el nombre o dirección IP del servidor OCS cuando se nos solicite.&lt;/p&gt;&#10;&lt;p&gt;Con esto OCS empezará de inmediato a escanear nuestra red y a recibir todo tipo de datos sobre la configuración de nuestros sistemas. Esta información se muestra poco después en la consola de administración. A partir de ese momento, OCS se encarga de mantener actualizada la información mediante escaneos periódicos, cuya frecuencia podemos configurar.&lt;/p&gt;&#10;&lt;p&gt;En definitiva, OCS Inventory se convierte en un importante aliado para los administradores de sistemas en sus tareas diarias. Es sencillo de instalar y a cambio ofrece un gran valor. Evidentemente no está pensado para consultas puntuales de información, ya que para ello están los comandos revisados en los artículos anteriores, pero sin duda OCS no debería faltar en ninguna red gestionada por buenos profesionales.&lt;/p&gt;&#10;</description></item><item><title>Comprobando el hardware de un servidor Linux sin abrirlo: dmidecode (II)</title><link>https://marcoantonioblanco.es/2013/08/comprobando-el-hardware-de-un-servidor-linux-sin-abrirlo-dmidecode-ii/</link><pubDate>Fri, 09 Aug 2013 12:17:56 +0000</pubDate><guid>https://marcoantonioblanco.es/2013/08/comprobando-el-hardware-de-un-servidor-linux-sin-abrirlo-dmidecode-ii/</guid><description>&lt;p&gt;La segunda herramienta que nos va a permitir conocer la configuración del hardware de un sistema en producción sin tener que pararlo ni abrirlo es &lt;code&gt;dmidecode&lt;/code&gt;. Al igual que &lt;code&gt;hwinfo&lt;/code&gt;, se trata de una utilidad de línea de comandos. Sin embargo, en vez de sondear el hardware, &lt;code&gt;dmidecode&lt;/code&gt; analiza la información almacenada en la BIOS en las tablas DMI y la muestra en pantalla.&lt;/p&gt;&#10;&lt;p&gt;Para instalar &lt;code&gt;dmidecode&lt;/code&gt; en un sistema Debian, basta con seguir el procedimiento habitual:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# apt-get install dmidecode&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La forma de utilizar &lt;code&gt;dmidecode&lt;/code&gt; es muy sencilla y similar a la de &lt;code&gt;hwinfo&lt;/code&gt;, es decir, invocamos el comando junto con un argumento que nos permitirá obtener la información concreta deseada. Evidentemente, si ejecutamos dmidecode sin argumentos, obtendremos toda la información disponible:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# dmidecode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMBIOS 2.7 present.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;109 structures occupying 3956 bytes.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Table at 0x000EB6C0.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Handle 0x0000, DMI type 0, 24 bytes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;BIOS Information&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Vendor: American Megatrends Inc.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Version: 0915&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Release Date: 07/27/2012&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Address: 0xF0000&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Runtime Size: 64 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ROM Size: 8192 kB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Characteristics:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; PCI is supported&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; BIOS is upgradeable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;dmidecode&lt;/code&gt; tiene dos parámetros para seleccionar la información a mostrar, &lt;code&gt;--string&lt;/code&gt; y &lt;code&gt;--type&lt;/code&gt;. El primero obtiene el valor de la cadena DMI indicado por la palabra clave que hay especificar. Por ejemplo, para conocer la marca del procesador:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# dmidecode --string processor-manufacturer&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Intel&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Al contrario que &lt;code&gt;hwinfo&lt;/code&gt;, sólo podemos utilizar un valor a la vez. La lista de palabras clave admitidas se puede consultar en el manual electrónico de &lt;code&gt;dmidecode&lt;/code&gt;:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# man dmidecode&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;El parámetro &lt;code&gt;--type&lt;/code&gt; muestra las entradas en la BIOS del tipo que especifiquemos, donde el tipo es o bien un número (pudiendo indicar más de uno separados por comas) o bien una palabra clave (de una lista que es distinta a la utilizada por &lt;code&gt;--string&lt;/code&gt;). Por ejemplo, para conocer información sobre el sistema y la placa base:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# dmidecode --type 1,2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMBIOS 2.7 present.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Handle 0x0001, DMI type 1, 27 bytes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;System Information&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Manufacturer: System manufacturer&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Product Name: System Product Name&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Version: System Version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Serial Number: System Serial Number&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; UUID: XXX&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Wake-up Type: Power Switch&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; SKU Number: SKU&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Handle 0x0002, DMI type 2, 15 bytes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Base Board Information&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Manufacturer: ASUSTeK COMPUTER INC.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Product Name: P8H77-M PRO&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Version: Rev X.0x&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Serial Number: XXX&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Features:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Board is a hosting board&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Board is replaceable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Chassis Handle: 0x0003&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: Motherboard&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Contained Object Handles: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Y para saber más sobre el chasis del servidor:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# dmidecode --type chassis&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMBIOS 2.7 present.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Handle 0x0003, DMI type 3, 22 bytes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Chassis Information&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Manufacturer: Chassis Manufacture&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type: Desktop&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Lock: Not Present&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Version: Chassis Version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Serial Number: Chassis Serial Number&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Asset Tag: Asset-1234567890&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Boot-up State: Safe&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Power Supply State: Safe&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Thermal State: Safe&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Security Status: None&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; OEM Information: 0x00000000&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Height: Unspecified&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Number Of Power Cords: 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Contained Elements: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Al igual que antes, la lista de tipos numéricos y palabras clave admitidas se puede consultar en el manual electrónico de &lt;code&gt;dmidecode&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Como curiosidad, el paquete &lt;code&gt;dmidecode&lt;/code&gt; incluye otras herramientas, destacando &lt;code&gt;biosdecode&lt;/code&gt;, que analiza la memoria de la BIOS y muestra las estructuras de las que tiene conocimiento.&lt;/p&gt;&#10;&lt;p&gt;Para terminar dos advertencias. La primera es que &lt;code&gt;dmidecode&lt;/code&gt; sólo muestra lo que la BIOS conoce, por lo que si se trata de un sistema de esos en los que la BIOS es muy espartana, es posible que no obtengamos todo lo que queremos conocer (típico de un sistema de marca). La segunda es que hay que tener cuidado al utilizarlo en un sistema en producción (aunque este sea su objetivo). Todo lo que suponga sondear el hardware está sujeto a una probabilidad (mínima) de provocar problemas en la plataforma y su caída.&lt;/p&gt;&#10;</description></item><item><title>Comprobando el hardware de un servidor Linux sin abrirlo: hwinfo (I)</title><link>https://marcoantonioblanco.es/2013/07/comprobando-el-hardware-de-un-servidor-linux-sin-abrirlo-hwinfo-i/</link><pubDate>Mon, 08 Jul 2013 13:43:00 +0000</pubDate><guid>https://marcoantonioblanco.es/2013/07/comprobando-el-hardware-de-un-servidor-linux-sin-abrirlo-hwinfo-i/</guid><description>&lt;p&gt;Existen situaciones en las que es necesario conocer en detalle el hardware del que se compone un servidor del que no tenemos información pero que está en producción y que por tanto no se puede detener para abrirlo y ver sus &amp;ldquo;tripas&amp;rdquo;. Un caso muy típico es cuando es necesario ampliar la memoria RAM y no sabemos ni qué tipo admite su placa base ni cuantas ranuras están ya ocupadas. Si se trata de un servidor basado en Linux, tenemos varias herramientas a nuestra disposición para esta tarea. La primera de la que voy a hablar, por su sencillez de uso, es &lt;code&gt;hwinfo&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Se trata de una utilidad de línea de comandos que es necesario ejecutar como administrador ya que de otra forma no tendremos los privilegios necesarios para acceder a la información del hardware. Para instalarlo en Debian basta con ejecutar:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# apt-get install hwinfo&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si se invoca directamente &lt;code&gt;hwinfo&lt;/code&gt; sin ningún parámetro, veremos como se pone inmediatamente a detectar el hardware del servidor, tras lo cual muestra en pantalla un informe completo sobre el mismo. Como esta información suele ser muy extensa, lo más apropiado es redirigir la salida estándar a un fichero:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# hwinfo &amp;gt; /tmp/$(date +%Y%m%d)-$(hostname)-hardware.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;De este modo obtendremos un fichero de texto plano que contiene el informe detallado del hardware del sistema y cuyo nombre está compuesto por la fecha y el nombre del servidor. Para consultarlo, podemos abrirlo así:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# less /tmp/20130708-servidor-hardware.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;El informe por defecto es como digo muy extenso, por lo que también podemos optar por su versión resumida:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# hwinfo --short&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cpu: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Intel(R) Core(TM)2 Duo CPU T7250 @ 2.00GHz, 2000 MHz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Intel(R) Core(TM)2 Duo CPU T7250 @ 2.00GHz, 800 MHz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;keyboard:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /dev/input/event14 USB Keykoard&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /dev/input/event0 AT Translated Set 2 keyboard&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mouse:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /dev/input/mice Pixart Imaging USB Optical Mouse&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /dev/input/mice SynPS/2 Synaptics TouchPad&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;graphics card:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; nVidia GeForce 8600M GT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En el caso de que sólo nos interese conocer los detalles de ciertos componentes hardware, podemos restringir la consulta mediante el uso de una serie de palabras clave cuyo listado podemos obtener en el manual electrónico mediante el comando &lt;code&gt;man hwinfo&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Por ejemplo, si quiero conocer información sobre el procesador:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# hwinfo --cpu&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;01: None 00.0: 10103 CPU &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [Created at cpu.304]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Hardware Class: cpu&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Arch: Intel&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Vendor: &amp;#34;GenuineIntel&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Model: 6.15.13 &amp;#34;Intel(R) Core(TM)2 Duo CPU T7250 @ 2.00GHz&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Y si quiero detalles sobre la RAM:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# hwinfo --mem&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1: None 00.0: 10102 Main Memory &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [Created at memory.61]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Hardware Class: memory&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Model: &amp;#34;Main Memory&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Memory Range: 0x00000000-0xbe053fff (rw)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Memory Size: 3 GB&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Config Status: cfg=new, avail=yes, need=no, active=unknown&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Estos parámetros se pueden combinar en un sólo comando e incluso con &lt;code&gt;--short&lt;/code&gt; para obtener un informe resumido:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# hwinfo --short --cpu --network&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cpu: &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Intel(R) Core(TM)2 Duo CPU T7250 @ 2.00GHz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Intel(R) Core(TM)2 Duo CPU T7250 @ 2.00GHz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;network:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; wlan0 Dell Wireless 1390 WLAN Mini-Card&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; eth0 Broadcom BCM4401-B0 100Base-TX&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En todo el tiempo que llevo usándolo, &lt;code&gt;hwinfo&lt;/code&gt; se ha mostrado muy estable y nunca ha producido problemas en los sistemas en los que lo he ejecutado. Sin embargo, si sospechamos que algún componente hardware pueda estar defectuoso, considero una temeridad utilizar una herramienta como &lt;code&gt;hwinfo&lt;/code&gt;, ya que podríamos provocar un &amp;ldquo;kernel panic&amp;rdquo; y la más que probable caída del servidor.&lt;/p&gt;&#10;&lt;p&gt;Según consta en el manual de &lt;code&gt;hwinfo&lt;/code&gt;, tiene un problema: no es capaz de detectar todo el hardware. Por eso, lo complementaremos en futuros artículos con otras herramientas igualmente interesantes.&lt;/p&gt;&#10;</description></item><item><title>Raspberry Pi: Linux embebido para todos</title><link>https://marcoantonioblanco.es/2012/02/raspberry-pi-linux-embebido-para-todos/</link><pubDate>Wed, 08 Feb 2012 16:11:13 +0000</pubDate><guid>https://marcoantonioblanco.es/2012/02/raspberry-pi-linux-embebido-para-todos/</guid><description>&lt;p&gt;Personalmente nunca he sido un fan del mundo embebido. Sin embargo el anuncio de &lt;a class="link" href="http://www.raspberrypi.org/" target="_blank" rel="noopener"&#10; &gt;Raspberry Pi&lt;/a&gt; despertó mi interés por esta concepción minimalista del software y hardware.&lt;/p&gt;&#10;&lt;p&gt;R-Pi es un proyecto patrocinado por la Fundación Raspberry Pi, que consiste en comercializar una computadora por sólo 25 dólares, con objetivo de fomentar la enseñanza de ciencias de la computación. Y cómo no, el sistema operativo que ejecutará será Linux.&lt;/p&gt;&#10;&lt;p&gt;Obviamente, 25 dólares es un precio que llama la atención. Sobre todo cuando estamos hablando de sistemas SoC (&lt;em&gt;System-on-a-chip&lt;/em&gt;) que suelen irse a más de cien. Lo que nos proporciona R-Pi es un procesador ARM, memoria RAM DDR, una GPU, puertos USB/UART y GPIO, Audio,  salida de video  HDMI y &lt;em&gt;Composite&lt;/em&gt;, slot para tarjeta SD. En resumen, en apenas el espacio de una tarjeta de crédito, un mini ordenador personal. El modelo A costará 25 dólares, y el modelo B costará 35, ya que trae el doble de memoria (256MiB) y un puerto e&lt;em&gt;thernet&lt;/em&gt;.&lt;/p&gt;&#10;&lt;p&gt;Pero más allá de su precio, el anuncio de su lanzamiento ha creado un verdadero revuelo en la comunidad Linux. Sin haber salido al mercado, R-Pi tiene ya una amplia comunidad. Hackers y programadores de todo el mundo planean ya los posibles usos o aplicaciones que crearán con esta maravilla. En la propia página Web ya nos muestran algunas de sus habilidades:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://web.archive.org/web/20120208/http://www.raspberrypi.org/archives/571" target="_blank" rel="noopener"&#10; &gt;XBMC ejecutándose sobre R-Pi&lt;/a&gt;. XBMC es un conocido &lt;em&gt;media player.&lt;/em&gt; R-Pi demuestra ser capaz de reproducir vídeos de alta definición usando este software, gracias a su GPU. Por ello, una de las aplicaciones que más seguidores tiene es la de su configuración como centro multimedia (Por cierto que XMBC merece algún dia un artículo aparte en este blog). Dado que el modelo B posee un puerto &lt;em&gt;ethernet&lt;/em&gt;, podremos unirlo a nuestra red local. También le podemos poner un adaptador &lt;em&gt;wireless&lt;/em&gt; USB, o bien conectarle un disco duro USB, o incluso un adaptador TDT.. Al fin y al cabo, es un sistema Linux completo con lo que tendremos infinidad de &lt;em&gt;drivers&lt;/em&gt; a nuestra disposición..&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://web.archive.org/web/20120208/http://www.raspberrypi.org/archives/564" target="_blank" rel="noopener"&#10; &gt;AirPlay and Raspberry Pi&lt;/a&gt;. Reproducción en vivo desde un &lt;em&gt;iPad&lt;/em&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://web.archive.org/web/20120208/http://www.raspberrypi.org/archives/584" target="_blank" rel="noopener"&#10; &gt;Desarrollo de aplicaciones con QT&lt;/a&gt;. La GPU del R-Pi implementa OpenGL ES. Esto es una pequeña demo de &lt;em&gt;live coding&lt;/em&gt;, donde los cambios en el programa se ejecutan en vivo en una capa inferior de la pantalla.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Y, por si le faltara algo, Debian será una las distribuciones oficialmente soportadas. Así pues, R-Pi es barato, tiene &lt;em&gt;momentum&lt;/em&gt;, y sólo la imaginación pone límite a sus posibles aplicaciones. Vamos, que es todo un caramelo para linuxeros recalcitrantes como yo.&lt;/p&gt;&#10;</description></item><item><title>El apoyo de los fabricantes de hardware a Linux</title><link>https://marcoantonioblanco.es/2008/11/el-apoyo-de-los-fabricantes-de-hardware-a-linux/</link><pubDate>Thu, 13 Nov 2008 09:39:27 +0000</pubDate><guid>https://marcoantonioblanco.es/2008/11/el-apoyo-de-los-fabricantes-de-hardware-a-linux/</guid><description>&lt;p&gt;Uno de los principales caballos de batalla de Linux desde sus inicios ha sido y sigue siendo el soporte de hardware. El origen de este problema se encuentra en la naturaleza del propio nacimiento de Linux. Al tratarse de un proyecto libre nacido de la voluntad de colaboración de un conjunto de usuarios sin dependencia alguna de ninguna empresa, la relación con los fabricantes de hardware fue desde el principio prácticamente inexistente.&lt;/p&gt;&#10;&lt;p&gt;Esta dinámica ha ido cambiando a lo largo del tiempo hacia un interés de buena parte de dichos fabricantes por un mercado que indudablemente está creciendo y que reporta pingües beneficios al que sabe estar ahí. No en vano, empresas como Intel, IBM, HP o AMD/ATI se han tomado muy en serio al usuario Linux y, no sólo les dan soporte con controladores Linux para su hardware, sino que además ofrecen las especificaciones técnicas del mismo para ayudar a los desarrolladores del núcleo.&lt;/p&gt;&#10;&lt;p&gt;Sin embargo, seguimos encontrándonos a fabricantes reticentes que, usualmente por motivos nada claros, no quieren saber nada del sistema del pingüino, aunque haya usuarios que les compran su hardware y les exijan soporte, con todo derecho. ¿Qué debemos hacer los &amp;ldquo;sufridos&amp;rdquo; usuarios de Linux en este caso? La respuesta es obvia: ignorar estos fabricantes y apoyar a los que nos apoyan, aunque esto suponga tener que renunciar a &amp;ldquo;golosas ofertas&amp;rdquo;, como ocurrió en 2002 con el caso de las promociones de alta de líneas ADSL de la mayoría de las operadoras que incluían un módem USB. En aquel entonces este tipo de modems no tenía soporte Linux, ni parecía que fuera a tenerlo, ya que ni los fabricantes ni las operadoras ponían el más mínimo interés. Aunque se trataba de hardware de calidad dudosa en el mejor de los casos, los usuarios de Linux querían tener acceso a dichas ofertas. Afortunadamente, gracias a la presión ejercida y al esfuerzo de desarrollo de muchos usuarios, esta situación cambió y fue posible utilizar este tipo de modems bajo Linux con mayor o menor fortuna dependiendo del modelo.&lt;/p&gt;&#10;&lt;p&gt;Esto nos lleva al más interesante de los aspectos del soporte de hardware bajo Linux: la calidad. Es una característica reconocida de Linux que se trata de un sistema muy exigente con el hardware, ya que debe ofrecer las mayores garantías a los datos del usuario (y no como ocurre en la acera de enfrente). Por ello, el que una pieza de hardware tenga soporte bajo Linux es sinónimo de calidad y garantía de rendimiento. ¿Alguien da más? Esperemos que sigan cayendo vendas de los ojos de más fabricantes de hardware.&lt;/p&gt;&#10;</description></item></channel></rss>