ext2 , o segundo sistema de archivos extendido , es un sistema de archivos para el núcleo de Linux . Fue diseñado inicialmente por el desarrollador de software francés Rémy Card como reemplazo del sistema de archivos extendido (ext). Al haber sido diseñado según los mismos principios que el Berkeley Fast File System de BSD , fue el primer sistema de archivos de grado comercial para Linux. [ 7 ]
La implementación canónica de ext2 es el controlador de sistema de archivos "ext2fs" en el kernel de Linux. Existen otras implementaciones (de calidad y completitud variables) en GNU Hurd , [ 8 ] MINIX 3 , [ 9 ] [ 10 ] algunos kernels BSD , [ 11 ] [ 12 ] [ 13 ] en MiNT , [ 14 ] Haiku [ 15 ] y como controladores de terceros para Microsoft Windows [ 16 ] y macOS (a través de FUSE ). Este controlador fue descontinuado en la versión 6.9 de Linux en favor del controlador ext4, ya que el controlador ext4 funciona con sistemas de archivos ext2. [ 17 ]
ext2 fue 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 con registro de transacciones . ext2 sigue siendo el sistema de archivos preferido para medios de almacenamiento basados en memoria flash (como tarjetas SD y unidades flash USB ) porque su falta de registro de transacciones aumenta el rendimiento y minimiza el número de escrituras. Esto es importante porque muchos dispositivos flash solo pueden soportar un número limitado de ciclos de escritura. Desde 2009, [ 18 ] el kernel de Linux admite un modo sin registro de transacciones de ext4 que proporciona beneficios que no se encuentran en ext2, como tamaños de archivo y volumen mayores. [ 19 ]
Historia
El desarrollo inicial del núcleo Linux se realizó mediante 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 prácticamente libre de errores , pero utilizaba internamente desplazamientos de 16 bits y, por lo tanto, tenía un límite de tamaño máximo de solo 64 megabytes , además de un límite de longitud de nombre de archivo de 14 caracteres. [ 20 ] Debido a estas limitaciones, se comenzó a trabajar en un sistema de archivos nativo de reemplazo para Linux. [ 20 ]
Para facilitar la adición de nuevos sistemas de archivos y proporcionar una API de archivos genérica , se agregó VFS , una capa de sistema de archivos virtual, al kernel de Linux. El sistema de archivos extendido ( ext ), se lanzó en abril de 1992 como el primer sistema de archivos que utilizaba la API VFS y se incluyó en la versión 0.96c de Linux. [ 21 ] 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 aún tenía problemas: no había soporte para marcas de tiempo separadas para el acceso a archivos, modificación de inodos 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 ), [ 21 ] que fue una revisión del sistema de archivos extendido que incorporó muchas ideas del Berkeley Fast File System . ext2 también fue diseñado teniendo en cuenta la extensibilidad, dejando espacio en muchas de sus estructuras de datos en disco para su uso por versiones futuras.
Desde entonces, ext2 ha servido como banco de pruebas para muchas de las nuevas extensiones de la API VFS. Funcionalidades como la propuesta de ACL de borrador POSIX retirada y la propuesta de atributo extendido retirada se implementaron generalmente primero en ext2 porque era relativamente sencillo de extender y su funcionamiento interno se comprendía bien.
En los núcleos de Linux anteriores a la versión 2.6.17, [ 22 ] las restricciones en el controlador de bloques implican que los sistemas de archivos ext2 tienen un tamaño máximo de archivo de 2 TiB.
Se sigue recomendando ext2 sobre los sistemas de archivos con registro de transacciones en unidades flash USB de arranque y otras unidades de estado sólido . ext2 realiza menos escrituras que ext3 porque no tiene registro de transacciones. Como el principal factor de envejecimiento de un chip flash es el número de ciclos de borrado, y como los ciclos de borrado ocurren con frecuencia en las escrituras, disminuir las escrituras aumenta la vida útil del dispositivo de estado sólido. [ 23 ] Otra buena práctica para los sistemas de archivos en dispositivos flash es el uso de la opción de montaje sin atime , por la misma razón.
A partir del kernel de Linux 6.9, el controlador ext2fs quedó obsoleto y ya no está habilitado en la configuración predeterminada. La razón principal fue que no admitía fechas posteriores a 2038. [ 17 ] Se recomienda a los usuarios actualizar a ext4. [ 24 ]
Estructuras de datos ext2
El espacio en ext2 se divide en bloques . Estos bloques se agrupan en grupos de bloques, de forma similar a los grupos de cilindros en el sistema de archivos Unix . Un sistema de archivos grande suele tener miles de bloques. Los datos de un archivo determinado generalmente se encuentran dentro de un único grupo de bloques, siempre que sea posible. Esto se hace para minimizar el número de accesos al disco al leer grandes cantidades de datos contiguos.
Cada grupo de bloques contiene una copia del superbloque y de la tabla de descriptores del grupo 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 propiamente dichos.
El superbloque contiene información importante, crucial para el arranque del sistema operativo . Por ello, se realizan copias de seguridad en varios grupos de bloques del sistema de archivos. Sin embargo, normalmente solo se utiliza la primera copia, ubicada en el primer bloque del sistema de archivos, durante el arranque.
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 inodos para cada grupo de bloques. Estos, a su vez, se almacenan en una tabla de descriptores de grupo. [ 25 ]
Inodos
Cada archivo o directorio está representado por un inodo . El término "inodo" proviene de "index node" (con el tiempo, se convirtió en i-node y luego en inodo). [ 26 ] El inodo incluye datos sobre el tamaño, los permisos, la propiedad y la ubicación en el disco del archivo o directorio.
Ejemplo de estructura de inodo ext2:
Cita de la documentación del kernel de Linux para ext2: [ 27 ]
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 lo tanto, en ext2 hay una estructura que tiene 15 punteros. Los punteros del 1 al 12 apuntan a bloques directos, el puntero 13 apunta a un bloque indirecto, el puntero 14 apunta a un bloque doblemente indirecto y el puntero 15 apunta a un bloque triplemente indirecto.
Directorios
Cada directorio es una lista de entradas. Cada entrada 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 del mismo. Para encontrar un archivo, se recorre el directorio de principio a fin buscando el nombre de archivo asociado. Para directorios de tamaño razonable, esto funciona bien. Sin embargo, para directorios muy grandes, resulta ineficiente, y ext3 ofrece una segunda forma de almacenar directorios ( HTree ) que es más eficiente que una simple lista de nombres de archivo.
El directorio raíz siempre se almacena en el inodo número dos, para que el código del sistema de archivos pueda encontrarlo al montar el sistema de archivos. Los subdirectorios se implementan almacenando su nombre en el campo `name` y su número de inodo en el campo `inode`. Los enlaces duros se implementan almacenando el mismo número de inodo con más de un nombre de archivo. Al acceder al archivo con cualquiera de los nombres, se obtiene el mismo número de inodo y, por lo tanto, los mismos datos.
Los directorios especiales "." (directorio actual) y ".." (directorio padre) 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 al crear cualquier directorio nuevo y no se pueden eliminar.
Asignación de datos
Cuando se crea un nuevo archivo o directorio, ext2 debe decidir dónde almacenar los datos. Si el disco está prácticamente vacío, los datos se pueden almacenar casi en cualquier lugar. Sin embargo, agrupar los datos con datos relacionados minimizará los tiempos de acceso y maximizará el rendimiento.
ext2 intenta asignar cada nuevo directorio al grupo que contiene su directorio padre, partiendo de la base de que los accesos a directorios padre e hijo suelen estar estrechamente relacionados. ext2 también intenta colocar los archivos en el mismo grupo que sus entradas de directorio, ya que los accesos a directorios a menudo conllevan accesos a archivos. Sin embargo, si el grupo está lleno, el nuevo archivo o directorio se coloca en algún otro grupo que no esté lleno.
Los bloques de datos necesarios para almacenar directorios y archivos se pueden encontrar consultando el mapa de bits de asignación de datos. El espacio necesario en la tabla de inodos se puede encontrar consultando el mapa de bits de asignación de inodos.
Límites del sistema de archivos
Algunas limitaciones de ext2 se deben al formato de archivo de los datos y al núcleo del sistema operativo. Generalmente, estos factores se determinan al crear el sistema de archivos. Dependen del tamaño del bloque y de la relación entre el número de bloques y de inodos. En Linux, el tamaño del bloque está limitado por el tamaño de página de la arquitectura .
También existen 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 del archivo está limitado 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 representa el número de "bloques" de 1024 bytes (1 kilobyte) [ 29 ] en el archivo.
El número máximo de subdirectorios es 31998, debido al límite de enlaces. La indexación de directorios no está disponible en ext2, por lo que existen problemas de rendimiento para directorios con un gran número de archivos (>10 000). El límite teórico para el número de archivos en un directorio es 1,3 × 10²⁰ , aunque esto no es relevante en situaciones prácticas.
Nota: En Linux 2.4 y versiones anteriores, los dispositivos de bloques estaban limitados a 2 TiB, lo que limitaba el tamaño máximo de una partición, independientemente del tamaño del bloque. [ 30 ]
Extensión de compresión
e2compr es una modificación del controlador ext2 del kernel de Linux que permite la compresión y descompresión de archivos por parte del sistema de archivos, sin necesidad de soporte por parte de las aplicaciones de usuario. e2compr es un pequeño parche para ext2.
e2compr comprime únicamente archivos regulares; los datos administrativos (superbloque, inodos, archivos de directorio , etc.) no se comprimen (principalmente por motivos de seguridad). Se permite el acceso a los bloques comprimidos para operaciones de lectura y escritura. El algoritmo de compresión y el tamaño del clúster se especifican para cada archivo. También se pueden marcar los directorios para su compresión; en ese caso, cada archivo nuevo que se cree en el directorio se comprimirá automáticamente con el mismo tamaño de clúster y el mismo algoritmo especificado para dicho directorio.
e2compr no es un nuevo sistema de archivos. Es simplemente un parche para ext2 que admite la bandera EXT2_COMPR_FL. No requiere que el usuario cree una nueva partición y seguirá leyendo y escribiendo en sistemas de archivos ext2 existentes. Se puede considerar como una forma sencilla para que las rutinas de lectura y escritura accedan a archivos que podrían haberse creado con una utilidad simple como gzip o compress. Los archivos comprimidos y sin comprimir coexisten sin problemas en particiones ext2.
La última versión de e2compr-branch está disponible para las versiones actuales de Linux 2.4, 2.6 y 3.0. El último parche para Linux 3.0 se publicó en agosto de 2011 y ofrece compatibilidad con procesadores multinúcleo y memoria de alto rendimiento . También existen versiones para Linux 2.0 y 2.2.
Bajo otros sistemas operativos
El acceso a particiones ext2 en Microsoft Windows es posible a través de un sistema de archivos instalable , como ext2ifs [ 31 ] o ext2Fsd . [ 32 ] El sistema de archivos en espacio de usuario se puede utilizar en macOS. [ 33 ]
Véase también
- e2fsprogs
- StegFS : un sistema de archivos esteganográfico basado en ext2.
- capa
- Lista de sistemas de archivos
- Comparación de sistemas de archivos
- Asignador de bloques Orlov , asignador de bloques predeterminado determinado por el kernel de Linux para ext2. [ 34 ]
Referencias
- ↑ "Capítulo 8. Discos, sistemas de archivos y cargadores de arranque" . www.freebsd.org . Consultado el 11 de abril de 2018 .
- ↑ "ext2fs(5)" . www.freebsd.org . Consultado el 11 de abril de 2018 .
- ↑ "ReactOS 0.4.2 lanzado" . reactos.org . Consultado el 17 de agosto de 2016 .
- ↑ «HelenOS Wiki: Ext4fs» . www.helenos.com . Consultado el 6 de noviembre de 2023 .
- ↑ "pkg/lwext4: agrega una implementación ligera del sistema de archivos ext2/3/4" . www.github.com . Consultado el 6 de noviembre de 2023 .
- ↑ "subsys: fs: Implementación del sistema de archivos ext2" . www.github.com . Consultado el 6 de noviembre de 2023 .
- ↑ Mauerer, Wolfgang (2010). Arquitectura profesional del kernel de Linux . John Wiley e hijos. ISBN 9781118079911.
- ↑ "GNU Hurd/hurd/translator/ext2fs" . GNU Hurd . Consultado el 10 de febrero de 2024 .
- ↑ "MINIX Release 3.2.0" . MINIX 3. Consultado el 10 de febrero de 2024 .
- ↑ "git.minix3.org Git - minix.git/tree - minix/fs/ext2/" . Código fuente de MINIX 3 . Consultado el 10-02-2024 .
- ↑ "NetBSD src/sys/ufs/ext2fs/" . Código fuente de NetBSD . Consultado el 10 de febrero de 2024 .
- ↑ "OpenBSD src/sys/ufs/ext2fs/" . Código fuente de OpenBSD . Consultado el 10 de febrero de 2024 .
- ↑ "ext2fs « fs « sys - src - Árbol fuente de FreeBSD" . Código fuente de FreeBSD . Consultado el 10 de febrero de 2024 .
- ↑ "freemint/sys/xfs/ext2fs en master · freemint/freemint" . Código fuente de FreeMiNT . Consultado el 10 de febrero de 2024 .
- ↑ "ext2 « file_systems « kernel « add-ons « src - haiku - Repositorio principal de Haiku" . Código fuente de Haiku . Consultado el 10 de febrero de 2024 .
- ↑ "matt-wu/Ext3Fsd: controlador del sistema de archivos Ext2/3/4 para Windows" . matt-wu/Ext3Fsd . Consultado el 10 de febrero de 2024 .
- 1 2 Larabel, Michael (2024-03-26). "Linux 6.9 desaconseja el controlador del sistema de archivos EXT2" . Phoronix . Recuperado el 2024-03-26 .
- ↑ "ext4: Permite que ext4 se ejecute sin un registro" . Árbol de código fuente del kernel de Linux . Consultado el 12 de enero de 2021 .
- ↑ "Sistemas de archivos Linux: Ext2 vs Ext3 vs Ext4" . www.thegeekstuff.com . Consultado el 13 de julio de 2020 .
- 1 2 Strobel, Stefan; Uhl, Thomas (1994). Linux—Liberando la estación de trabajo en su PC . Springer-Verlag. pág. 54.
- 1 2 Jones, M. Tim (17 de febrero de 2009). "Anatomía de ext4" . IBM Developer Works. Archivado del original el 20 de febrero de 2015. Recuperado el 8 de febrero de 2012 .
- ↑ linux/kernel/git/torvalds/linux-2.6.git/commitdiff: , [PATCH] Archivos de 2 TB: agregar blkcnt_t, Autor: Takashi Sato, 26 de marzo de 2006 09:37:52 +0000 (01:37 -0800) — Commit que permite archivos grandes, git.kernel.org
- ↑ "Unidades de disco de estado sólido" . Super Talent Technology.
- ↑ Opdenacker, Michael (25 de marzo de 2024). "El controlador del sistema de archivos ext2 ahora está marcado como obsoleto - Blog de Bootlin" . Recuperado el 26 de marzo de 2024 .
- ↑ "El segundo sistema de archivos extendido: la documentación del kernel de Linux" . docs.kernel.org . Consultado el 28 de febrero de 2025 .
- ↑ "Revista del programador", Volumen 5, 1987, pág. 174
- ↑ "El segundo sistema de archivos extendido" . www.nongnu.org . Consultado el 11 de diciembre de 2019 .
- ↑ "Guía del sistema de archivos" . Linux Reviews. Archivado del original el 17 de septiembre de 2011. Consultado el 24 de enero de 2008 .
- ↑ "Creación del sistema de archivos Ext2: comprensión del núcleo de Linux, segunda edición" . www.oreilly.com . Consultado el 25 de julio de 2023 .
- ↑ "El segundo sistema de archivos extendido" . cscie28.dce.harvard.edu . Consultado el 7 de diciembre de 2024 .
- ↑ Randall, Neil (18 de septiembre de 2007). "Linux: ¡Puedes hacerlo!" . PC Magazine . Vol. 26, n.º 18, pág. 76.
- ↑ Wallen, Jack (17 de septiembre de 2012). "Habilitar el montaje de sistemas de archivos ext2/3 en una máquina Windows" . TechRepublic . Consultado el 17 de enero de 2016 .
- ↑ Kessler, Topher (22 de junio de 2012). "Cómo administrar discos Ext2/Ext3 en OS X" . CNET . Consultado el 17 de enero de 2016 .
- ↑ "El segundo sistema de archivos extendido: la documentación del kernel de Linux" .
Notas
- Card, Rémy; Ts'o, Theodore; Tweedie, Stephen (1994). «Diseño e implementación del segundo sistema de archivos extendido» . Actas del Primer Simposio Internacional Holandés sobre Linux . ISBN 90-367-0385-9.
- Proyecto Sourceforge e2compr
- Documentación de Sourceforge e2compr
- Página del proyecto Sourceforge e3compr, compresión ext3, alfa
- Boletín informativo sobre compresión de datos del Dr. Dobb, número 46, septiembre de 2003
Lecturas adicionales
- Newbigin, John. "Especificación de John del segundo sistema de archivos extendido" .
- Poirier, Dave (2009). "El segundo sistema de archivos extendido: diseño interno" .
- Ts'o, Theodore; Tweedie, Stephen (junio de 2002). "Extensiones planificadas para el sistema de archivos Linux Ext2/Ext3" . Conferencia Técnica Anual USENIX 2002 .
- Ayers, Larry (junio de 1997). "E2compr: Compresión transparente de archivos para Linux" . Linux Gazette . N.° 18.
- Cong, Charles; Brown, Jeremy H. (1997-12-26). "Un sistema para compresión transparente de archivos con almacenamiento en caché bajo Linux". CiteSeerX 10.1.1.51.4780 .
- Cong, Charles; Brown, Jeremy H. (1997-10-22). "Un estudio de las técnicas modernas de compresión de archivos". CiteSeerX 10.1.1.50.9847 .
Enlaces externos
- Herramientas de espacio de usuario de ext2fs
- Ext3Fsd GPL Controlador de sistema de archivos ext2/ext3 para Windows 2000/XP/2003/VISTA/2008 (código abierto, admite lectura y escritura, funciona con FreeOTFE)
- Software de 1993
- Sistemas de archivos de disco
- Sistemas de archivos compatibles con el kernel de Linux