Anda di halaman 1dari 4

Ext4

Ext4 es la evolucin del sistema de archivos ms utilizado en el mundo Linux, Ext3. En muchos sentidos Ext4 es una mejora ms profunda de Ext3 que la que Ext3 fue de Ext2. Ext3 consisti bsicamente en aadir journaling, pero Ext4 modifica ciertas estructuras crticas del sistema de archivos, como las destinadas a almacenar los datos de los archivos. El resultado es un sistema de archivos con un diseo mejorado, mayor rendimiento y fiabilidad. Las principales mejoras que ofrece son: Compatibilidad: Cualquier sistema de archivos Ext3 existente puede migrarse a Ext4 con un sencillo procedimiento de dos comandos a ejecutar en modo de solo-lectura (procedimiento descrito ms adelante). Es decir, que puedes mejorar el rendimiento, lmites de almacenamiento y caractersticas de un sistema de archivos sin necesidad de reformatear y/o reinstalar tu SO y entorno de software. Si necesitas las ventajas de Ext4 en un entorno de produccin, puedes actualizar el sistema de archivos. El procedimiento es sencillo y no pone en riesgo los datos (eso si, se recomienda hacer copia de seguridad de los datos crticos, incluso si no ests actualizandote el sistema de archivos :). Ext4 solamente utilizar sus nuevas estructuras en los nuevos datos que se escriban, los datos antiguos podrn continuar siendo leidos y modificados cuando sea preciso. Esto significa, por supuesto, que una vez que se convierte el sistema de archivos a Ext4, no se puede regresar a Ext3 (aunque hay una posibilidad de montar un sistema de archivos Ext3 con Ext4 de modo que no se utilize el nuevo formato de disco, y as poder volver a montarlo con Ext3, pero as se pierden muchas de las ventajas de Ext4) Mayores tamaos del sistema de archivos y de los archivos: Ext3 soporta 16 TB como mximo tamao del sistema de archivos, y 2 TB de tamao mximo de cada archivo. Ext4 aade direccionamiento de bloques de 48 bits, y tendr 1 EB de tamao mximo de sistema de archivos y 16TB de tamao mximo de archivo. 1EB = 1.048.576 TB (1EB = 1024 PB, 1 PB = 1024 TB, 1 TB = 1024 GB). Por qu 48 bits, y no 64? Hay algunas limitaciones que necesitan ser solucionadas antes de que Ext4 sea capaz de soportar 64 bits, y esas limitaciones no han sido tratadas en Ext4. Las estructuras de datos de Ext4 han sido diseadas teniendo esto en mente, de modo que una futura actualizacin a Ext4 implementar soporte completo de 64 bits. 1EB ser suficiente (en serio :) hasta que llegue ese momento. (Nota: el cdigo para crear sistemas de archivo mayores de 16 TB no est presente en ninguna versin estable de e2fsprogs) Escalabilidad de subdirectorios: El nmero mximo de subdirectorios que puede contener un solo directorio en Ext3 es 32.000. Ext4 rompe ese lmite y permite un nmero ilimitado de subdirectorios. Extents: Los sistemas de archivo tradicionales derivados de Unix, como Ext3, utilizan un sistema de mapeo de bloques indirecto para llevar cuenta de cada uno de los bloques correspondientes a los datos de un archivo. Este sistema es ineficiente para los archivos grandes, especialmente a la hora de borrarlos o truncarlos, porque el mapeado mantiene una entrada para cada bloque, y los archivos grandes tienen muchos bloques -> mapeados gigantescos cuya manipulacin es lenta. Los sistemas de archivo modernos utilizan un sistema distinto llamado "extents". Un extent es bsicamente un montn de bloques fsicamente contiguis. Bsicamente dice: "Los datos estn en los prximos n bloques". Por ejemplo, a un archivo de 100 MB puede asignarsele un solo extent de ese tamao, en vez de tener que crear un mapeado indirecto para 25.600 bloques (4KB por bloque). Los archivos gigantescos son divididos en varios extents. Los extents mejoran el rendimiento y tambien ayudan a reducir la fragmentacin, ya que animan a a utilizar rangos continuos en el disco. Asignacin multibloque: Cuando Ext3 tiene que escribir nuevos datos al disco, hay un asignador de bloques que decide qu bloques libres sern utilizados para escribir esos datos.

