h1

Borrando archivos de rutas largas en Windows

03/31/2011

Wizdoc [Icon By Buuf]  Tips & Tricks.

Como parte de las buenas prácticas de desarrollo que hemos venido realizando, contamos con unos servidores de integración continua donde se encuentran instaladas varias instancias de Hudson. Ya he publicado algún post con anterioridad donde explico un poco la función de esta herramienta, pero en resumen, su objetivo consiste en tener builds diarios para detectar fragmentos de código que no compilan o fallan en tiempo de ejecución al correr automáticamente sets de pruebas unitarias.

De manera periódica (digamos, cada semana) generamos un release con todas las modificaciones realizadas durante la presente iteración, con el fin de subir estos cambios a los ambientes de prueba y desempeño. El detalle consiste en que el build es tan extenso – compuesto por casi 300 MB de archivos war, ear y xmls de configuración distribuidos en más de 1600 directorios – que al parecer, Windows XP no puede borrar correctamente el release durante la generación de un nuevo despliegue. Incluso al tratar de borrar manualmente los directorios que no pudieron ser eliminados por Hudson, Windows marca un error Cannot delete file: debido a que la estructura de directorios es demasiado extensa:

Cannot delete file

Cuando el path de la estructura de directorios rebasa los 255 caracteres, el sistema operativo impide borrar los archivos y directorios. ¿Cómo es que el sistema operativo permitió crear esta estructura en un principio?

Lo importante del problema es que la unidad de disco está utilizando NTFS (NT File System – Sistema de Archivos NT), por lo que en estricta teoría debería poder borrar cualquier estructura de directorios sin importar su “profundidad” o la longitud de los nombres de archivos y directorios que la componen. Sin embargo, en la práctica resulta que para rutas mayores a 255 caracteres, el sistema operativo se chocolatea. Buscando en las páginas de soporte de Microsoft, existen algunas posibles soluciones para resolver este problema. La que en nuestro caso particular pareció funcionar mejor, era bastante trivial: de acuerdo a Microsoft, si la causa es la longitud del path, es posible disminuir su tamaño al renombrar los directorios. Así, podemos hacer algo parecido a esto:

Path original (longitud: 325 caracteres)

C:\Documents and Settings\Administrador\workspace\Project\ovm-applications\ovm-webapp\ovm-webapp-common\src\main\java\com\ … \project\ws\geo\position\model\.svn\tmp\text-base

Path renombrado (longitud: 236 caracteres)

C:\Documents and Settings\Administrador\workspace\Project\a\a\a\a\main\java\com\ … \project\b\b\a\model\.svn\tmp\text-base

Al renombrar algunos de los directorios a un solo carácter, el sistema operativo permite borrar el path sin mayor problema

¡Voila! aunque el sistema operativo tarda poco más de 7 minutos en borrar toda la estructura de directorios, logramos el objetivo. Sin embargo, esto me deja pensando en los siguientes puntos:

• Las “soluciones” propuestas por Microsoft no son más que workarounds para darle la vuelta al problema, sin embargo no existe una solución definitiva al mismo.

• Si el problema es la longitud del path absoluto rebasando la longitud de 255 caracteres, ¿cómo es posible que Windows o procesos y programas que corren dentro de él puedan crear dicha estructura en un principio?

• Ahora bien, puede que sea un límite impuesto al usuario, ya que de acuerdo al punto anterior, la estructura SI pudo crearse desde un principio. Sin embargo, desde el Explorador de Windows o la línea de comandos se impide, incluso siendo superusuario, acceder o borrar la estructura.

¿Error de diseño? Probablemente, aunque a estas alturas del partido – poco menos de 18 años desde que salió este sistema de archivos con Windows NT – ya debería haberse publicado un parche que corrija este tipo de detalles. En fin, como quiera que sea, cuando tengamos builds demasiado grandes, existe al menos una manera de resolver esto en Windows. Para los que prefieran dejar atrás este tipo de broncas, es posible optar por sistemas operativos para “hombrecitos”, como Linux Red Hat o ya de perdida Ubuntu. Nosotros no podemos porque nuestros servidores de integración continua viven en San Diego, así que ni modo… tendremos que vivir con ellos por algún tiempo.

One comment

  1. Otro truco para eliminar las rutas largas con Windows es con Robocopy, eso sí, también se elimina el contenido:

    http://www.sysadmit.com/2015/08/windows-borrar-rutas-largas.html



Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: