<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sistemas Informaticos on Marco Antonio Blanco</title><link>https://marcoantonioblanco.es/tags/sistemas-informaticos/</link><description>Recent content in Sistemas Informaticos on Marco Antonio Blanco</description><generator>Hugo -- gohugo.io</generator><language>es-es</language><copyright>Marco Antonio Blanco</copyright><lastBuildDate>Fri, 07 Nov 2014 10:21:34 +0000</lastBuildDate><atom:link href="https://marcoantonioblanco.es/tags/sistemas-informaticos/index.xml" rel="self" type="application/rss+xml"/><item><title>Truco Linux: Cómo actualizar el contenido de ficheros de texto automáticamente con sed</title><link>https://marcoantonioblanco.es/2014/11/truco-linux-como-actualizar-el-contenido-de-ficheros-de-texto-automaticamente-con-sed/</link><pubDate>Fri, 07 Nov 2014 10:21:34 +0000</pubDate><guid>https://marcoantonioblanco.es/2014/11/truco-linux-como-actualizar-el-contenido-de-ficheros-de-texto-automaticamente-con-sed/</guid><description>&lt;p&gt;Los administradores de sistemas Linux nos enfrentamos constantemente al problema de tener que cambiar un valor en varios ficheros de configuración a la vez, los cuales tienen siempre el formato de texto plano. Por ejemplo, si cambiamos la IP o el nombre de un equipo, hay que recorrerse todo el directorio &lt;code&gt;/etc&lt;/code&gt; en busca de ficheros que contengan una referencia al dato antiguo y cambiarla por el nuevo. Esto, que evidentemente es un proceso tedioso si hay que hacerlo a mano, podemos afortunadamente automatizarlo con una de las herramientas de procesamiento de texto que Linux incluye de serie y que ha heredado de Unix: &lt;code&gt;sed&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;sed&lt;/code&gt; es una utilidad de línea de comandos y nos permite con una sintaxis muy sencilla sustituir una cadena de texto por otra, que incluso permite utilizar expresiones regulares para aplicar la sustitución a patrones de cadenas. La operación más básica de &lt;code&gt;sed&lt;/code&gt; tendría la siguiente forma:&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;# sed &amp;#39;s/antigua/nueva/g&amp;#39; fichero_original &amp;gt; fichero_nuevo&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si no queremos crear un fichero nuevo sino cambiar el existente, incluimos el parámetro &lt;code&gt;-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;# sed -i &amp;#39;s/antigua/nueva/g&amp;#39; fichero_original &amp;gt; fichero_nuevo&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Veamos entonces el ejemplo mencionado de tener que sustituir el nombre del sistema por uno nuevo. Para ello, realizaremos una búsqueda en &lt;code&gt;/etc&lt;/code&gt; y modificaremos los ficheros que contengan la cadena a cambiar.&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;# grep -r -H equipo1 /etc | cut -f 1 -d &amp;#34;:&amp;#34; | xargs sed -i &amp;#39;s/equipo1/equipo2/g&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En la línea anterior combinamos varios comandos Linux para prepara la lista de ficheros a procesar y obtener el resultado deseado con &lt;code&gt;sed&lt;/code&gt;:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;grep&lt;/code&gt; hace una búsqueda recursiva (&lt;code&gt;-r&lt;/code&gt;) en el directorio &lt;code&gt;/etc&lt;/code&gt; e imprime los nombres de lo ficheros coincidentes (&lt;code&gt;-H&lt;/code&gt;).&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;cut&lt;/code&gt; extrae la primera columna (&lt;code&gt;-f&lt;/code&gt;) indicando &lt;code&gt;:&lt;/code&gt; como separador de las mismas (&lt;code&gt;-d&lt;/code&gt;).&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;xargs&lt;/code&gt; recibe la lista de ficheros y se le pasa a &lt;code&gt;sed&lt;/code&gt; uno a uno (si no &lt;code&gt;sed&lt;/code&gt; actuaría sobre toda la lista a la vez, lo cual no puede hacer).&lt;/li&gt;&#10;&lt;li&gt;Finalmente &lt;code&gt;sed&lt;/code&gt; realiza la sustitución.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Este truco es también muy útil para los desarrolladores web, por ejemplo para actualizar plantillas o código fuente. Un aviso: hay que asegurarse de que la cadena a sustituir SÓLO aparece en los ficheros que nos interesan, ya que podemos sufrir el efecto secundario de cambiar lo que no deberíamos.&lt;/p&gt;&#10;&lt;p&gt;Espero que os sea de utilidad. Hasta el truco de la semana que viene.&lt;/p&gt;&#10;</description></item><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>Monitorix, un sencillo sistema de monitorización para servidores Linux</title><link>https://marcoantonioblanco.es/2014/07/monitorix-un-sencillo-sistema-de-monitorizacion-para-servidores-linux/</link><pubDate>Fri, 11 Jul 2014 12:47:08 +0000</pubDate><guid>https://marcoantonioblanco.es/2014/07/monitorix-un-sencillo-sistema-de-monitorizacion-para-servidores-linux/</guid><description>&lt;p&gt;Hace algunos años escribí un artículo sobre la &lt;a class="link" href="https://marcoantonioblanco.es/2009/01/la-necesidad-de-monitorizar-un-sistema-informatico/" &gt;necesidad de monitorizar los sistemas informáticos&lt;/a&gt; a nuestro cargo, en el que comentaba que la tarea de implantar un sistema de monitorización no era tan difícil como exigente. Pues bien, existe un software que no sólo es muy fácil de instalar sino que permite elegir el nivel de exigencia que queramos tanto para nosotros como administradores como para el propio software.&lt;/p&gt;&#10;&lt;p&gt;El software en cuestión se llama &lt;a class="link" href="http://www.monitorix.org" target="_blank" rel="noopener"&#10; &gt;Monitorix&lt;/a&gt;, lo desarrolla &lt;a class="link" href="mailto:jordi@fibranet.cat" &gt;Jordi Sanfeliu&lt;/a&gt; en el lenguaje Perl, es de licencia libre y está disponible para Linux y FreeBSD. Su objetivo es ofrecer un panel de control sencillo, personalizable a través de un único fichero de configuración en texto plano (en algunas distros existe un fichero extra, como veremos más adelante), que permita realizar un detallado seguimiento mediante completas gráficas a los parámetros y servicios del sistema que más nos interesen. Monitorix no sólo nos habla del uso de la CPU, la RAM, la red o el almacenamiento local, sino que está preparado para mantenernos informados del rendimiento de servidores tan populares como Apache o MySQL. Y todo, insisto, a través de gráficas muy completas y a la vez sencillas de interpretar.&lt;/p&gt;&#10;&lt;p&gt;Todo el acceso a Monitorix se realiza a través de navegador web, ya que se invoca a través de un CGI que incluye su propio servidor web (se puede integrar con uno ya existente en el sistema) y que consulta las bases de datos generadas por un demonio que está periódicamente recopilando la información que nos interese.&lt;/p&gt;&#10;&lt;p&gt;Para ello, Monitorix utiliza bases de datos Round Robin (RRD) como &lt;em&gt;backend&lt;/em&gt; para el almacenamiento de los datos recogidos. Esto le permite mantener un histórico del comportamiento del sistema y nos ofrece la posibilidad de consultar la información tanto en tiempo real como del periodo de tiempo que queramos.&lt;/p&gt;&#10;&lt;p&gt;Otra característica muy interesante de Monitorix es que se puede configurar una instancia a través de la cual accedamos a todas las demás instaladas en los sistemas monitorizados. De esta forma sólo necesitamos un panel de control para acceder a toda la información de nuestros sistemas. Para ello hay que activar en la configuración de Monitorix el modo &lt;em&gt;multihost&lt;/em&gt; en el nodo central e indicarle cuales son los otros sistemas a monitorizar a través suyo. La activación de esta característica es muy sencilla y se detalla claramente en la &lt;a class="link" href="http://www.monitorix.org/faq.html#Q112" target="_blank" rel="noopener"&#10; &gt;FAQ del proyecto&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Antes de proceder a explicar cómo instalar Monitorix en Debian, debo aclarar que tenemos dos opciones: instalación manual e instalación mediante repositorio. Qué opción nos interesa más es algo que debemos elegir cada uno en base a nuestras circunstancias particulares, aunque por mi parte tengo claro que para hacer una prueba me quedo con la manual, mientras que para instalar definitivamente no hay nada mejor que usar un repositorio.&lt;/p&gt;&#10;&lt;h5 id="instalación-a-mano"&gt;Instalación a mano&#10;&lt;/h5&gt;&lt;p&gt;Empezamos comprobando cuál es la última versión disponible en &lt;a class="link" href="http://www.monitorix.org/downloads.html" target="_blank" rel="noopener"&#10; &gt;http://www.monitorix.org/downloads.html&lt;/a&gt; y procedemos a la instalación del paquete, sustituyendo &lt;code&gt;(version)&lt;/code&gt; por el número que hemos visto en la web de descarga.&lt;/p&gt;&#10;&lt;p&gt;Primero descargamos el paquete:&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;# wget http://www.monitorix.org/monitorix_(version)-izzy1_all.deb&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A continuación instalamos software de apoyo:&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 rrdtool perl libwww-perl libmailtools-perl libmime-lite-perl librrds-perl libdbi-perl libxml-simple-perl libhttp-server-simple-perl libconfig-general-perl libio-socket-ssl-perl&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ahora instalamos el paquete descargado de Monitorix:&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 monitorix_(version)-izzy1_all.deb&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Y le decimos al sistema que resuelva cualquier depedencia incmplida que pueda haber surgido:&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 -f install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="instalación-mediante-repositorio"&gt;Instalación mediante repositorio&#10;&lt;/h5&gt;&lt;p&gt;En este caso comenzamos editando la lista de repositorios de nuestra Debian en &lt;code&gt;/etc/apt/sources.list&lt;/code&gt; y añadimos el repositorio &lt;code&gt;deb http://apt.izzysoft.de/ubuntu generic universe&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Después añadimos la firma de dicho repositorio importando su clave GPG al 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;# wget -O - http://apt.izzysoft.de/izzysoft.asc 2&amp;gt;/dev/null | apt-key add -&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finalmente actualizamos los repositorios e instalamos el paquete:&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 update &amp;amp;&amp;amp; apt-get install monitorix&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="configuración-y-puesta-en-marcha"&gt;Configuración y puesta en marcha&#10;&lt;/h5&gt;&lt;p&gt;En Debian, configuramos Monitorix a través del fichero &lt;code&gt;/etc/monitorix/conf.d/00-debian.conf&lt;/code&gt;, que sustituye la configuración presente en el fichero principal &lt;code&gt;/etc/monitorix/monitorix.conf&lt;/code&gt;, de forma que no tengamos que tocarlo y así la actualización entre versiones sea más sencilla.&lt;/p&gt;&#10;&lt;p&gt;Dado que Monitorix trabaja sobre los registros del sistema, en este fichero comprobamos que sus caminos son correctos. Asimismo, en la sección &lt;code&gt;&amp;lt;graph_enable&amp;gt;&lt;/code&gt; podemos habilitar y deshabilitar lo que queramos monitorizar. Finalmente, cada parámetro del sistema o servicio a monitorizar tiene su propia sección en la que podemos personalizar su comportamiento.&lt;/p&gt;&#10;&lt;p&gt;Tras cualquier cambio en la configuración, basta con reiniciar el servicio para activarlo:&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;# /etc/init.d/monitorix restart&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;El servidor web que incluye Monitorix es accesible a través del puerto 8080 (también configurable). Para acceder al recién instalado panel de control, abrimos un navegador y apuntamos a &lt;code&gt;http://&amp;lt;IP&amp;gt;:8080/monitorix/&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Con esto tendremos instalado un potente sistema de monitorización, con información directa y sencilla de interpretar y con un bajo impacto en el sistema.&lt;/p&gt;&#10;&lt;p&gt;Espero haberos animado a probar Monitorix. A cambio espero vuestros comentarios.&lt;/p&gt;&#10;</description></item><item><title>Acceso SSH sin contraseña a servidores Linux</title><link>https://marcoantonioblanco.es/2014/06/acceso-ssh-sin-contrasena-a-servidores-linux/</link><pubDate>Mon, 30 Jun 2014 12:16:47 +0000</pubDate><guid>https://marcoantonioblanco.es/2014/06/acceso-ssh-sin-contrasena-a-servidores-linux/</guid><description>&lt;p&gt;Existen numerosos escenarios en los que es necesario automatizar tareas entre dos servidores Linux, como por ejemplo cuando queremos enviar código desde un servidor de desarrollo a otro de demo a través del cuál nuestros clientes van a revisar el trabajo desarrollado hasta el momento. Para ello lo mejor es utilizar el protocolo SSH, que permite no sólo crear sesiones interactivas sino también enviar ficheros y ejecutar comandos remotamente de una forma segura frente a terceros malintencionados. Sin embargo, SSH exige algún tipo de autentificación para acceder al servidor remoto, bien mediante contraseña bien mediante certificados. Lo habitual (por sencillo) es utilizar contraseñas, lo que convertiría cada conexión en algo tedioso al tener que autentificarse cada vez. Por ello, voy a contaros cómo generar una relación de confianza entre dos máquinas Linux para que se puedan automatizar tareas a través de SSH sin el uso de contraseñas.&lt;/p&gt;&#10;&lt;p&gt;Lo primero que hay que hacer es que ambas máquinas cuenten con soporte SSH. Aunque sólo es necesario el servicio en la máquina remota y lo normal en las distribuciones Linux más populares es que el cliente y el servidor se encuentren en paquetes diferentes, es muy útil contar con ambos en toda máquina que caiga bajo nuestra administración, así que procederemos a instalar los dos. En Debian por ejemplo existe un metapaquete que hace eso precisamente:&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 ssh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En Linux, el servicio SSH más popular y soportado es OpenSSH, que es justo el que se acaba de instalar en ambas máquinas.&lt;/p&gt;&#10;&lt;p&gt;A partir de este momento, llamaremos al servidor cliente S1 y al servidor remoto S2. A continuación, accedemos a S1 como el usuario para el que queremos crear la relación de confianza (usuario1) y generamos las claves de autentificación, sin introducir una frase de paso (passphrase):&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;usuario1@S1:~&amp;gt; ssh-keygen -t rsa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Generating public/private rsa key pair.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter file in which to save the key (/home/usuario1/.ssh/id_rsa):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Created directory &amp;#39;/home/usuario1/.ssh&amp;#39;.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter passphrase (empty for no passphrase):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter same passphrase again:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your identification has been saved in /home/usuario1/.ssh/id_rsa.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your public key has been saved in /home/usuario1/.ssh/id_rsa.pub.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The key fingerprint is:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;15:7d:0a:de:d8:a2:06:5f:4f:15:92:3b:14:1e:26:60 usuario1@S1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ahora mediante &lt;code&gt;ssh&lt;/code&gt; vamos a crear el directorio &lt;code&gt;~/.ssh&lt;/code&gt; como usuario2 en S2. El directorio puede ya existir, lo que no supone ningún problema:&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;usuario1@S1:~&amp;gt; ssh usuario2@S2 mkdir -p .ssh usuario2@S2&amp;#39;s password:&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finalmente añadimos la nueva clave pública de usuario1 al fichero &lt;code&gt;.ssh/authorized_keys&lt;/code&gt; (o &lt;code&gt;.ssh/authorized_keys2&lt;/code&gt; según la versión del servidor SSH) de usuario2 en S2 e introducimos la contraseña de usuario2 por última vez:&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;usuario1@S1:~&amp;gt; cat .ssh/id_rsa.pub | ssh usuario2@S2 &amp;#39;cat &amp;gt;&amp;gt; .ssh/authorized_keys&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;usuario2@S2&amp;#39;s password: &#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Desde este momento, ya es posible acceder a S2 como usuario2 desde S1 como usuario1 sin utilizar contraseña:&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;usuario1@S1:~&amp;gt; ssh usuario2@S2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;usuario2@S2:~&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ya podemos incorporar a nuestros &lt;em&gt;scripts&lt;/em&gt; los comandos de SSH (y otras herramientas que hagan uso de SSH, como &lt;code&gt;rsync&lt;/code&gt;) para que las tareas que hayamos automatizado funcionen sin interrupción por el sistema de autentificación.&lt;/p&gt;&#10;&lt;p&gt;Sobra decir que esto NUNCA se debe hacer para el usuario &lt;code&gt;root&lt;/code&gt;, ya que si cae una máquina en manos malintencionadas, se produce un efecto dominó con el resto de servidores con los que tenga una relación de confianza mediante SSH sin contraseña. De hecho, NUNCA se debería tener activo el acceso a &lt;code&gt;root&lt;/code&gt; mediante SSH. Para ello, lo mejor es utilizar certificados, que es algo que veremos en un futuro artículo.&lt;/p&gt;&#10;&lt;p&gt;Espero que esta receta os sea de utilidad en vuestras tareas diarias de administración.&lt;/p&gt;&#10;</description></item><item><title>Gestión dinámica del rendimiento de CPUs bajo Linux</title><link>https://marcoantonioblanco.es/2014/05/gestion-dinamica-del-rendimiento-de-cpus-bajo-linux/</link><pubDate>Fri, 30 May 2014 11:43:57 +0000</pubDate><guid>https://marcoantonioblanco.es/2014/05/gestion-dinamica-del-rendimiento-de-cpus-bajo-linux/</guid><description>&lt;p&gt;Esta semana hemos tenido la enorme suerte de poder impartir un &lt;a class="link" href="https://web.archive.org/web/20140530/http://www.activasistemas.com/Noticia.70&amp;#43;M566f1a0ae53.0.html" target="_blank" rel="noopener"&#10; &gt;seminario sobre seguridad para menores en Internet&lt;/a&gt; en el &lt;a class="link" href="http://www.colegioceusevilla.es/" target="_blank" rel="noopener"&#10; &gt;Colegio CEU San Pablo de Sevilla&lt;/a&gt;. Para ilustrar de forma práctica los conocimientos adquiridos en la sesión, instalamos una pequeña red formada por portátiles de un perfil antiguo (Intel Pentium M 1,6 GHz, 512MB RAM) en los que tenemos instalado Debian Linux con el escritorio XFCE (una pequeña maravilla que saca todo el jugo a equipos poco potentes).&lt;/p&gt;&#10;&lt;p&gt;Aparte de utilizar un escritorio ligero, es posible obtener el máximo rendimiento posible a portátiles tan antiguos gracias al &lt;a class="link" href="http://en.wikipedia.org/wiki/Dynamic_frequency_scaling" target="_blank" rel="noopener"&#10; &gt;escalado dinámico de la frecuencia de la CPU&lt;/a&gt;, una técnica que permite equilibrar el consumo de energía frente a la frecuencia del procesador según las necesidades del usuario. En Linux, esta gestión se realiza a través de los &lt;em&gt;CPU governors&lt;/em&gt;, unos esquemas que indican al núcleo cómo debe llevar a cabo estos ajustes. En este artículo vamos a ver cómo realizar nosotros mismos esta gestión dinámica de la frecuencia de nuestras CPUs, que podemos aplicar a cualquier tipo de sistema, no sólo en portátiles.&lt;/p&gt;&#10;&lt;p&gt;Como es habitual en el resto de mis artículos, la plataforma Linux de referencia es Debian. Aún así, lo que cuento en las siguientes líneas se puede hacer igual o muy parecido en otras distribuciones populares. Evidentemente, vamos a trabajar directamente con el hardware, así que sólo el superusuario tiene los privilegios necesarios para lo que vamos a ver a continuación.&lt;/p&gt;&#10;&lt;p&gt;En primer lugar, hay que activar el soporte de la gestión dinámica de la frecuencia de la CPU. Para ello, si no lo está ya, instalamos el software necesario:&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 cpufrequtils&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Leyendo lista de paquetes... Hecho&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creando árbol de dependencias &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Leyendo la información de estado... Hecho&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Se instalarán los siguientes paquetes extras:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; libcpufreq0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Se instalarán los siguientes paquetes NUEVOS:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cpufrequtils libcpufreq0&#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;Seleccionando el paquete libcpufreq0 previamente no seleccionado.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(Leyendo la base de datos ... 254034 ficheros o directorios instalados actualmente.)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Desempaquetando libcpufreq0 (de .../libcpufreq0_008-1_amd64.deb) ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Seleccionando el paquete cpufrequtils previamente no seleccionado.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Desempaquetando cpufrequtils (de .../cpufrequtils_008-1_amd64.deb) ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Procesando disparadores para man-db ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Configurando libcpufreq0 (008-1) ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Configurando cpufrequtils (008-1) ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ ok ] Loading cpufreq kernel modules...done (powernow-k8).&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ ok ] CPUFreq Utilities: Setting ondemand CPUFreq governor...CPU0...CPU1...done.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Como vemos en el ejemplo, la plataforma hardware que uso en el ejemplo tiene la arquitectura AMD64 y cuenta con dos procesadores (realmente es sólo uno pero con dos núcleos), que son detectados automáticamente al terminar la instalación del software.&lt;/p&gt;&#10;&lt;p&gt;Toda la gestión ser realiza a través del directorio &lt;code&gt;/sys/devices/system/cpu/cpuX/cpufreq&lt;/code&gt;, donde X es el número de orden la CPU que queremos gestionar. Veamos lo que nos encontramos para el primer 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;# cd /sys/devices/system/cpu/cpu0/cpufreq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# ls -l&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;total 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 4096 may 30 affected_cpus&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 4096 may 30 bios_limit&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r-------- 1 root root 4096 may 30 cpuinfo_cur_freq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 4096 may 30 cpuinfo_max_freq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 4096 may 30 cpuinfo_min_freq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 4096 may 30 cpuinfo_transition_latency&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 4096 may 30 related_cpus&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 4096 may 30 scaling_available_frequencies&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 4096 may 30 scaling_available_governors&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 4096 may 30 scaling_cur_freq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 4096 may 30 scaling_driver&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r-- 1 root root 4096 may 29 scaling_governor&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r-- 1 root root 4096 may 30 scaling_max_freq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r-- 1 root root 4096 may 30 scaling_min_freq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r-- 1 root root 4096 may 30 scaling_setspeed&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x 2 root root 0 may 30 stats&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Se puede apreciar que, excepto &lt;code&gt;stats&lt;/code&gt; que es un directorio, el resto de contenido son ficheros que se pueden consultar y modificar para realizar la gestión dinámica de la frecuencia. Veamos qué &lt;em&gt;governors&lt;/em&gt; tenemos disponibles, cuál es el que está actualmente configurado y activo en este procesador y cuál es su frecuencia actual (en Hz):&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 scaling_available_governors&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;userspace powersave conservative ondemand performance &#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 scaling_governor&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ondemand&#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 cpuinfo_cur_freq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1000000&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Es decir, que el procesador está configurado para que modifique su frecuencia de forma dinámica según las necesidades del sistema en cada momento (el &lt;em&gt;governor&lt;/em&gt; &lt;code&gt;ondemand&lt;/code&gt;). Muy parecido es el &lt;em&gt;governor&lt;/em&gt; &lt;code&gt;conservative&lt;/code&gt;, que cambia la frecuencia de forma más gradual en vez de saltar directamente a la velocidad de CPU necesaria, lo que lo hace más idóneo para sistemas alimentados por batería. Los &lt;em&gt;governors&lt;/em&gt; &lt;code&gt;performance&lt;/code&gt; y &lt;code&gt;powersave&lt;/code&gt; configuran la CPU a la máxima y mínima frecuencia de forma estática, respectivamente, y el &lt;em&gt;governor&lt;/em&gt; &lt;code&gt;userspace&lt;/code&gt; permite que los usuarios y procesos con privilegios de superusuario puedan modificar dinámicamente la velocidad del procesador.&lt;/p&gt;&#10;&lt;p&gt;Supongamos que queremos utilizar el &lt;em&gt;governor&lt;/em&gt; &lt;code&gt;performance&lt;/code&gt;. Nada más sencillo:&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;# echo performance &amp;gt; scaling_governor&#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 scaling_governor&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;performance&#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 cpuinfo_cur_freq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2200000&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ya tenemos la CPU a pleno rendimiento (y gastando más energía, claro).&lt;/p&gt;&#10;&lt;p&gt;En el directorio &lt;code&gt;/sys/devices/system/cpu/cpuX/cpufreq&lt;/code&gt; tenemos más ficheros para consultar más datos sobre nuestras CPUs y alterar su comportamiento, pero también podemos hacerlo a través de una sencilla herramienta de línea de comandos:&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;# cpufreq-info&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Report errors and bugs to cpufreq@vger.kernel.org, please.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;analyzing CPU 0:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; driver: powernow-k8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CPUs which run at the same hardware frequency: 0 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CPUs which need to have their frequency coordinated by software: 0 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; maximum transition latency: 109 us.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hardware limits: 1000 MHz - 2.20 GHz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; available frequency steps: 2.20 GHz, 2.00 GHz, 1.80 GHz, 1000 MHz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; available cpufreq governors: userspace, powersave, conservative, ondemand, performance&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; current policy: frequency should be within 1000 MHz and 2.20 GHz.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; The governor &amp;#34;performance&amp;#34; may decide which speed to use&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; within this range.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; current CPU frequency is 2.20 GHz (asserted by call to hardware).&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cpufreq stats: 2.20 GHz:18,75%, 2.00 GHz:2,63%, 1.80 GHz:15,07%, 1000 MHz:63,55% (3424)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;analyzing CPU 1:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; driver: powernow-k8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CPUs which run at the same hardware frequency: 0 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CPUs which need to have their frequency coordinated by software: 0 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; maximum transition latency: 109 us.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hardware limits: 1000 MHz - 2.20 GHz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; available frequency steps: 2.20 GHz, 2.00 GHz, 1.80 GHz, 1000 MHz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; available cpufreq governors: userspace, powersave, conservative, ondemand, performance&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; current policy: frequency should be within 1000 MHz and 2.20 GHz.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; The governor &amp;#34;performance&amp;#34; may decide which speed to use&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; within this range.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; current CPU frequency is 2.20 GHz (asserted by call to hardware).&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cpufreq stats: 2.20 GHz:18,75%, 2.00 GHz:2,63%, 1.80 GHz:15,07%, 1000 MHz:63,55% (3424)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mediante &lt;code&gt;cpufreq-info -h&lt;/code&gt; podemos consultar la lista de parámetros disponibles para poder elegir la información concreta que queremos obtener en cada momento. También contamos con las utilidades &lt;code&gt;cpufreq-set&lt;/code&gt; para modificar el comportamiento de la CPU y &lt;code&gt;cpufreq-aperf&lt;/code&gt; para calcular la frecuencia media en un periodo de tiempo (atención: no todas las CPUs admiten esta consulta). Ambas herramientas admiten el parámetro &lt;code&gt;-h&lt;/code&gt; para obtener la lista de opciones que ofrecen.&lt;/p&gt;&#10;&lt;p&gt;Sin embargo, todos los cambios que hagamos se pierden en el momento en que reiniciemos el equipo. Por tanto hay que utilizar un mecanismo que nos permita mantener nuestras modificaciones entre reinicios. Si sólo queremos establecer un governor concreto, basta con que lo especifiquemos en el fichero &lt;code&gt;/etc/default/cpufrequtils&lt;/code&gt; (si no existe, lo creamos) insertando el siguiente contenido:&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;GOVERNOR=&amp;#34;performance&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si queremos modificar otros parámetros de la CPU, como la frecuencia de inicio, es necesario instalar el paquete &lt;code&gt;sysfsutils&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;# apt-get install sysfsutils&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Leyendo lista de paquetes... Hecho&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Creando árbol de dependencias &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Leyendo la información de estado... Hecho&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Se instalarán los siguientes paquetes extras:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; libsysfs2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Se instalarán los siguientes paquetes NUEVOS:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; libsysfs2 sysfsutils&#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;Seleccionando el paquete libsysfs2:amd64 previamente no seleccionado.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(Leyendo la base de datos ... 254004 ficheros o directorios instalados actualmente.)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Desempaquetando libsysfs2:amd64 (de .../libsysfs2_2.1.0+repack-2_amd64.deb) ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Seleccionando el paquete sysfsutils previamente no seleccionado.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Desempaquetando sysfsutils (de .../sysfsutils_2.1.0+repack-2_amd64.deb) ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Procesando disparadores para man-db ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Configurando libsysfs2:amd64 (2.1.0+repack-2) ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Configurando sysfsutils (2.1.0+repack-2) ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ ok ] Setting sysfs variables....&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;y modificar el fichero &lt;code&gt;/etc/sysfs.conf&lt;/code&gt; adecuadamente. Dicho fichero incluye suficientes ejemplos como para que sea sencilla la tarea de incluir nuestras propias modificaciones. Tras guardar los cambios, los activamos con &lt;code&gt;/etc/init.d/sysfsutils start&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;En definitiva, gracias a los &lt;em&gt;governors&lt;/em&gt; los administradores de sistemas Linux contamos con una herramienta potente y flexible para optimizar el rendimiento de uno de nuestros recursos más preciados: las CPUs de los sistemas a nuestros cargo.&lt;/p&gt;&#10;</description></item><item><title>Fail2ban, protección frente a ataques de fuerza bruta a servidores</title><link>https://marcoantonioblanco.es/2014/05/fail2ban-proteccion-frente-a-ataques-de-fuerza-bruta-a-servidores/</link><pubDate>Mon, 05 May 2014 14:08:04 +0000</pubDate><guid>https://marcoantonioblanco.es/2014/05/fail2ban-proteccion-frente-a-ataques-de-fuerza-bruta-a-servidores/</guid><description>&lt;p&gt;Dentro de las preocupaciones que tenemos los que gestionamos servidores que ofrecen servicios a través de Internet destaca sin duda su seguridad a la vez que aseguramos su funcionamiento continuo. Uno de los ataques más recurrentes y habituales que sufren estos servidores es el de fuerza bruta, que consiste en la prueba sistemática y continua de un servicio hasta que se descubre una vulnerabilidad o hasta que se consigue que el servicio (en algunos casos incluso el propio servidor) deje de funcionar. Ante este tipo de ataques se utiliza una medida sencilla y efectiva, como es la utilización de algún sistema de control o filtrado de paquetes (por ejemplo, el conocido &lt;a class="link" href="https://es.wikipedia.org/wiki/TCP_Wrapper" target="_blank" rel="noopener"&#10; &gt;TCP Wrapper&lt;/a&gt; o el no menos popular &lt;a class="link" href="http://www.netfilter.org/" target="_blank" rel="noopener"&#10; &gt;iptables&lt;/a&gt;, el cortafuegos del núcleo de Linux). A través de alguna de estas herramientas podemos bloquear las direcciones IP de las que proceden los ataques. Sin embargo, son muchos los servicios a controlar y las IPs a bloquear al cabo de un tiempo. Afortunadamente, contamos con una gran herramienta que permite la automatización de esta línea de defensa: &lt;a class="link" href="http://www.fail2ban.org" target="_blank" rel="noopener"&#10; &gt;Fail2ban&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Se trata de un sistema de prevención de intrusiones que funciona no sólo en Linux sino en cualquier sistema POSIX que incluya un interfaz a un sistema de control de paquetes como los que he comentado antes, lo que quiere decir que funciona en otros sistemas como FreeBSD y Mac OS X. Además, como está escrito en Python, bastaría desplegar el código fuente y ejecutarlo para &amp;ldquo;echarlo a andar&amp;rdquo;. Sin embargo, es mucho mejor y más sencillo instalarlo a través de los repositorios oficiales de nuestra distribución Linux de elección.&lt;/p&gt;&#10;&lt;p&gt;En el caso de Debian, basta con:&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 fail2ban&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mientras que en el caso de Red Hat y sus derivativas se instala con:&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;# yum install fail2ban&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Fail2ban funciona monitorizando los ficheros de registro del sistema en busca de entradas concretas y actuando en consecuencia a través de la ejecución de scripts que llevan a cabo las acciones deseadas por el administrador. Por ejemplo, si se detectan demasiados intentos erróneos de acceso al servidor FTP, se puede bloquear la IP desde la que se han realizado y enviar un email al administrador notificando el evento. Este bloqueo se realiza habitualmente mediante la adición de reglas en el cortafuegos y/o al fichero &lt;code&gt;hosts.deny&lt;/code&gt; de TCP Wrapper. Además, se le puede indicar a Fail2ban que desbloquee la IP tras cierto periodo de tiempo, lo que nos sirve para evitar que conexiones legítimas (imaginemos un cliente de correo reinstalado al que se le introduce mal la contraseña del usuario) queden bloqueadas definitivamente. Generalmente, basta un bloqueo temporal para detener un ataque de fuerza bruta. Por defecto, 3 intentos fallidos (parámetro &lt;code&gt;maxretry&lt;/code&gt;) en los últimos 10 minutos (parámetro &lt;code&gt;findtime&lt;/code&gt;) provocan que una IP sea bloqueada otros 10 minutos (parámetro &lt;code&gt;bantime&lt;/code&gt;).&lt;/p&gt;&#10;&lt;p&gt;Una vez instalado, Fail2ban nos ofrece una serie de configuraciones estándares para los servicios más habituales (apache, postfix, ssh, etc.), por lo que sólo tenemos que editar el fichero &lt;code&gt;/etc/fail2ban/jail.conf&lt;/code&gt; y activar los filtros que nos convengan (basta con cambiar &lt;code&gt;enabled = false&lt;/code&gt; por &lt;code&gt;enabled = true&lt;/code&gt; en el filtro correspondiente). Estos filtros se definen a mediante expresiones regulares Python y se almacenan en ficheros dentro del directorio &lt;code&gt;/etc/fail2ban/filter.d&lt;/code&gt;, por lo que es relativamente sencillo crear nuevos y adaptar los existentes. De igual modo, las acciones se guardan en el directorio &lt;code&gt;/etc/fail2ban/action.d&lt;/code&gt;, en un formato propio de Fail2ban (muy sencillo) a través del cual se especifican los comandos a ejecutar y otros parámetros necesarios para un correcto funcionamiento de cada acción. Por cierto, a la combinación de un filtro y una acción se le conoce con el nombre de &amp;ldquo;jail&amp;rdquo; (cárcel). De ahí el nombre del fichero de activación de filtros.&lt;/p&gt;&#10;&lt;p&gt;Cada vez que realicemos un cambio en los ficheros de configuración de Fail2ban es necesario reiniciarlo, como es habitual en cualquier servicio:&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;# service fail2ban restart&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Desgraciadamente, no hay sistema perfecto y Fail2ban presenta dos importantes carencias: no protege ante ataques distribuidos y no incluye soporte IPv6. Aún así, Fail2ban supone una gran ayuda y una línea más en la defensa de nuestros servidores expuestos en Internet.&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: 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>MultiCD, integración de varias ISOs en un pendrive USB</title><link>https://marcoantonioblanco.es/2013/06/multicd-integracion-de-varias-isos-en-un-pendrive-usb/</link><pubDate>Fri, 21 Jun 2013 11:12:14 +0000</pubDate><guid>https://marcoantonioblanco.es/2013/06/multicd-integracion-de-varias-isos-en-un-pendrive-usb/</guid><description>&lt;p&gt;En el &lt;a class="link" href="https://marcoantonioblanco.es/2013/04/unetbootin-creando-dispositivos-usb-en-vivo-desde-imagenes-iso/" &gt;artículo sobre Unetbootin&lt;/a&gt; comenté que su mayor carencia era que sólo podía grabar una única imagen ISO en el dispositivo USB. Dada la gran utilidad que tendría el poder integrar varias imagenes en un único &lt;em&gt;pendrive&lt;/em&gt;, he estado buscando una herramienta que lo permitiese hasta que he dado con &lt;a class="link" href="http://multicd.tuxfamily.org/" target="_blank" rel="noopener"&#10; &gt;MultiCD&lt;/a&gt;, la cual sin ser perfecta cumple con creces con este objetivo.&lt;/p&gt;&#10;&lt;p&gt;MultiCD es un &lt;em&gt;shell script&lt;/em&gt; (por lo tanto, sólo sirve para Linux) con un funcionamiento muy sencillo: lee cada ISO que queramos integrar, construye el menú principal que nos permitirá acceder a cada imagen y finalmente genera una nueva ISO con toda la información anterior. Ya es cuestión nuestra el volcarla al &lt;em&gt;pendrive&lt;/em&gt;, pero para ello recomiendo el mismo mecanismo que en el caso de la &lt;a class="link" href="https://marcoantonioblanco.es/2013/03/instalacion-de-distros-en-raspberry-pi/" &gt;instalación de distros en Raspberry Pi&lt;/a&gt;. Evidentemente, podemos también quemarla en un CD o DVD, dependiendo del tamaño final resultante.&lt;/p&gt;&#10;&lt;p&gt;Su instalación es muy sencilla. Basta con acceder al enlace de descarga en GitHub que figura en la web oficial de MultiCD (el enlace a tuxfamily.org no funciona) y pulsar en el botón que aparece en la columna de la derecha con la leyenda &amp;ldquo;Download ZIP&amp;rdquo;. Una vez terminada la descarga, descomprimimos en un directorio de nuestra elección y nos aseguramos que el &lt;em&gt;script&lt;/em&gt; principal tiene los permisos de ejecución adecuados.&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;# chmod 755 multicd.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ahora basta con copiar o enlazar las imágenes ISO a integrar al directorio de instalación de MultiCD y ejecutar el &lt;em&gt;script&lt;/em&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;# ./multicd.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Antes de proceder a ejecutar el script por primera vez debemos asegurarnos de que contamos con los paquetes &lt;code&gt;mkisofs&lt;/code&gt; o &lt;code&gt;genisoimage&lt;/code&gt; para la generación de la ISO final.&lt;/p&gt;&#10;&lt;p&gt;La ejecución de MultiCD la podemos hacer tanto como usuario root como usuario estándar, ya que el script se encarga de utilizar las herramientas adecuadas en cada caso. Mi recomendación es probar primero como usuario no privilegiado y pasar a root únicamente si no nos queda más remedio.&lt;/p&gt;&#10;&lt;p&gt;MultiCD sólo es capaz de integrar aquellas ISO para las que tiene un &lt;em&gt;plugin&lt;/em&gt; preparado a tal efecto (cada &lt;em&gt;plugin&lt;/em&gt; es igualmente un &lt;em&gt;shell script&lt;/em&gt; que se encarga de gestionar las particularidades de cada imagen), pero la lista de ellos es enorme y cubre las necesidades de prácticamente cualquier usuario. Esta lista se puede consultar en la web de MultiCD, pero incluso hay ISOs soportadas que no aparecen en la misma, por lo que la mejor manera de saber qué está soportado es consultar el listado de &lt;em&gt;scripts&lt;/em&gt; del directorio &lt;code&gt;plugins&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Si al ejecutar MultiCD no se incluye alguna de las imágenes seleccionadas, sólo tenemos que consultar en la lista de ISOs de la web cómo espera MultiCD que se llame dicha imagen y renombrarla adecuadamente.&lt;/p&gt;&#10;&lt;p&gt;Desgraciadamente, en mis pruebas he descubierto que muchos de ellos no están actualizados para reconocer las últimas versiones de la ISO correspondiente (como es el caso del utilísimo Ultimate Boot CD o del apreciado Kaspersky Rescue Disk), lo que disminuye la utilidad de MultiCD. Aún así, me he construido un pendrive de lo más interesante con las siguientes imagenes:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;NetbootCD (instalación por red de las distribuciones Linux más populares)&lt;/li&gt;&#10;&lt;li&gt;SuperGrubDisk2 (inicio de sistemas Linux con arranque defectuoso)&lt;/li&gt;&#10;&lt;li&gt;Rescatux (reparación del arranque de sistemas Linux)&lt;/li&gt;&#10;&lt;li&gt;System Rescue CD (Linux en vivo para el mantenimiento de sistemas)&lt;/li&gt;&#10;&lt;li&gt;Clonezilla (clonación de sistemas)&lt;/li&gt;&#10;&lt;li&gt;AVG Antivirus&lt;/li&gt;&#10;&lt;li&gt;Memtest86+ (comprobación de RAM; incluido de serie)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;En definitiva, MultiCD es una herramienta muy útil para los que nos dedicamos a la gestión de sistemas informáticos. Os animo a probarla y a que compartáis vuestras impresiones.&lt;/p&gt;&#10;</description></item><item><title>UNetbootin, creando dispositivos USB en vivo desde imagenes ISO</title><link>https://marcoantonioblanco.es/2013/04/unetbootin-creando-dispositivos-usb-en-vivo-desde-imagenes-iso/</link><pubDate>Mon, 08 Apr 2013 10:30:51 +0000</pubDate><guid>https://marcoantonioblanco.es/2013/04/unetbootin-creando-dispositivos-usb-en-vivo-desde-imagenes-iso/</guid><description>&lt;p&gt;Mientras escribía el &lt;a class="link" href="https://marcoantonioblanco.es/2013/03/berryboot-multiples-distros-para-raspberry-pi-en-una-sola-tarjeta-sd/" &gt;artículo anterior sobre Berryboot&lt;/a&gt;, se me vino a la cabeza otra herramienta que tiene algún punto en común con ella: &lt;a class="link" href="http://unetbootin.sourceforge.net" target="_blank" rel="noopener"&#10; &gt;UNetbootin&lt;/a&gt;. Se trata de una sencilla aplicación que permite crear dispositivos USB en vivo a partir de imágenes ISO de distribuciones Linux y otras herramientas autoarrancables desde una unidad óptica. Al igual que Berryboot, UNetbootin nos permite elegir de una lista predefinida qué distro queremos en nuestro &lt;em&gt;pendrive&lt;/em&gt;, tras lo cual procederá a descargarsela e instalarla en el dispositivo USB. Aquí acaban las similitudes con Berryboot, ya que los objetivos, finalidad, plataforma hardware y formas de trabajar de ambas herramientas son diferentes (por ejemplo, UNetbootin sólo permite una distro por dispositivo, al contrario que Berryboot).&lt;/p&gt;&#10;&lt;p&gt;La forma de trabajar con UNetbootin es muy sencilla. Basta con dirigirnos a su &lt;a class="link" href="http://unetbootin.sourceforge.net" target="_blank" rel="noopener"&#10; &gt;web oficial&lt;/a&gt; y descargarnos el binario correspondiente a nuestro sistema operativo (existen versiones para Linux, Windows y MacOSX). Antes de proceder a ejecutarlo debemos haber conectado y montado el dispositivo USB de destino. Una nota de seguridad: aunque se trata de software libre y nos lo estamos bajando de una web de confianza como Sourceforge, se trata de la descarga de un binario y no está de más que tenga cuidado extra, sobre todo teniendo en cuenta que se trata de un software que exige permisos de administrador para su funcionamiento.&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://marcoantonioblanco.es/images/wp/2013/04/unetbootin.png" &gt;&lt;img alt="unetbootin" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://marcoantonioblanco.es/images/wp/2013/04/unetbootin-300x226.png"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;UNetbootin recién iniciado&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;La ventana de UNetbootin nos muestra dos opciones: o bien elegimos la imagen a instalar del desplegable superior (donde descubriremos una &lt;a class="link" href="http://unetbootin.sourceforge.net/#features" target="_blank" rel="noopener"&#10; &gt;lista impresionante de posibilidades&lt;/a&gt;) o bien proveemos nuestra propia imagen ISO (si a alguien se le ocurre probar cosas &amp;ldquo;diferentes&amp;rdquo;, como una versión de Windows, y tiene éxito que por favor nos lo haga saber en los comentarios). En cualquier caso, una vez realizada la selección, debemos elegir la unidad de destino del desplegable inferior. Aquí, como he comentado en artículos anteriores, debemos tener especial cuidado ya que se trata de una herramienta destructiva por naturaleza y podemos dañar el contenido de otros dispositivos si no ponemos atención (de hecho, UNetbootin nos deja incluso elegir discos duros). Finalmente, sólo queda pulsar en el botón de &amp;ldquo;Aceptar&amp;rdquo; y esperar a que acabe el proceso.&lt;/p&gt;&#10;&lt;p&gt;Una de las mayores ventajas de UNetbootin (aparte del ahorro en CDs y DVDs) es que nos permite trabajar de forma sencilla con equipos que carecen de unidad óptica, como es el caso de los netbooks. De este modo es posible probar e instalar una distro Linux o realizar tareas de mantenimiento con algunas de las herramientas de diagnóstico y detección de antivirus que UNetbootin permite utilizar. Sin duda, se trata de una utilidad de gran valor.&lt;/p&gt;&#10;</description></item><item><title>Reestructuración de un sistema informático</title><link>https://marcoantonioblanco.es/2013/01/reestructuracion-de-un-sistema-informatico/</link><pubDate>Fri, 11 Jan 2013 13:12:59 +0000</pubDate><guid>https://marcoantonioblanco.es/2013/01/reestructuracion-de-un-sistema-informatico/</guid><description>&lt;p&gt;Tal y como hemos &lt;a class="link" href="https://web.archive.org/web/20130111/http://www.activasistemas.com/Noticia.70&amp;#43;M59144a3130a.0.html" target="_blank" rel="noopener"&#10; &gt;anunciado hoy&lt;/a&gt; en nuestra web corporativa, la &lt;a class="link" href="http://www.faecta.es" target="_blank" rel="noopener"&#10; &gt;Federación Andaluza de Empresas Cooperativas de Trabajo Asociado (FAECTA)&lt;/a&gt; nos ha adjudicado la gestión de su sistema informático en los próximos dos años. Aparte de la alegría que supone, esta concesión implica además una gran cantidad de trabajo al inicio del proyecto, ya que el primer paso que damos en un servicio de asistencia informática es el de la reestructuración de los activos TIC del cliente en busca de una estabilidad, robustez, seguridad y eficiencia que permita traducir el uso de las herramientas informáticas en un aumento de la productividad de la entidad y en un notable descenso de las incidencias técnicas. Veamos en las siguientes líneas cómo lo llevamos a cabo en Activa Sistemas.&lt;/p&gt;&#10;&lt;p&gt;Existe un procedimiento previo indispensable e ineludible para llevar a buen puerto la reestructuración: la realización de una profunda auditoría del sistema informático que incluya un detallado inventario hardware y software y que permita descubrir las fortalezas y carencias del mismo a nivel de funcionalidad, rendimiento y seguridad. Con esta información en nuestro poder se procede a redactar una serie de medidas y propuestas a desarrollar para potenciar y proteger las fortalezas y resolver las carencias.&lt;/p&gt;&#10;&lt;p&gt;Aunque a priori es imposible saber con lo que uno se va a encontrar en un sistema informático con el que se tiene contacto por primera vez, es igualmente cierto que suele haber una serie de puntos a resolver y de medidas a tomar comunes a todos los proyectos (al menos esa es nuestra experiencia hasta la fecha).&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Elaboración de políticas de uso y seguridad de los activos TIC. Su importancia radica en que sin estos documentos es prácticamente imposible conseguir la deseada estabilidad del sistema informático que permita aumentar la productividad y disminuir los costes de mantenimiento. Es fundamental que las políticas estén avaladas por la gerencia de la entidad para que tengan validez operativa y que no entren en conflicto con la normativa vigente para que tengan validez legal (por ejemplo, un error muy común es incluir penalizaciones a los usuarios por el mal uso del sistema, algo que corresponde realmente al reglamento interno, los estatutos de la entidad y la legislación vigente).&lt;/li&gt;&#10;&lt;li&gt;Saneamiento de la red local a nivel físico, tanto cableado como inalámbrico. La base de un sistema informático es su red local física y, si esta se encuentra en mal estado o no da el rendimiento adecuado, todo el sistema se resiente drásticamente. Por ello hay que asegurarse de que todos los nodos de la red cuentan con el acceso de calidad y ancho de banda que requieren para llevar a cabo sus funciones, preferiblemente cableado, relegando el acceso inalámbrico a los casos justificados.&lt;/li&gt;&#10;&lt;li&gt;Renovación del parque de puestos de trabajo. Para que un ordenador de escritorio sea realmente productivo como herramienta de trabajo, es imprescindible que su ciclo de vida no supere los cinco años (al meno, a día de hoy). Por algo será que en España las normas contables consideran que su amortización está completa a los tres años&amp;hellip;&lt;/li&gt;&#10;&lt;li&gt;Implantación de un sistema de seguridad perimetral y de gestión de las comunicaciones. Con el aumento año tras año de las ciberamenazas, cada vez es más imprescindible con un sistema que no sólo gestione el acceso a Internet (y que incluso lo acelere en la medida de lo posible) sino que además permita conectar de forma segura y privada a usuarios remotos y que nos defienda de problemas externos, desde el &lt;em&gt;spam&lt;/em&gt; hasta intrusiones, pasando por malware y contenido no deseado.&lt;/li&gt;&#10;&lt;li&gt;Implantación de un servidor centralizado de usuarios, datos y aplicaciones. He visto problemas y carencias de todo tipo, pero el que más me horroriza y que hace que me eche las manos a la cabeza es cuando me encuentro que la empresa no tiene servidor de ningún tipo y que toda la información se encuentra repartida en los distintos puestos de trabajo. Con un servidor central es posible controlar el acceso de usuarios a ficheros, la gestión de recursos compartidos e incluso permitirnos una intranet para el acceso desde cualquier sitio al correo, la agenda, las tareas, etc.&lt;/li&gt;&#10;&lt;li&gt;Implantación de un sistema de copias de seguridad.La gente no se lo cree, pero las desgracias ocurren y, una vez que se producen, es demasiado tarde y sólo queda lamentarse y asumir las consecuencias si no se han tomado las medidas oportunas. Por ello, al igual que se contratan diversos seguros para proteger los activos de una empresa, también hay que implantar un completo sistema de salvaguarda de la información de la entidad, contemplando desde los dispositivos de copia en sí (por ejemplo, un NAS o un espacio virtual en la nube) hasta la política adecuada a las necesidades locales.&lt;/li&gt;&#10;&lt;li&gt;Homogeneización de sistemas operativos, aplicaciones y herramientas. Un parque muy heterogéneo de programas, tanto a nivel de sistema operativo como de aplicaciones, conlleva ciertos problemas como una gestión compleja del sistema y una mayor probabilidad de fallos y averías. Sólo hay que pensar en mantenimiento, actualizaciones, incompatibilidades, etc., para darnos cuenta de lo crítico de este punto. Una sugerencia que podemos hacer en este punto es la de migrar a software libre y, si es posible, incluso a Linux.&lt;/li&gt;&#10;&lt;li&gt;Unificación de los servicios de Internet. Es demasiado común encontrarse con que la web corporativa está alojada en un proveedor y el correo electrónico en otro (usualmente, la misma empresa de telecomunicaciones que provee del acceso a Internet). Aparte de la complicación en la gestión que ello supone, implica un mayor gasto que si se unificara todo bajo un mismo proveedor y servicio de alojamiento.&lt;/li&gt;&#10;&lt;li&gt;Actualización del sitio web corporativo. Si poco caso se le echa al alojamiento, lo mismo podemos decir del contenido, es decir, el sitio web en sí. Una vez instalado por primera vez, las empresas suelen olvidarse del él, lo que agrava el gasto que supone el alojamiento. Para que un sitio web sea efectivo, es vital mantenerlo vivo, ya sea a nivel de contenidos para mejorar el &lt;a class="link" href="https://marcoantonioblanco.es/tags/marketing/" &gt;posicionamiento en buscadores&lt;/a&gt;, a nivel de funcionalidades para ofrecer un mejor servicio a los visitantes como a nivel de motor para facilitar su gestión y resolver problemas de funcionamiento y seguridad.&lt;/li&gt;&#10;&lt;li&gt;Elaboración de un plan formativo de los usuarios para renovar y poner al día sus conocimientos TIC. Si se desea disminuir el número de incidencias técnicas y aprovechar los recursos TIC al máximo, es evidente que los usuarios deben estar capacitados para ello. Un plan formativo adecuado a las necesidades de la entidad y diseñado de forma dinámica y efectiva es una garantía de éxito.&lt;/li&gt;&#10;&lt;li&gt;Implantación de nuevos servicios y funcionalidades. Una vez resuelto todo lo básico, es el momento de mirar al futuro y de proponer novedades y mejoras TIC que supongan un salto cualitativo en la productividad de la entidad: software libre, &lt;em&gt;cloud computing&lt;/em&gt;, teletrabajo, movilidad, etc.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;No nos hemos encontrado aún una empresa u organización que necesite de todas estas medidas porque efectivamente sufra de todas las carencias correspondientes (sencillamente dudo que pudiesen funcionar), pero la mayoría sí que han necesitado de buena parte de estas soluciones. Es entonces de suma importancia que los responsables de la entidad sean capaces de ver que se trata de medidas necesarias (al fin y al cabo, un aprovechamiento óptimo de las TIC supone una enorme ventaja competitiva) y que la inversión sensata en TICs es eso, una inversión y no un gasto.&lt;/p&gt;&#10;</description></item><item><title>Probando el rendimiento de discos duros bajo Linux</title><link>https://marcoantonioblanco.es/2012/12/probando-el-rendimiento-de-discos-duros-bajo-linux/</link><pubDate>Fri, 21 Dec 2012 13:59:21 +0000</pubDate><guid>https://marcoantonioblanco.es/2012/12/probando-el-rendimiento-de-discos-duros-bajo-linux/</guid><description>&lt;p&gt;A principios de 2012 le compré un nuevo disco duro a mi portátil con el único propósito de ampliar el escaso espacio libre que me quedaba en el antiguo. Por cierto, utilicé Clonezilla para la operación de copiar todas la información desde el disco original al nuevo y, mientras que mi sistema Linux salió andando sin problemas, tuve que dedicar varias horas a reparar la licencia de Windows Vista que aún conservo (ya que la pagué con el portátil, me la quedé).&lt;/p&gt;&#10;&lt;p&gt;Aunque el tener el doble de espacio es una gozada (pasé de 250 a 500GB), surgió un problema que no me esperaba: el rendimiento del portátil cayó notablemente, lo que en principio era achacable al acceso al nuevo disco. Así que para comprobar la validez de dicha sospecha, esta misma semana he realizado una serie de pruebas al nuevo disco desde Linux. Todas estas pruebas tuve que realizarlas como administrador del sistema ya que de otra forma no tendría los privilegios suficientes para acceder a los recursos necesarios para llevarlas a cabo de manera correcta.&lt;/p&gt;&#10;&lt;p&gt;Lo primero que hice fue comprobar el rendimiento del disco a nivel de hardware con el comando &lt;code&gt;hdparm&lt;/code&gt;, una herramienta muy completa que permite realizar una gestión completa de nuestros discos duros. Como tal, es igualmente útil como peligrosa para nuestros datos si no la usamos bien.&lt;/p&gt;&#10;&lt;p&gt;En el caso que nos ocupa, utilicé dos parámetros simultáneamente para medir el rendimiento del nuevo disco. &lt;code&gt;t&lt;/code&gt; nos devuelve la transferencia de datos directa (&lt;em&gt;buffered&lt;/em&gt;) y &lt;code&gt;T&lt;/code&gt; nos ofrece la transferencia de datos a través de caché (&lt;em&gt;cached&lt;/em&gt;). Al combinar ambos parámetros en el mismo comando, se ponderan entre sí y nos ofrecen unos resultados más acordes con la realidad de nuestro dispositivo. Estos fueron mis resultados:&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 -tT /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; Timing cached reads: 2234 MB in 2.00 seconds = 1094.17 MB/sec&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Timing buffered disk reads: 220 MB in 3.00 seconds = 71.56 MB/sec&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Este comando hay que repetirlo tres veces para estar seguros de que los datos son estables y, por lo tanto, fiables. Comparando el resultado de las lecturas directas a disco con las especificaciones del fabricante (que hay que recordar que se obtienen en laboratorio en condiciones ideales y que por lo tanto hay que ponderar a la hora de hacer comparaciones con valores obtenidos en situaciones reales), descubrí que las primeras con aproximadamente un 50% de las segundas, lo que concuerda con lo que suele ser habitual. De hecho, hice pruebas con el disco antiguo y tuve resultados similares. Probé también con mi nuevo PC de sobremesa y más de lo mismo. Así que tocaba descartar problemas en el hardware.&lt;/p&gt;&#10;&lt;p&gt;El siguiente paso era comprobar el comportamiento de la E/S del disco bajo ciertas cargas, lo cual se puede simular con la herramienta &lt;code&gt;fio&lt;/code&gt;. Mientras que &lt;code&gt;hdparm&lt;/code&gt; suele venir de serie en cualquier distribución Linux, no es así el caso de &lt;code&gt;fio&lt;/code&gt;, que se instala en Debian tan sencillo como 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 fio&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;El mejor escenario para comprobar el rendimiento de un disco es cuando se producen numerosos accesos aleatorios. Para ello, generé un fichero de simulación como el siguiente, en el que se transfieren 256 MB de datos:&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 test.fio &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[random-read]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rw=randread&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;size=256m&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;directory=/tmp/test&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A continuación, creé el directorio de pruebas:&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;# mkdir /tmp/test&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;e invoqué &lt;code&gt;fio&lt;/code&gt; de la siguiente manera:&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;# fio test.fio&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Esto genera gran cantidad de información, pero lo suficientemente clara como para darme cuenta de que el problema no estaba en la E/S del nuevo disco duro.&lt;/p&gt;&#10;&lt;p&gt;El último sospechoso era el sistema de ficheros. Estando seguro de que no tenía ningún fallo estructural (de eso se encarga el propio sistema de ficheros, &lt;code&gt;ext3&lt;/code&gt; en mi caso), pasé a comprobar el rendimiento del sistema de ficheros con la herramienta &lt;code&gt;bonnie++&lt;/code&gt;, que nos ofrece completos (y complejos) informes con resultados.&lt;/p&gt;&#10;&lt;p&gt;Al igual que &lt;code&gt;fio&lt;/code&gt;, &lt;code&gt;bonnie++&lt;/code&gt; no viene de serie en Linux, así que en Debian lo instalamos 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 bonnie++&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Para utilizar &lt;code&gt;bonnie++&lt;/code&gt;, necesitamos indicarle un directorio en el que pueda escribir sin problemas para poder hacer sus pruebas, así que como quería probar la partición en la que reside el sistema operativo, aproveché el directorio creado anteriormente en &lt;code&gt;/tmp&lt;/code&gt; para ello.&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;# bonnie++ -u root -d /tmp/test&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Al igual que con &lt;code&gt;fio&lt;/code&gt;, con &lt;code&gt;bonnie++&lt;/code&gt; se obtiene gran cantidad de datos, que de nuevo fueron negativos a la hora de encontrar el culpable del bajo rendimiento del portátil. Tendré que buscar en otro sitio (¿poca RAM? ¿las exigencias de KDE? ¿un nuevo kernel?).&lt;/p&gt;&#10;&lt;p&gt;PD: Por cierto, para saber cómo se llama nuestro disco duro y nuestros sistemas de ficheros en nuestra instalación de Linux, basta con invocar el comando &lt;code&gt;df -h&lt;/code&gt;.&lt;/p&gt;&#10;</description></item><item><title>Por qué es NUT mejor que la solución del fabricante</title><link>https://marcoantonioblanco.es/2012/11/por-que-es-nut-mejor-que-la-solucion-del-fabricante/</link><pubDate>Mon, 19 Nov 2012 11:01:12 +0000</pubDate><guid>https://marcoantonioblanco.es/2012/11/por-que-es-nut-mejor-que-la-solucion-del-fabricante/</guid><description>&lt;p&gt;En el artículo anterior presentaba a NUT como una gran solución de gestión de SAIs para Linux y afirmaba que era mejor que utilizar el software que el propio fabricante del SAI suele incluir de serie, aunque quedó pendiente exponer los motivos para tal afirmación.&lt;/p&gt;&#10;&lt;p&gt;1. Se trata de software libre. De este modo, al usar NUT nos evitamos introducir en nuestros sistemas programas que funcionan como verdaderas &amp;ldquo;cajas negras&amp;rdquo; y que en cualquier momento pueden dejar de funcionar (por ejemplo, ante una actualización del sistema operativo que cambie una librería).&lt;br&gt;&#10;2. Está en continuo desarrollo. Así, NUT siempre está actualizado, dando soporte cada vez a más modelos de SAI, ofreciendo nuevas y mejoradas funcionalidades y resolviendo los errores que puedan surgir.&lt;br&gt;&#10;3. Es moderno. No sólo la lista de SAIs soportados es impresionante sino que además las capacidades que incluye de serie son más de las que uno podría esperar en su software de este tipo.&lt;br&gt;&#10;4. Trabaja en red. El hecho de que NUT incluya un servicio de red permite gestionar un SAI de forma remota y transparente incluso desde fuera de la red local a través de una VPN.&lt;br&gt;&#10;5. Es una herramienta de línea de comandos. Como es habitual en Unix y Linux, esta característica no sólo permite utilizar el cliente gráfico que uno quiera y se adapte mejor a las necesidades propias, sino que además facilita la integración de NUT en &lt;em&gt;scripts&lt;/em&gt; y en herramientas de administración de sistemas.&lt;br&gt;&#10;6. Homogeneidad. Con una sola aplicación e interfaz es posible administrar y gestionar todos los SAIs a nuestro cargo, sin tener que usar una herramienta específica por cada modelo de SAI.&lt;/p&gt;&#10;&lt;p&gt;Creo que con esto está todo dicho. NUT no sólo es una gran herramienta, es la MEJOR herramienta de su tipo en Linux.&lt;/p&gt;&#10;</description></item><item><title>Migración de máquinas virtuales Xen</title><link>https://marcoantonioblanco.es/2010/03/migracion-de-maquinas-virtuales-xen/</link><pubDate>Fri, 26 Mar 2010 10:29:14 +0000</pubDate><guid>https://marcoantonioblanco.es/2010/03/migracion-de-maquinas-virtuales-xen/</guid><description>&lt;p&gt;Esta semana nos hemos visto en la tesitura de tener que migrar unas máquinas virtuales basadas en &lt;a class="link" href="http://es.wikipedia.org/wiki/Xen" target="_blank" rel="noopener"&#10; &gt;Xen&lt;/a&gt; desde un servidor físico a otro con más recursos. A pesar de que Xen incluye herramientas especializadas para estas tareas, hemos preferido seguir nuestra propia &amp;ldquo;receta&amp;rdquo; en previsión de una serie de obstáculos que imaginábamos nos podíamos encontrar durante el proceso de migración. Voy a describir a continuación cuales han sido estos obstáculos y las soluciones que utilizamos en cada caso.&lt;/p&gt;&#10;&lt;p&gt;La situación era la siguiente: teníamos que migrar varias máquinas virtuales Xen que contenían sendos portales web desde un servidor físico a otro. Aquí se nos presentaba la primera dificultad. A pesar de que las arquitecturas hardware de los servidores eran prácticamente idénticas, no era así en el caso de los sistemas operativos, ya que el origen tenía instalado Debian 4.0 y el destino Debian 5.0. Habrá quien piense que soy un exagerado y que eso no es tanta diferencia. Nada más lejos de la realidad, ya que las versiones de núcleo Linux y del software de virtualización Xen son diferentes, lo que de algún modo impedía el correcto funcionamiento de la herramienta &amp;ldquo;xm migrate&amp;rdquo;, que fallaba inmediata e indefectiblemente con un error críptico cada vez que era invocada desde la línea de comandos del servidor de origen. A pesar de preparar concienzudamente ambos servidores para permitir la migración al vuelo, la herramienta propia de Xen no hacía su trabajo.&lt;/p&gt;&#10;&lt;p&gt;La solución fue relativamente sencilla. Todo consistió en hacer lo mismo que se suponía debía hacer &amp;ldquo;xm migrate&amp;rdquo; pero a mano y paso a paso. Lo primero era parar la máquina virtual con &amp;ldquo;xm shutdown&amp;rdquo;, para proceder a continuación a su copia al servidor destino. Aunque nosotros lo hicimos por SSH, las posibilidades aquí son amplias (FTP, NFS, SMB, USB, etc.). La copia de cada máquina virtual comprendía el fichero imagen del disco principal, el fichero imagen de la memoria de intercambio o &lt;em&gt;swap&lt;/em&gt; y el fichero de configuración correspondiente.&lt;/p&gt;&#10;&lt;p&gt;Una vez copiados los ficheros al servidor destino, el siguiente paso es arrancar las máquinas virtuales una a una con &amp;ldquo;xm create&amp;rdquo;. Sin embargo, no iba a ser tan sencillo, ya que Xen se quejó de que le faltaban el núcleo Linux y el &lt;em&gt;initrd&lt;/em&gt; de las máquinas virtuales, que procedimos a copiar desde el servidor origen, con lo que el arranque se produjo después sin más problemas.&lt;/p&gt;&#10;&lt;p&gt;Para finalizar, quedaban por ajustar algunas cosas, como la configuración de red de Xen (en el servidor origen se usaba el modo &lt;em&gt;bridge&lt;/em&gt; mientras que en el destino estaba activo por defecto el modo NAT), la actualización de los DNS de los portales web con la IP del servidor destino y la configuración del proxy inverso residente en los servidores físicos que gestiona las peticiones realizadas a cada máquina virtual.&lt;/p&gt;&#10;&lt;p&gt;De esta historia puede obtenerse una valiosa lección. Aunque cualquier sistema de virtualización, incluyendo Xen, hacen su trabajo a un buen nivel, podemos encontrarnos en cualquier momento una serie de problemas que impidan su adecuada gestión y mantenimiento, más teniendo en cuenta lo delicados y exigentes que son. En este sentido, es fundamental tener unos profundos conocimientos y experiencia en administración de sistemas en general y en el sistema de virtualización de nuestra elección en particular para evitarnos males mayores y salir airosos de cualquier situación.&lt;/p&gt;&#10;</description></item><item><title>El teletrabajo, solución a los estragos de la gripe A</title><link>https://marcoantonioblanco.es/2009/08/el-teletrabajo-solucion-a-los-estragos-de-la-gripe-a/</link><pubDate>Fri, 14 Aug 2009 10:12:52 +0000</pubDate><guid>https://marcoantonioblanco.es/2009/08/el-teletrabajo-solucion-a-los-estragos-de-la-gripe-a/</guid><description>&lt;p&gt;En este primer artículo tras la vuelta de las vacaciones he querido hablar de la gripe A, un tema candente que preocupa a todo el mundo, y de cómo la tecnología puede ayudarnos a minimizar su impacto en las empresas y organizaciones ahora que se acerca el Otoño, época en la que se prevee un importante aumento en el número de casos de personas afectadas debido al descenso de las temperaturas y al hecho de que la mayoría de la población se encuentra de vuelta a sus quehaceres diarios.&lt;/p&gt;&#10;&lt;p&gt;¿De qué forma nos podemos valer las empresas de la tecnología para enfrentarnos a un brote de gripe A en nuestro lugar de trabajo? La solución pasa por implantar mecanismos que posibilite el &lt;a class="link" href="https://web.archive.org/web/20090814/http://www.activasistemas.com/index.php?id=124" target="_blank" rel="noopener"&#10; &gt;&lt;strong&gt;teletrabajo&lt;/strong&gt;&lt;/a&gt; a aquellos trabajadores que podrían desarrollar sus tareas fuera de las instalaciones de la empresa, como el personal administrativo, los comerciales, los jefes de departamento o los técnicos de posventa. Al facilitar la ausencia de parte del personal, se reduce el ámbito de contagio de la enfermedad a la vez que dicho personal sigue desarrollando sus laboras remotamente y la empresa no sufre de un paro productivo que podría costarle muy caro. El teletrabajo tiene además otra ventaja, y es que potencia la movilidad en aquellos trabajadores en los que puede ser de gran ayuda a su trabajo (como los mencionados comerciales) al poder utilizarse cualquier dispositivo para conectarse a la empresa, ya sea un ordenador de sobremesa, un portátil, una agenda o un &lt;a class="link" href="https://marcoantonioblanco.es/tags/iphone/" &gt;iPhone&lt;/a&gt;, como es mi caso.&lt;/p&gt;&#10;&lt;p&gt;A pesar de que a primera vista pudiese parecer lo contrario, la implantación de un sistema de teletrabajo en una empresa no es tan complejo como se cree. Basta con decidir en un análisis preliminar los mecanismos de conexión remota a la empresa, que por lo general se realizarán mediante las llamadas &amp;ldquo;redes privadas virtuales&amp;rdquo; (también conocidas VPN por sus siglas en inglés y que no son más que el establecimiento de conexiones privadas mediante una combinación de software y hardware a través de líneas públicas de comunicación como Internet), los sistemas de autentificación de los usuarios y los servicios y datos a los que accederán los usuarios remotos.&lt;/p&gt;&#10;&lt;p&gt;Como ejemplo, el caso más sencillo consiste en la instalación de un &lt;em&gt;router&lt;/em&gt; con capacidades VPN en la empresa al cual se conectarán los usuarios para acceder al correo electrónico, ficheros, software de gestión y otros servicios que la empresa tenga instalados, como un sistema de mensajería instantánea, una intranet o un fax electrónico. El coste de dicho &lt;em&gt;router&lt;/em&gt; suele rondar los 250 EUR, a los que habría que sumar los costes de instalación, integración, puesta en marcha y formación del personal, lo que puede suponer unos costes totales de entre 750 y 1.200 EUR.&lt;/p&gt;&#10;&lt;p&gt;Sin embargo, esta inversión puede ser inútil si no se tiene en cuenta el aspecto más fundamental cuando se instala un sistema de teletrabajo: la seguridad. Hay que considerar que se está habilitando una &amp;ldquo;puerta&amp;rdquo; al exterior de la empresa, lo que puede facilitar el acceso no autorizado a los datos y recursos telemáticos de la misma si no se planifica bien la seguridad de todo el sistema. En un próximo artículo profundizaré en esta cuestión, pero adelantaré que hay tres aspectos a tener en cuenta: la seguridad de la comunicación, la seguridad en el acceso al dispositivo de conexión y la seguridad en el acceso a los datos y recursos de la empresa.&lt;/p&gt;&#10;</description></item><item><title>La necesidad de monitorizar un sistema informático</title><link>https://marcoantonioblanco.es/2009/01/la-necesidad-de-monitorizar-un-sistema-informatico/</link><pubDate>Thu, 22 Jan 2009 18:47:53 +0000</pubDate><guid>https://marcoantonioblanco.es/2009/01/la-necesidad-de-monitorizar-un-sistema-informatico/</guid><description>&lt;p&gt;Los objetivos de una infraestructura de monitorización de sistemas informáticos son principalmente la prevención de incidencias y conocer el aprovechamiento de los recursos TIC disponibles. Dado que estos objetivos son importantes en cualquier entidad independientemente de su tamaño, es evidente que toda organización debería contar con su propio sistema de monitorización.&lt;/p&gt;&#10;&lt;p&gt;Aunque parezca lo contrario, implementar un buen sistema de monitorización no es una tarea tan difícil como exigente en su ejecución. El primer paso consiste en realizar un análisis detallado del sistema informático a monitorizar para, entre otras cosas, detectar los sistemas críticos (tanto máquinas como servicios) para el buen funcionamiento de la entidad y formular políticas de actuación frente a incidencias en dichos sistemas. Por ejemplo, puede ser interesante asegurarse de que una aplicación web corporativa esté siempre en marcha o estar sobre aviso de emergencias en el sistema de correo electrónico de la organización. Aquellos a los que esto les suene a &amp;ldquo;plan de emergencias frente a desastres&amp;rdquo; no andan muy desencaminados.&lt;/p&gt;&#10;&lt;p&gt;A continuación se debe redactar el plan de instalación e integración del nuevo sistema de monitorización en nuestro sistema informático, para lo cual es imprescindible respetar estas tres reglas:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Mantener las medidas de seguridad existentes.&lt;/li&gt;&#10;&lt;li&gt;Minimizar el impacto en el propio sistema a estudiar.&lt;/li&gt;&#10;&lt;li&gt;Minimizar el número de sistemas intermedios entre el sistema de monitorización y los sistemas críticos.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Por cierto, dicho plan estará incompleto si no se contempla qué ocurre o cómo actuar si el sistema de monitorización deja de estar disponible, es decir, hay que contestar a la pregunta &lt;em&gt;¿quién monitoriza al monitorizador?&lt;/em&gt;. Aunque parezca una verdad de Perogrullo, no todo el mundo tiene en cuenta este importante detalle.&lt;/p&gt;&#10;&lt;p&gt;El último paso es elegir un buen paquete de software especializado y proceder a su instalación y configuración. Afortunadamente, contamos con fabulosas opciones de licencia libre como &lt;a class="link" href="http://www.nagios.org/" target="_blank" rel="noopener"&#10; &gt;Nagios&lt;/a&gt; o &lt;a class="link" href="http://www.zabbix.com/" target="_blank" rel="noopener"&#10; &gt;Zabbix&lt;/a&gt; que ofrecen jugosas ventajas frente a sus alternativas comerciales, destacando especialmente su inmensa flexibilidad para poder monitorizar todo lo que queramos en el modo en que así lo necesitemos.&lt;/p&gt;&#10;</description></item></channel></rss>