linux – No se pueden crear archivos en un sistema de archivos grande XFS

Pregunta:

Tenemos un servidor Linux con un sistema de archivos de 4 TB, que se utiliza para almacenar repositorios de subversión. Hay muchos repositorios, varios de los cuales se han utilizado durante varios años.

El disco tenía originalmente alrededor de 1 TB, pero comenzamos a quedarnos sin espacio y lo aumentamos a 4 TB hace aproximadamente un año. Ahora, las personas informan que no pueden registrar archivos en sus repositorios. El mensaje de error es No space left on device .

El disco tiene aproximadamente 1,5 TB libres y también informa que tiene inodos libres y, sin embargo, no es posible crear un nuevo archivo en él. Todavía es posible actualizar archivos antiguos y, de forma intermitente, se actualizarán algunos repositorios, pero el mismo repositorio puede fallar en el próximo intento.

Respuesta:

El motivo del problema

El problema resulta estar en cómo XFS asigna inodos. A diferencia de la mayoría de los sistemas de archivos, la asignación se realiza de forma dinámica a medida que se crean nuevos archivos. Sin embargo, a menos que especifique lo contrario, los inodos están limitados a valores de 32 bits, lo que significa que deben caber dentro del primer terabyte de almacenamiento en el sistema de archivos. Entonces, si llenó completamente ese primer terabyte y luego agranda el disco, aún no podrá crear nuevos archivos, ya que los inodos no se pueden crear en el nuevo espacio.

Solución 1: cambie las opciones de montaje

Una solución es volver a montar el sistema de archivos con la opción de montaje inode64 . Sin embargo, algunas aplicaciones se comportarán de manera extraña en esto (por ejemplo, MySQL) y NFS se confundirá mucho. Entonces, si no está seguro de que su sistema funcione con esta opción, puede pasar a la siguiente opción.

Solución 2 – mover archivos

La segunda solución es encontrar algunos de los archivos que están almacenados actualmente en el primer terabyte y moverlos a otra área del sistema de archivos.

Moviéndose por edad

En nuestro caso, esto fue fácil: el sistema de archivos había estado en uso durante años, por lo que simplemente podíamos encontrar los archivos más antiguos y sacarlos del sistema de archivos, y luego volver a moverlos. Esto se hizo fácilmente usando find:

find /extra -mindepth 3 -maxdepth 3 -type d -mtime +730 -exec du -sh {} \; > /tmp/olddirs.txt

nos dio una lista que contiene el tamaño y el nombre del directorio para todos los directorios en exactamente 3 niveles por debajo del punto de montaje, que tenían más de 2 años. Luego, podríamos ordenar la lista para encontrar los directorios más grandes y usar mv para moverlos a otro sistema de archivos y viceversa.

Mover por grupo de asignación

Si no puede simplemente ir por edad, por ejemplo, cuando se crearon muchos archivos al mismo tiempo, aún puede encontrar los archivos correctos para mover, pero lleva un poco más de tiempo.

XFS tiene grupos de asignación (también conocidos como AG s), que comienzan con 0. Puede verificar el tamaño del bloque y el número de bloques de cada AG para averiguar qué grupos están en el primer terabyte, usando xfs_info /path/to/mountpoint . O simplemente puede verificar los primeros AG para ver cuáles están llenos y luego borrarlos.

  1. Comprobación del espacio libre en los primeros cuatro AG:
for ag in `seq 0 1 5`; do echo freespace in AG $ag; xfs_db -r -c "freesp -s -a $ag" /dev/CACHE/CACHE ; grep "total free"; done

Si el espacio libre total en cualquier grupo es inferior a 40, no podrá crear nuevos archivos en él.

  1. Encuentra archivos en ese AG

Esto requiere verificar los metadatos de cada archivo en el sistema de archivos. Tomará mucho tiempo … Aquí tienes una sugerencia:

   find /extra -mindepth 3 -type f -exec xfs_bmap -v {} \; > /tmp/agfilelist.txt

Luego puede grep para " 0 " (que es un espacio, un cero y otro espacio) para encontrar todos los archivos en AG 0, grep para " 1 " para encontrar los de AG 1, etc … Comience con AG 0, mueva los archivos más grandes de distancia (usando mv , no cp !) y luego de nuevo. Repita hasta que tenga una buena cantidad de espacio libre.

Salir

Una vez que habíamos movido suficientes archivos de / extra y luego de regreso, había mucho espacio en AG 0 y una vez más fue posible crear nuevos archivos.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım