ext2 - ext2

ext2
Desarrollador (es) Tarjeta Rémy
Nombre completo Segundo sistema de archivos extendido
Introducido Enero de 1993 con Linux
Identificador de partición Apple_UNIX_SVR2( Mapa de partición de Apple )
0x83( Registro de arranque maestro )
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7( GPT )
Estructuras
Contenidos del directorio Mesa
Asignación de archivos mapa de bits (espacio libre), tabla (metadatos)
Bloques malos Mesa
Limites
Max. tamaño del volumen 2–32 TiB
Max. tamaño del archivo 16 GiB - 2 TiB
Max. Número de archivos 10 18
Max. longitud del nombre de archivo 255 bytes
Caracteres permitidos en nombres de archivo Todos los bytes excepto NUL ('\ 0') y '/'
Características
Fechas registradas modificación (mtime), modificación de atributo (ctime), acceso (atime)
Rango de fechas 14 de diciembre de 1901-18 de enero de 2038
Resolución de fecha 1 s
Permisos del sistema de archivos POSIX
Compresión transparente No (disponible a través de parches)
Cifrado transparente No
Otro
Apoyados sistemas operativos Linux , BSD , ReactOS , Windows (a través de IFS ), macOS (a través de IFS )

El ext2 o el segundo sistema de archivos extendido es un sistema de archivos para el kernel de Linux . Inicialmente fue diseñado por el desarrollador de software francés Rémy Card como reemplazo del sistema de archivos extendido (ext). Habiendo sido diseñado de acuerdo con los mismos principios que el Berkeley Fast File System de BSD , fue el primer sistema de archivos de grado comercial para Linux.

La implementación canónica de ext2 es el controlador del sistema de archivos "ext2fs" en el kernel de Linux. Existen otras implementaciones (de diversa calidad e integridad) en GNU Hurd , MINIX 3 , algunos kernels BSD , en MiNT y como controladores de terceros de Microsoft Windows y macOS .

ext2 era el sistema de archivos predeterminado en varias distribuciones de Linux , incluidas Debian y Red Hat Linux , hasta que fue reemplazado por ext3 , que es casi completamente compatible con ext2 y es un sistema de archivos de diario . ext2 sigue siendo el sistema de archivos de elección para los medios de almacenamiento basados ​​en flash (como tarjetas SD y unidades flash USB ) porque la falta de un diario aumenta el rendimiento y minimiza el número de escrituras, y los dispositivos flash pueden soportar un número limitado de ciclos de escritura. Desde 2009, el kernel de Linux admite un modo sin diario de ext4 que proporciona beneficios que no se encuentran con ext2, como archivos más grandes y tamaños de volumen.

Historia

El desarrollo inicial del kernel de Linux se realizó como un desarrollo cruzado bajo el sistema operativo MINIX . El sistema de archivos MINIX se utilizó como el primer sistema de archivos de Linux. El sistema de archivos Minix estaba mayormente libre de errores , pero usaba compensaciones de 16 bits internamente y, por lo tanto, tenía un límite de tamaño máximo de solo 64 megabytes , y también había un límite de longitud de nombre de archivo de 14 caracteres. Debido a estas limitaciones, se comenzó a trabajar en un sistema de archivos nativo de reemplazo para Linux.

Para facilitar la incorporación de nuevos sistemas de archivos y proporcionar un archivo genérico API , VFS , una capa de sistema de archivos virtual, se añadió al kernel de Linux. El sistema de archivos extendido ( ext ), se lanzó en abril de 1992 como el primer sistema de archivos que utiliza la API de VFS y se incluyó en la versión 0.96c de Linux. El sistema de archivos ext resolvió los dos problemas principales del sistema de archivos Minix (tamaño máximo de partición y limitación de la longitud del nombre de archivo a 14 caracteres) y permitió 2 gigabytes de datos y nombres de archivo de hasta 255 caracteres. Pero todavía tenía problemas: no había soporte para marcas de tiempo separadas para el acceso a archivos, modificación de inodo y modificación de datos.

Como solución a estos problemas, en enero de 1993 se desarrollaron dos nuevos sistemas de archivos para el kernel de Linux 0.99: xiafs y el segundo sistema de archivos extendido ( ext2 ), que fue una revisión del sistema de archivos extendido incorporando muchas ideas del Berkeley Fast File System . ext2 también se diseñó teniendo en cuenta la extensibilidad, dejando espacio en muchas de sus estructuras de datos en disco para su uso en versiones futuras.

Desde entonces, ext2 ha sido un banco de pruebas para muchas de las nuevas extensiones de la API de VFS. Características como el borrador de la propuesta de ACL POSIX retirado y la propuesta de atributo extendido retirado generalmente se implementaron primero en ext2 porque era relativamente simple de extender y sus aspectos internos se entendían bien.