Pero el asignador de bloques de Ext3 solo puede asignar un bloque (4KB) de una vez. Esto significa que si el sistema necesita escribir los 100 MB de datos mencionados anteriormente, tendr que llamar al asignador de bloques 25600 (y solamente son 100 MB!). No solo esto es muy ineficiente, no permite al asignador optimizar la poltica de asignacin porque no puede saber cuantos datos van a asignarse en total, solo sabe lo de un bloque. Ext4 utiliza un "asignador multibloque" (mballoc), que puede asignas muchos bloques en una sola llamada, en lugar de un bloque por llamada, evitando de ese modo sobrecarga. Esto mejora el rendimiento, y es especialmente til con asignacin diferida y extents. Esta caracterstica no afecta el formato del disco. Tambien hay que tomar nota de que el asignador de bloques/inodos de Ext4 tiene muchas otras mejoras, descritas en detalle en este documento. Asignacin diferida: La asignacin diferida, en ingls delayed allocation, es una mejora de rendimiento (no cambia el formato del disco) que se encuentra en sistemas de archivos modernos como XFS, ZFS, btrfs or Reiser 4; no es una tcnica muy expandida por haber sido considerado hasta hace poco como "peligrosa", y que consiste en retrasar la asignacin de bloques lo ms posible, contrariamente a lo que los sistemas de archivo tradicionales (como Ext3, reiser3, etc) hacen: asignar los bloques tan pronto como es posible. Por ejemplo, si un proceso escribe con write() algo, el sistema de archivos asignar inmediatamente los bloques en los que se colocarn los datos - incluso si los datos no se estn escribiendo al disco en ese mismo momento y se van a mantener en el cache algn tiempo. Esta aproximacin tiene desventajas. Por ejemplo, cuando un proceso est escribiendo continuamente datos a un archivo que va creciendo, write()s sucesivos asignarn bloques para los datos, pero el sistema de archivos no puede saber si el archivo va a continuar creciendo. Sin embargo, la asignacin diferida no asigna los bloques inmediatamente cuando el proceso usa write()s; en vez de eso, difiere la asignacin mientras los datos del archivo se mantengan en el cache, hasta que se escriban definitivamente en el disco. Esta aproximacin da la oportunidad al asignador de bloques de optimizar la asignacin en situaciones en las que el antiguo sistema no poda. La asignacin diferida encaja muy bien con las dos anteriormente mencionadas caractersticas, extents y asignacin multibloque, porque en muchos tipos de carga, cuando el archivo se escribe finalmente al disco, puede asignarse en extents cuya asignacin de bloques se ha llevado a cabo con el sistema de asignacin multibloque. El rendimiento mejora, y la fragmentacin se disminuye en ciertos tipos de carga. Fsck rpido: Hacer un fsck es una operacin muy lenta, especialmente el primer paso: comprobar todos los inodos del sistema de archivos. En Ext4, al final de cada tabla de grupo de inodos se almacena una lista de inodos no utilizados (junto a un checksum, por seguridad), de modo que el fsck no los comprobar. El resultado es que el tiempo de fsck mejora de 2 a 20 veces, dependiendo del nmero de inodos utilizados. Hay que notar es fsck, y no Ext4, quien construye la lista de inodos no utilizados. Esto significa que tendrs que pasar un fsck para que se construya la lista de inodos no utilizados, y entonces el prximo fsck ser el que sea ms rpido (necesitas pasar un fsck para convertir un sistema de archivos Ext3 a Ext4 de todos modos). Hay tambien una caracterstica que toma parte en este aceleramiento del fsck - "flexible block groups" - que tambien acelera las operaciones normales del sistema de archivos. Checksumming del Journal: El journal es la parte ms utilizada del disco, lo cual hace que los bloques que forman parte de l sean ms susceptibles a sufrir un fallo de hardware. Y tratar de recuperar un log de un journal corrupto puede inducir a una corrupcin masiva. Ext4 hace un checksum del journal para saber si los bloques del journal estn fallando o estn corruptos. Pero el checksumming del journal tiene un bonus: permite convertir el sistema de dos fases de Ext3 a una sola fase, acelerando las operaciones del sistema de archivos hasta en un 20% en algunos casos - asi que en este caso se gana fiabilidad y rendimiento al mismo tiempo. (Nota: La parte de esta caracterstica que mejora el rendimiento, el logging asncrono, est desactivado por defecto y ser activado en el futuro)

