El Sistema de Archivos Estructurado en Registros (o LFS ) es una implementación de un sistema de archivos estructurado en registros (un concepto propuesto e implementado originalmente por John Ousterhout ), desarrollado inicialmente para BSD . Fue eliminado de FreeBSD y OpenBSD ; la implementación de NetBSD no funcionó hasta que el trabajo previo al lanzamiento de la versión 4.0 lo hizo viable nuevamente como un sistema de archivos de producción. [ 1 ]
Diseño
La mayor parte del formato en disco de LFS se basa en UFS . Los formatos de bloque indirecto, inodo y directorio son prácticamente idénticos. Esto permite reutilizar el código del sistema de archivos UFS, que ha sido ampliamente probado; las implementaciones actuales de LFS comparten el código de alto nivel de UFS con el código de bajo nivel de FFS, dado que ambos sistemas de archivos comparten muchas características con UFS.
LFS divide el disco en segmentos , de los cuales solo uno está activo a la vez. Cada segmento tiene una cabecera llamada bloque de resumen . Cada bloque de resumen contiene un puntero al siguiente bloque de resumen, enlazando los segmentos en una larga cadena que LFS trata como un registro lineal. Los segmentos no tienen por qué estar contiguos en el disco; por esta razón, se recomiendan tamaños de segmento mayores (entre 384 KB y 1 MB) porque amortizan el coste de búsqueda entre segmentos. [ 2 ]
Cada vez que se modifica un archivo o directorio, LFS escribe en la cabecera de este registro:
- Cualquier bloque de datos modificado o nuevo.
- Los bloques indirectos se actualizaron para apuntar a (1).
- Los inodos se actualizaron para apuntar a (2).
- Los bloques del mapa de inodos se actualizaron para apuntar a (3). [ 3 ]
A diferencia de UFS, en LFS los inodos no tienen ubicaciones fijas. Se utiliza un mapa de inodos —una lista plana de las ubicaciones de los bloques de inodos— para su seguimiento . Al igual que con todo lo demás, los bloques del mapa de inodos también se registran en el archivo de registro cuando se modifican.
Cuando un segmento se llena, LFS procede a llenar el siguiente segmento libre o limpio . Se dice que un segmento está sucio si contiene bloques activos , es decir, bloques para los que no existen copias más recientes en el registro. El recolector de basura LFS convierte los segmentos sucios en limpios copiando los bloques activos del segmento sucio al segmento actual y omitiendo el resto. El bloque de resumen de cada segmento contiene un mapa para rastrear los bloques activos.
Generalmente, la recolección de basura se retrasa hasta que no quedan segmentos limpios; también puede posponerse hasta que el sistema esté inactivo. Incluso entonces, solo se seleccionan para su recolección los segmentos menos sucios. Esto tiene como objetivo evitar la penalización de limpiar segmentos llenos cuando el ancho de banda de E/S es más necesario. [ 2 ]
En un punto de control (normalmente programado cada 30 segundos aproximadamente), LFS escribe las últimas ubicaciones de bloques conocidas del mapa de inodos y el número del segmento actual en una región de punto de control en una ubicación fija del disco. Existen dos de estas regiones; LFS alterna entre ellas en cada punto de control. Una vez escrito, un punto de control representa la última instantánea consistente del sistema de archivos. La recuperación tras un fallo y el montaje normal funcionan de la misma manera : el sistema de archivos simplemente reconstruye su estado a partir del último punto de control y reanuda el registro desde allí.
Desventajas
- En LFS puede producirse una fragmentación grave del sistema de archivos , especialmente con archivos de crecimiento lento o múltiples escrituras grandes simultáneas. Esto conlleva una importante penalización en el rendimiento, a pesar de que el diseño de los sistemas de archivos estructurados en registros presupone que la mayoría de las lecturas de disco se almacenarán en caché.
- El sistema LFS se vuelve progresivamente menos eficiente a medida que se acerca a su capacidad máxima, momento en el que el recolector de basura tiene que funcionar casi constantemente para que haya segmentos limpios disponibles.
- LFS no permite la creación de instantáneas ni el control de versiones, aunque ambas características son, en general, triviales de implementar en sistemas de archivos estructurados en registros.
Notas
- Seltzer, Margo; Bostic, Keith; McKusick, Marshall Kirk; Staelin, Carl (enero de 1993), "Una implementación de un sistema de archivos estructurado en registros para UNIX" (PDF) , Actas del USENIX de invierno de 1993
- Matthews, Jeanna Neefe; Roselli, Drew; Costello, Adam M.; Wang, Randolph Y.; Anderson, Thomas E. (octubre de 1997), "Mejora del rendimiento de los sistemas de archivos estructurados en registros con métodos adaptativos", Actas del decimosexto simposio de la ACM sobre principios de sistemas operativos - SOSP '97 , págs. 238-251 , doi : 10.1145/268998.266700 , ISBN 978-0897919166, S2CID 11858758
Referencias
- ↑ Bouyer, Manuel (2007-12-15). "NetBSD 4.0 Release CHANGELOG" . Recuperado el 2019-02-04 ..
- 1 2 Rosenblum, Mendel; Ousterhout, John K (febrero de 1992), "Diseño e implementación de un sistema de archivos estructurado en registros" (PDF) , ACM Transactions on Computer Systems , 10 (1): 26–52 , doi : 10.1145/146941.146943 , S2CID 28452863 .
- ↑ Rosenblum, Mendel; Ousterhout, John K (junio de 1990), " El gestor de almacenamiento LFS" (PDF) , Actas del Usenix de verano de 1990 : 315–324.
- Sistemas de archivos de disco