En los kernels de Linux anteriores a 2.6.17, las restricciones en el controlador de bloque significan que los sistemas de archivos ext2 tienen un tamaño de archivo máximo de 2 TiB.

ext2 todavía se recomienda sobre los sistemas de archivos de diario en unidades flash USB de arranque y otras unidades de estado sólido . ext2 realiza menos escrituras que ext3 porque no hay registro en diario. Dado que el principal factor de envejecimiento de un chip flash es el número de ciclos de borrado, y dado que los ciclos de borrado ocurren con frecuencia en las escrituras, la disminución de escrituras aumenta la vida útil del dispositivo de estado sólido. Otra buena práctica para los sistemas de archivos en dispositivos flash es el uso de la opción de montaje sin tiempo , por la misma razón.

estructuras de datos ext2

El espacio en ext2 se divide en bloques . Estos bloques se agrupan en grupos de bloques, de forma análoga a los grupos de cilindros en el sistema de archivos Unix . Por lo general, hay miles de bloques en un sistema de archivos grande. Los datos de cualquier archivo dado suelen estar contenidos dentro de un solo grupo de bloques siempre que sea posible. Esto se hace para minimizar el número de búsquedas de disco al leer grandes cantidades de datos contiguos.

Cada grupo de bloques contiene una copia de la tabla de descriptores de superbloques y grupos de bloques, y todos los grupos de bloques contienen un mapa de bits de bloques, un mapa de bits de inodos, una tabla de inodos y, finalmente, los bloques de datos reales.

El superbloque contiene información importante que es crucial para el arranque del sistema operativo . Por tanto, las copias de seguridad se realizan en varios grupos de bloques en el sistema de archivos. Sin embargo, normalmente solo se utiliza en el arranque la primera copia, que se encuentra en el primer bloque del sistema de archivos.

El descriptor de grupo almacena la ubicación del mapa de bits del bloque, el mapa de bits del inodo y el inicio de la tabla de inodo para cada grupo de bloques. Estos, a su vez, se almacenan en una tabla de descriptores de grupo.

Inodos

Cada archivo o directorio está representado por un inodo. El término "inodo" proviene de "nodo índice" (con el tiempo, se convirtió en i-nodo y luego en inodo). El inodo incluye datos sobre el tamaño, el permiso, la propiedad y la ubicación en el disco del archivo o directorio.

Ejemplo de estructura de inodo ext2:

Estructura

Cita de la documentación del kernel de Linux para ext2:

"Hay punteros a los primeros 12 bloques que contienen los datos del archivo en el inodo. Hay un puntero a un bloque indirecto (que contiene punteros al siguiente conjunto de bloques), un puntero a un bloque doblemente indirecto y un puntero a un bloque triplemente indirecto ".

Por tanto, existe una estructura en ext2 que tiene 15 punteros. Los apuntadores 1 a 12 apuntan a bloques directos, el apuntador 13 apunta a un bloque indirecto, el apuntador 14 apunta a un bloque doblemente indirecto y el apuntador 15 apunta a un bloque triplemente indirecto.

Directorios

Cada directorio es una lista de entradas del directorio. Cada entrada de directorio asocia un nombre de archivo con un número de inodo y consta del número de inodo, la longitud del nombre del archivo y el texto real del nombre del archivo. Para encontrar un archivo, se busca en el directorio de adelante hacia atrás el nombre de archivo asociado. Para tamaños de directorio razonables, esto está bien. Pero para directorios muy grandes esto es ineficiente, y ext3 ofrece una segunda forma de almacenar directorios ( HTree ) que es más eficiente que solo una lista de nombres de archivos.

El directorio raíz siempre se almacena en el inodo número dos, de modo que el código del sistema de archivos pueda encontrarlo en el momento del montaje. Los subdirectorios se implementan almacenando el nombre del subdirectorio en el campo de nombre y el número de inodo del subdirectorio en el campo de inodo. Los enlaces físicos se implementan almacenando el mismo número de inodo con más de un nombre de archivo. Acceder al archivo por cualquier nombre da como resultado el mismo número de inodo y, por lo tanto, los mismos datos.

Los directorios especiales "." (directorio actual) y ".." (directorio principal) se implementan almacenando los nombres "." y ".." en el directorio, y el número de inodo de los directorios actual y padre en el campo de inodo. El único tratamiento especial que reciben estas dos entradas es que se crean automáticamente cuando se crea un directorio nuevo y no se pueden eliminar.

Asignar datos