Defragmentacin en vivo: (Esta caracterstica no est disponible en 2.6.28, pero probablemente lo estar en la prxima versin). Aunque la asignacin diferida, los extents y la asignacin multibloque ayudan a reducir la fragmentacin, con el uso los sistemas de archivos pueden fragmentarse. Por ejemplo: Escribes tres archivos en un mismo directorio y contiguamente en el disco. Algn da necesitas actualizar el archivo del medio, pero el archivo actualizado es un poco ms grande, asi que no hay suficiente espacio para l. No queda otra opcin que fragmentar el exceso de datos a otro lugar del disco, que causara movimiento de brazo extra en el disco y por tanto prdida de rendimiento, o tambien puedes asignar para el archivo actualizado espacio contguo en otro lugar lejano a los otros dos archivos, lo cual causar movimiento de brazo si una aplicacin necesita leer todos los archivos de un directorio (por ejemplo, un gestor de archivos creando miniaturas de un directorio lleno de imgenes). Adems, el sistema de archivos solo puede ocuparse de ciertos tipos de fragmentacin, no puede saber, por ejemplo, que debe mantener todos los archivos relacionados con la carga del SO juntos, porque no sabe qu archivos estn relacionados con la carga del SO. Para solventar este problema, Ext4 soporta defragmentacin en vivo, y hay una herramienta llamada e4defrag que puede defragmentar archivos individuales o todo el sistema de archivos. Caractersticas relacionadas con los inodos: inodos ms grandes, marcas de tiempo con granularidad de nanosegundos, atributos extendidos rpidos, reserva de inodos... Mayores inodos: Ext3 soporta la configurabilidad de los tamaos de inodo (mediante el parmetro -I de mkfs), pero el tamao de inodo por defecto es de 128 bytes. Ext4 por defecto tendr 256. Este aumento es necesario para hacer espacio a varios campos extra (como la granularidad de nanosegundos o el versionamiento de inodos), y el tamao restante del inodo ser utilizado para almacenar atributos extendidos que sean lo suficientemente pequeos como para caber en ese espacio. Esto har que el acceso a esos atributos sea mucho ms veloz, lo cual aumenta entre 2 y 7 veces el rendimiento de las aplicaciones que hacen uso de estos atributos extendidos apodados "rpidos". Reserva de inodos: La reserva de inodos consiste en reservar varios inodos para futuros archivos cuando se crea un directorio, confiando que sern utilizados en el futuro. Esto mejora el rendimiento, porque cuando los nuevos archivos sean creados en ese directorio podrn usar esos inodos que haban sido reservados. Por tanto, se mejora el rendimiento de la creacin y eliminacin de archivos. Marcas de tiempo con granularidad de nanosegundos: Esto significa que los campos como mtime (modified time) o atime (access time) podrn usar una resolucin de nanosegundos, en vez de la que hace uso Ext3, que tan solo alcanza una granularidad a nivel de segundo. Preasignacin persistente: Esta caracterstica (disponible en Ext3 en las ltimas versiones del kernel, y emulada la por glibc de no estar disponible) permite a las aplicaciones preasignar espacio de disco: El sistema de archivos asigna el espacio libre y los bloques necesarios, pero no hay ningn dato en ellos hasta que la aplicacin verdaderamente se decida a escribirlos en el futuro. Esto es lo que las aplicaciones P2P hacen cuando preasignan espacio para descargas que tardarn horas o das en completarse, pero implementado con ms eficiencia por el sistema de archivos y con una API genrica. Tiene muchos usos: en primer lugar, para evitar que las aplicaciones (como los P2P) lo hagan ellas mismas ineficientemente llenando un archivo de ceros. Segundo, para mejorar la fragmentacin, ya que los bloques se asignarn de una sola vez para todo el archivo lo ms contiguamente posible. Tercero, para asegurarse de que las aplicaciones tienen el espacio que ellas creen que van a necesitar, lo cual es importante para las aplicaciones tipo RT, ya que sin preasignacin el sistema de archivos podra llenarse en la mitad de una operacin importante. Esta caracterstica est disponible mediante la interfaz de glibc posix_fallocate().

Barreras activadas por defecto: Esta opcin mejora la integridad del sistema de archivos a costa de algo de rendimiento (se puede desactivar con "mount -o barrier=0", recomendado si ests haciendo benchmarks). De este artculo de LWN: "Antes de escribir el registro de commit [en el journaling], el cdigo del sistema de archivos debe estar totalmente seguro de que todos los datos de las transaciones ha llegado al disco. Escribir los datos al disco en orden no es suficiente; los discos hoy en da tienen grandes caches y reordenarn las operaciones para mejorar el rendimiento. Asi que el sistema de archivos debe ordenar explicitamente al disco que escriba todos los datos del journaling antes de escribir los datos del registro de commit; si el registro de commit se escribe antes, el journal podra corromperse. El subsistema de E/S del kernel facilita esta tarea a traves del uso de barreras; en esencia, una barrera prohibe la escritura de cualquier bloque tras la barrera, hasta que todos los bloques que se hayan escrito antes de la barrera estn realmente escritos en el disco. Utilizando barreras, los sistemas de archivos pueden estar verdaderamente seguros de que su estructura se mantiene siempre consistente en el disco"

Anda mungkin juga menyukai