filesystem

  • Ayer retiré una de mis tarjetas de memoria SD de la cámara para bajar algunas fotos a mi PC y me encontré con que la mayoría estaban desaparecidas. Aparentemente se corrompió el sistema de archivos de la tarjeta (una vez mas...) Malditos adaptadores microSD!!! Por ende este artículo explica cómo recuperar archivos borrados o perdidos, ya sea porque se borraron accidentalmente o porque se corrompió el filesystem.

  • Me volvió a suceder, esta vez en mi Slackware:

    19:41 emi@vaio ~ $ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda5        29G   27G     0 100% /
    /dev/sda1       1.9G   21M  1.8G   2% /boot
    /dev/sda6        29G   19G  8.0G  70% /home
    /dev/sda8       191G  186G  4.9G  98% /data
    tmpfs           2.0G  4.0K  2.0G   1% /dev/shm
    /dev/sda9       173G  152G   22G  88% /vault
    

    Como podrán observar, estoy algo complicado de espacio en disco. Pero lo torpe fue haber llenado el sistema de archivos raíz /. Muy raro siendo que dicha partición tiene 30 GB. Cosas que suceden por no utilizar un esquema de particionado más sensato (como mínimo montar los directorios /tmp y /var en particiones separadas). Aunque se puede perdonar el descuido por tratarse de un sistema de escritorio.

    El punto es que me sorprendí al encontrar el sistema de archivos raíz colmado, pues tenía la sensación de que había espacio de sobra. Pero lo que más me sorprendió fue ésto:

    /dev/sda5        29G   27G     0 100% /
    

    Si el tamaño total es 29G y tiene 27G utilizados, ¿cómo puede ser que esté 100% en uso y el espacio disponible sea 0?

    Interesante situación, y es la primera vez que me ocurre. Había oído de este caso dialogando con un experto: quedan 2GB de espacio disponible, pero df reporta que el filesystem está lleno, quedan 0 bytes disponibles. ¿A qué se debe ésto? A que se ha llenado la tabla de i-nodos. Por más que queden bloques libres, no quedan i-nodos disponibles para crear nuevos archivos (que puedan utilizar esos bloques libres), sólo es posible que los archivos existentes aumenten su tamaño. Se ha llegado al límite máximo de archivos en el filesystem.

  • La semana pasada un sysadmin junior se mandó una pequeña cagada en un servidor de desarrollo: modificar permisos en directorios de sistema editando ACLs. El resultado fue desastroso, en el sentido en que el servidor SSH dejó de funcionar, por tener el directorio /etc permisos de acceso demasiado permisivos (valga la redundancia). La idea del sysadmin era buena, crear un grupo de "administradores" que tengan la capacidad de editar archivos de configuración, y agregar al mismo a algunos powerusers y sysadmins (ignorando que para esto existe el grupo root, o wheel en muchas distribuciones GNU/Linux y *BSD). Como, al mismo tiempo, estaba aprendiendo a trabajar con ACLs, decidió utilizar una para crear este permiso.

  • Acabo de terminar el appliance para mis alumnos de Organización de Computadoras de este año. Como todo appliance que se comparte a través de Internet, y para que todos los alumnos puedan descargar la máquina virtual lo más rápido posible, es necesario que el sistema operativo junto con las aplicaciones incluidas consuman poco espacio en disco. De esta forma la imagen de disco resulta de tamaño reducido. A su vez necesito un escritorio funcional con un cierto conjunto de herramientas de desarrollo. Para ello opté por Devuan Jessie con LXDE sobre una máquina virtual VirtualBox.

    Pero más allá de que la imagen de disco tenga un tamaño reducido, es necesario compactarla (por ejemplo ZIP) para reducir aún más el tamaño a transmitir por Internet. Y se gana mucha eficiencia durante la compactación si los bloques de disco libres están rellenos con ceros. Para ello existe zerofree. De esta forma, el espacio en disco correspondiente a bloques libres (espacio no utiliza) es directamente ignorado.

  • En el artículo Configuración de NFS en FreeBSD expliqué cómo implementar un servidor de archivos NFS sobre FreeBSD, y cómo montar los sistemas de archivos exportados desde clientes GNU/Linux. Esta vez explico cómo montarlos desde clientes FreeBSD.

  • Hoy conecté mi pendrive Kingston en mi CentOS 6.4 y cuando quise borrar un archivo que se encontraba en el mismo recibí un error indicando que no podía borrar el archivo debido a que se trataba de un sistema de archivos de sólo lectura:

    # rm /media/KINGSTON/archivo.zip
    rm: cannot remove `/media/KINGSTON/archivo.zip': Read-only file system
    

    ¿Por qué mi pendrive está montado cómo sólo lectura?

    Este artículo explica por qué sucede esto y cómo repararlo.

  • En Twitter me topé con este interesante truco que permite recuperar, mediante el filesystem /proc, un archivo binario ejecutable que ha sido borrado del sistema de archivos, pero su proceso aún se encuentra en memoria.

  • En este artículo comparto un pequeño programa escrito en lenguaje C para verificar si un filesystem soporta direct I/O (flag O_DIRECT al abrir archivos).

  • A menudo nos sucede que necesitamos instalar un nuevo sistema y en el momento de particionar y formatear nos surge la eterna duda: "¿qué formato de sistema de archivos es mejor para la partición x?". La respuesta a esta pregunta depende de muchos factores como por ejemplo qué tipo de aplicación correrá en el sistema, qué tipo de archivos serán almacenados en la partición, cual será la proporción estimada entre lecturas/escrituras, y qué rendimiento se requiere para las mismas, entre otros.

  • Esta semana pasé un mal momento con mi instalación de FreeBSD, provocado por un journal corrupto que causaba kernel panics:

    root@hal9000:/usr/home/emi # last | grep "Jul 12" | grep crash
    emi        ttyv0                           Thu Jul 12 11:18 - crash  (00:06)
    emi        pts/1    :0                     Thu Jul 12 10:55 - crash  (00:12)
    emi        pts/0    :0                     Thu Jul 12 10:55 - crash  (00:12)
    emi        :0                              Thu Jul 12 10:55 - crash  (00:12)
    emi        pts/1    :0                     Thu Jul 12 10:47 - crash  (00:07)
    emi        pts/0    :0                     Thu Jul 12 10:47 - crash  (00:07)
    emi        :0                              Thu Jul 12 10:47 - crash  (00:07)
    emi        ttyv0                           Thu Jul 12 10:28 - crash  (00:12)
    emi        pts/1    :0                     Thu Jul 12 10:05 - crash  (00:08)
    emi        pts/0    :0                     Thu Jul 12 10:05 - crash  (00:08)
    emi        :0                              Thu Jul 12 10:05 - crash  (00:09)
    

    Luego de pelear varias horas pensando que se trataba de un problema con el upgrade (sí, los panics comenzaron justo después de reiniciar luego del upgrade a 11.2, es increíble, cuando te tiene que pasar algo malo, te pasa en el peor momento).

  • Anteriormente demostré cómo utilizar el comando file (tanto en Linux como *BSD) para saber de qué tipo es el filesystem de un dispositivo o partición utilizando la opción -s (special files). Veamos ahora una alternativa que puede ser de gran utilidad en ciertos casos específicos.

  • Este breve artículo demuestra cómo formatear y montar un disco o partición (slice) en sistemas FreeBSD.

  • Las listas de control de acceso (Access Control Lists - ACLs) proveen un mecanismo para especificar permisos en archivos y otros objetos de forma mucho más flexible que el sistema estándar Unix de usuario/grupo/otros. En GNU/Linux es posible lograr el mismo esquema de autorización (para especificar permisos en archivos y directorios) que utiliza el sistema de archivos NTFS mediante ACLs.

  • A veces es necesario cambiar el UUID de una partición, sea cual sea el motivo en este artículo explico brevemente cómo hacerlo para particiones ext2/ext3 y NTFS.

    Para particiones ext2/ext3 es muy sencillo, simplemente se debe generar un nuevo UUID y luego asignarlo a la particion deseada:

    uuidgen
    tune2fs /dev/sdxx -U  [número generado por uuidgen]
  • AIDE (Advanced Intrusion Detection Environment) es una herramienta de detección de intrusos para verificar la integridad de archivos y directorios. El funcionamiento se basa en crear una base de datos con información importante de los archivos y directorios (por ejemplo: nombre, tamaño, fecha de modificación, permisos y un hash del contenido) y luego chequear periodicamente contra esta información de referencia para verificar que no se hayan producido cambios inesperados.

    Lo ideal es generar la base de datos de AIDE inmediatamente luego de instalar un sistema y a partir de ahí monitorear los cambios que se producen. Monitoreando los cambios en el sistema de archivos se puede detectar rápidamente una intrusión y tomar cartas en el asunto.

  • El día de hoy un compañero de trabajo me comentó que había tenido un problema con la SD de su cámara digital y había perdido todas las fotos. Como lamentablemente pasé por esa experiencia, me ofrecí para recuperar sus archivos de dicha memoria.

    SPOILER ALERT: no usar adaptadores micro SD a SD.