Cuando se crea un nuevo archivo o directorio, ext2 debe decidir dónde almacenar los datos. Si el disco está casi vacío, los datos se pueden almacenar en casi cualquier lugar. Sin embargo, agrupar los datos con datos relacionados minimizará los tiempos de búsqueda y maximizará el rendimiento.

ext2 intenta asignar cada directorio nuevo en el grupo que contiene su directorio padre, basándose en la teoría de que los accesos a los directorios padre e hijo probablemente estén estrechamente relacionados. ext2 también intenta colocar archivos en el mismo grupo que sus entradas de directorio, porque los accesos a directorios a menudo conducen a accesos a archivos. Sin embargo, si el grupo está lleno, el nuevo archivo o directorio nuevo se coloca en algún otro grupo no completo.

Los bloques de datos necesarios para almacenar directorios y archivos se pueden encontrar mirando en el mapa de bits de asignación de datos. Cualquier espacio necesario en la tabla de inodos se puede encontrar mirando en el mapa de bits de asignación de inodos.

Límites del sistema de archivos

Límites teóricos de ext2 en Linux
Tamaño de bloque: 1 KiB 2 KiB 4 KiB 8 KiB
máx. tamaño del archivo: 16 GiB 256 GiB 2 TiB 2 TiB
máx. tamaño del sistema de archivos: 4 TiB 8 TiB 16 TiB 32 TiB

La razón de algunos límites de ext2 son el formato de archivo de los datos y el kernel del sistema operativo. La mayoría de estos factores se determinarán una vez cuando se cree el sistema de archivos. Dependen del tamaño del bloque y la proporción del número de bloques e inodos. En Linux, el tamaño del bloque está limitado por el tamaño de la página de la arquitectura .

También hay algunos programas de espacio de usuario que no pueden manejar archivos de más de 2 GiB .

Si b es el tamaño del bloque, el tamaño máximo de archivo se limita a min ((( b / 4) 3 + ( b / 4) 2  +  b / 4 + 12) ×  b , (2 32  - 1) × 512) debido a la estructura i_block (una matriz de EXT2_N_BLOCKS directos / indirectos) e i_blocks (valor entero de 32 bits) que representan el número de "bloques" de 512 bytes en el archivo.

El número máximo de directorios de subnivel es 31998, debido al límite de recuento de enlaces. La indexación de directorios no está disponible en ext2, por lo que existen problemas de rendimiento para directorios con una gran cantidad de archivos (> 10,000). El límite teórico del número de archivos en un directorio es 1,3 × 10 20 , aunque esto no es relevante para situaciones prácticas.

Nota: En Linux 2.4 y versiones anteriores, los dispositivos de bloque estaban limitados a 2 TiB, lo que limitaba el tamaño máximo de una partición, independientemente del tamaño del bloque.

Extensión de compresión

e2compr es una modificación del controlador ext2 en el kernel de Linux para admitir la compresión y descompresión de archivos por parte del sistema de archivos, sin ningún soporte por parte de las aplicaciones de usuario. e2compr es un pequeño parche contra ext2.

e2compr comprime solo archivos normales; los datos administrativos (superbloque, inodos, archivos de directorio , etc.) no están comprimidos (principalmente por razones de seguridad). Se proporciona acceso a bloques comprimidos para operaciones de lectura y escritura. El algoritmo de compresión y el tamaño del clúster se especifican por archivo. Los directorios también se pueden marcar para compresión, en cuyo caso cada archivo recién creado en el directorio se comprimirá automáticamente con el mismo tamaño de clúster y el mismo algoritmo que se especificó para el directorio.

e2compr no es un nuevo sistema de archivos. Es solo un parche para ext2 hecho para admitir el indicador EXT2_COMPR_FL. No requiere que el usuario cree una nueva partición y continuará leyendo o escribiendo sistemas de archivos ext2 existentes. Se puede considerar simplemente como una forma para que las rutinas de lectura y escritura accedan a archivos que podrían haber sido creados por una sencilla utilidad similar a gzip o compress. Los archivos comprimidos y sin comprimir coexisten muy bien en las particiones ext2.

La última rama e2compr está disponible para las versiones actuales de Linux 2.4, 2.6 y 3.0. El último parche para Linux 3.0 se lanzó en agosto de 2011 y proporciona compatibilidad con memoria alta y multinúcleo . También hay ramas para Linux 2.0 y 2.2.

Bajo otros sistemas operativos

El acceso a las particiones ext2 en Microsoft Windows es posible a través de un sistema de archivos instalable, como ext2ifs o ext2Fsd . El sistema de archivos en el espacio de usuario se puede utilizar en macOS.

Ver también

Referencias

Notas

Otras lecturas

enlaces externos