sábado, 22 de noviembre de 2008

Windows XP más rápido, rapidamente

El factor crítico de la seguridad TI en un entorno de muchos usuarios radica en éstos.

Los usuarios actuales son seres humanos, y si su ordenador no va rápido, se fustran, se despistan y empiezan a ser peligrosos. Esto también se produce en el ordenador de casa, pero no es lo mismo que tu ordenador vaya lento a que te llamen todos los días 3 o 4 usuarios diciendo que su ordenador va lento.

Las causas principales de la lentitud de un ordenador con Windows XP son:
  1. Consumo contínuo de de CPU por encima del 50%.
  2. Consumo contínuo de RAM por encima del 75%.
  3. Excesivo trabajo del disco duro debido a la paginación (consecuencia del punto anterior).
  4. Excesivo trabajo del disco duro debido al poco espacio libre y la fragmentación de archivos.
Los dos primeros puntos se resuelven cambiando la CPU por otra más rápida y ampliando RAM, pero antes de eso hay una alternativa más asequible: eliminar procesos de memoria que no se utilizan. Para identificar qué procesos podemos quitar del medio y así bajar estos consumos, mirar este artículo (está enfocado al malware, y explica muy bien como identificar a los procesos para saber si los necesitamos o no).

El punto 3 se resuelve al resolver el punto 2, y el punto 4 se resuelve centrándonos en los archivos de los discos duros, principalmente donde se aloja el sistema operativo (normalmente en la unidad C:).

Archivos temporales

Windows XP tiende a guardar casi todo lo que hacemos (archivos temporales, descargas de Internet, cachés de todo tipo, etc). En un principio es una buena idea para recuperar de forma rápida un archivo que ya hemos utilizado, pero con el tiempo tiene dos inconvenientes: (1) si hay versiones nuevas del archivo, la versión guardada no sirve y (2) la acumulación de archivos temporales a largo plazo consume disco duro de forma innecesaria provocando lentitud (a la par que nos invita a comprar un disco duro más grande).

Fragmentación de archivos

En el tiempo y con el espacio limitado del disco duro, escribimos muchos archivos y eliminamos pocos (tendencia humana con el agravante de los archivos temporales), lo que provoca huecos libres cada vez más pequeños.

A medida que nos vamos quedando sin espacio, llega un punto donde se reutiliza el espacio libre de los huecos para escribir nuevos archivos. Si éstos archivos son más largos que los huecos (cosa normal), la escritura de un archivo continua en otros huecos que pueden estar en cualquier parte del disco, por tanto el archivo se fragmenta, y lo peor: se tarda más en escribirlo. La consecuencia colateral es que también se tarda más en leer un archivo muy fragmentado.

El objetivo de la desfragmentación es: localizar los fragmentos dispersos de archivos grandes, reagruparlos y escribirlos de forma contigua. Ahora, para esto se necesita el espacio libre adecuado, y es conveniente no llenar el disco duro por encima del 75% de su total.

Herramientas

Hay dos incluidas en Windows XP muy útiles para resolver el punto 4:
  1. cleanmgr.exe, más conocido por Liberador de espacio en disco.
  2. defrag.exe, más conocido como Desfragmentador de disco.
Al automatizar por primera vez cleanmgr.exe mediante sus argumentos (sageset y sagerun), requiere seleccionar en una ventana los grupos de archivos que queremos que sean eliminados. Estos grupos son:
  1. Archivos de programa descargados.
  2. Archivos temporales de Internet.
  3. Archivos temporales de informe de errores.
  4. Papelera de reciclaje (los archivos que contiene).
  5. Archivos temporales.
  6. WebClient/Archivos temporales de Publisher.
  7. Comprimir archivos antiguos (elimina versiones comprimidas de los archivos).
  8. Catalogar archivos para el Indizador de contenidos.
Y obviamente, para hacerlo de forma desatendida en muchos ordenadores no sirve.

Si sabemos lo que queremos eliminar y queremos evitar la ventana preguntándolo, debemos saber cómo funcionan los argumentos sageset y sagerun de cleanmgr.exe, y también debemos saber qué ocurre cuando aceptamos dicha ventana con los grupos que marcamos para eliminar.

Cada uno de estos grupos se corresponde con una carpeta de configuración en el registro de Windows, exactamente dentro de: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\:

Cuando se marca un grupo en la ventana mencionada antes y aceptamos, en el registro de Windows se crea la clave StateFlagsxxxxx con el valor 2 de tipo DWORD dentro de la carpeta que se refiere al grupo (las xxxxx las explicaremos después).

Por ejemplo, si escribimos la clave StateFlags0200 con valor 2 de tipo DWORD dentro de la carpeta Internet Cache Files del registro que hemos visto en el gráfico, se marcará el grupo de los Archivos Temporales de Internet para eliminación. Y para eliminar los Archivos Temporales de Internet que hemos marcado utilizamos el comando: cleanmgr.exe /sagerun:200.

Las xxxxx en el ejemplo es el valor 200 (puede ser cualquier otro número entre 0 y 65535) e indica la identificación de la operación entre la clave StateFlags (con el valor 2 que indica la marca) y el argumento sagerun que invoca la eliminación correspondiente.

Eliminados los archivos innecesarios, se producen numerosos huecos en el disco duro y seguramente se requiera una desfragmentación con el comando defrag.exe c:

Juntándolo todo

Todo esto puede ir en un script. Yo he realizado uno para eliminar lo siguiente:
  • Las carpetas temporales de instalaciones.
  • Los índices de contenidos del buscador de Windows.
  • Los archivos de programa descargados.
  • Los archivos temporales de Internet.
  • Los archivos de volcado de memoria.
  • Los archivos temporales de Microsoft_Event_Reporting.
  • Los archivos de páginas sin conexión.
  • Los archivos antiguos de las recuperaciones de ChkDsk.
  • Los archivos de la caché del Escritorio Remoto.
  • Los archivos logs de instalaciones.
  • Los archivos temporales.
  • Los archivos de caché WebClient y WebPublisher.
Como vemos, existen más grupos que los que indica cleanmgr.exe para marcar, lo cual hace más interesante y amplio este método.

La versión 1.0 del script está disponible aquí, y como último paso realiza una desfragmentación si es necesaria.