perl – readdir y reiserfs


Esta semana, haciendo una migración de un servidor, descubrimos (los 2 que estabamos migrandolo) un cambio de comportamiento en un script de Perl que usa la combinación opendir/readdir, resulta que el servidor original tenía ext3 en sus sistemas de archivos, y el nuevo reiserfs (defaults de RHEL 5 y SUSE 10.2 respectivamente), el caso es que en el primero el “readdir” devolvía los archivos en el orden en el que fueron modificados descendetemente, es decir, el mas nuevo primero.

En el servidor con reiserfs el orden es bastante “aleatorio”, no es que cambie, sino que no tiene un orden facilmente entendible, entonces mi compañero se puso a hacer un parche al script para ordenar algo que antes no lo requería, hasta que de repente mientras me platicaba de comportamiento normal del “stat” y el “readdir”, caí en cuenta que el nuevo server había cambiado de sistemas de archivos, y bueno, una googleada ligera resulta darnos la respuesta obvia, reiserfs tiene unas tablas raras, que no prentendo entender, para organizar los archivos, y que no tienen nada que ver con parametros como su creacion, modificación, etc.

Se menciona por ejemplo que reiserfs puede mostrarte “.” y “..” (aqui y abajo de aqui) intercalados entre los archivos, lo cual es bastante raro, pero pues así furula reiserfs (no tenemos porque comprender el comportamiento ni de el sistema de archivos ni de su creador).

En fin, ahi queda el tip para cuando alguno de los que lean esta nota lo tenga en mente pa futuros movimientos de sistemas de archivos y el uso de readdir en particular.


One Comment, Comment or Ping

  1. Esto es muy interesante. No es necesario saber mucho al respecto sobre ReiserFS, como mencionas, pero sí hay una explicación básica al respecto de este comportamiento. ReiserFS utiliza una tabla interna con pares llave-valor para las descripciones de los archivos, Perl que accesa esas tablas descriptivas (o… más bien que lo hace por medio de la plataforma), accede a esa lista de archivos como hash (por aquello de la tabla de pares llave-valor), el cual es una estructura de datos en Perl sin orden.

    Dependiendo de la lógica de tu aplicación, lo ideal, creo yo es evaluar cada uno de los elementos que readdir te regresa con map o grep, para resultados granulares más refinados.

    Excelente post!

    March 14th, 2009

Reply to “perl – readdir y reiserfs”