Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
Inodo
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
{{título minúscula}} En [[informática]], un '''inodo''', '''nodo-i''' o '''nodo índice''' es una [[estructura de datos]] propia de los [[sistema de archivos|sistemas de archivos]] tradicionalmente empleados en los [[sistema operativo|sistemas operativos]] tipo [[Unix]] como es el caso de [[Núcleo Linux|Linux]]. Un inodo contiene las características de un archivo regular, directorio, o cualquier otro objeto que pueda contener el sistema de ficheros. El término «inodo» se refiere generalmente a inodos en [[disco duro|discos]] (dispositivos en modo bloque) que almacenan archivos regulares, directorios, y [[enlace simbólico|enlaces simbólicos]]. El concepto es particularmente importante para la recuperación de los sistemas de archivos dañados. Cada inodo queda identificado por un [[número entero]], único dentro del sistema de ficheros, y los [[directorio]]s recogen una lista de parejas formadas por un número de inodo y nombre identificativo que permite acceder al archivo en cuestión: cada archivo tiene un único inodo, pero puede tener más de un nombre en distintos o incluso en el mismo directorio para facilitar su localización. == Denominación == [[Ken Thompson]] y [[Dennis Ritchie]] fueron los principales creadores de la idea.<ref>{{Obra citada |título=Unix Programmer's Manual |idioma=en |edición=1.ª |fecha=1971-11-03 |url=https://www.tuhs.org/Archive/Distributions/Research/Dennis_v1/UNIX_ProgrammersManual_Nov71.pdf}}</ref> No existe una noción clara de la denominación «inodo». Dennis Ritchie lo explicó así: {{cita|Realmente, tampoco lo sé. Era simplemente el nombre que comenzamos a utilizar. «Índice» es lo mejor que se me ocurre, debido a la estructura algo inusual de un sistema de ficheros que almacenaba la información del acceso a los archivos como una lista plana en disco, dejando al margen toda la información jerárquica de los directorios. Así el número «i'» es un índice sobre la lista, el nodo «i» es el elemento seleccionado de la lista.<ref>En la primera edición del manual se empleó la notación «i-nodo»; el guion fue desapareciendo poco a poco.</ref>|Dennis Ritchie}} == Estructura del inodo == El estándar [[POSIX]] establece un modelo de sistema de archivos que se ajusta al empleado en los UNIX tradicionales. Un archivo ordinario tendrá las propiedades siguientes: * El ''identificador de dispositivo'' del dispositivo que alberga al sistema de archivos. * El ''número de inodo'' que identifica al archivo dentro del sistema de archivos * La ''longitud'' del archivo en [[byte]]s. * El ''identificador de usuario'' del creador o un propietario del archivo con derechos diferenciados * El ''identificador de grupo'' de un grupo de usuarios con derechos diferenciados * El ''modo'' de acceso: capacidad de leer, escribir, y ejecutar el archivo por parte del propietario, del grupo y de otros usuarios. * Las ''marcas de tiempo'' con las fechas de última modificación (''mtime''), acceso (atime) y de alteración del propio inodo (ctime). * El ''número de enlaces'', esto es, el número de nombres (entradas de directorio) asociados con este inodo. El número de enlaces se emplea por el sistema operativo para eliminar el archivo del sistema de ficheros, tanto el inodo como el contenido, cuando se han borrado todos los enlaces y el contador queda a cero. * La ''estructura de punteros'', para direccionar hacia los bloques de datos (contenido) del archivo. Está compuesta por: **Doce punteros que apuntan '''directamente''' a bloques de datos del archivo (punteros directos) **Un puntero de indirección simple (apunta a un bloque de punteros, los cuales apuntan a bloques de datos del archivo) **Un puntero de indirección doble (apunta a un bloque de punteros, los cuales apuntan a otros bloques de punteros, estos últimos apuntan a bloques de datos del archivo) **Un puntero de indirección triple (apunta a un bloque de punteros que apuntan a otros bloques de punteros que apuntan a otros bloques de punteros que luego apuntan a bloques de datos del archivo) <div align="center">[[Archivo:Ext2-inode.svg|Estructura]]</div> == Peculiaridades == El trabajar sobre un sistema de ficheros basado en inodos resulta al principio deslumbrante para usuarios que no están habituados a él: * Si múltiples nombres están enlazados, o sea, asociados a un mismo inodo (lo que se denomina «[[enlace duro|enlaces duros]]» o simplemente enlaces), por lo que todos los nombres son equivalentes entre sí. El que fue creado en primer lugar no tiene ningún estatus especial, al contrario de lo que ocurre con los [[enlace simbólico|enlaces simbólicos]] o con los denominados «[[acceso directo|accesos directos]]», en que todos dependen del nombre original. * Un inodo puede incluso no tener ningún enlace. Tal archivo sería eliminado del disco y sus recursos liberados para ser reasignados (el proceso normal de suprimir un archivo); pero, si algún proceso estuviera accediendo al archivo, puede seguir haciéndolo, y el archivo sólo será finalmente suprimido cuando la última referencia a él quede completamente cerrada. Esto afecta también a los archivos ejecutables, que de forma implícita permanecen abiertos por los procesos que los ejecutan. Por esta razón, cuando se actualiza un programa, se recomienda suprimir primero el viejo [[ejecutable]] y crear a continuación un nuevo archivo y un nuevo inodo para la versión actualizada, de modo que si la versión anterior estaba en ejecución en ese instante, pueda mantenerse temporalmente el archivo y continuar funcionando sin problemas. * Tradicionalmente, no era posible identificar un archivo abierto con el nombre de archivo que fue utilizado para abrirlo. El sistema operativo convertiría inmediatamente el nombre a un número de inodo y prescindiría del nombre. Eso implica que funciones de librería como <code>getcwd()</code> y del <code>getwd()</code> tendrían que buscar en los archivos de tipo directorio hasta localizar el número de inodo. Los sistemas [[System V|SVR4]] y [[GNU/Linux|Linux]] conservan información adicional para evitar esta dificultad. * Tradicionalmente, era posible hacer enlaces (enlaces duros) a directorios. Esto hacía que la estructura de directorios fuera un [[grafo|grafo dirigido]] en vez de un [[Árbol (estructura de datos)|árbol]]. Se podía dar la paradoja de que un directorio fuera su propio padre. Los sistemas modernos prohíben generalmente este estado confuso. === Ejemplos prácticos === [[Archivo:Diferencias entre enlaces duros y enlaces simbólicos en ambiente GNU Linux.jpg|thumb|left|Diferencias entre enlaces duros y enlaces simbólicos en ambiente GNU Linux utilizando los [[Comandos Bash|comandos]] <code>echo</code>, <code>ln</code> y <code>ls</code>.]] [[Archivo:Ejemplo de enlace simbólico roto en UNIX y GNU Linux.jpg|thumb|left|La gráfica ilustra la creación de un fichero por medio del comando <code>echo</code>, luego la creación de un enlace permanente y a continuación un enlace simbólico. El modificar el nombre del archivo original no afecta al enlace permanente ni al valor de los inodos pero el enlace simbólico resulta roto.]] Para ilustrar los conceptos de inodo y enlaces, tanto normales como simbólicos, en la figura se muestra la creación de un [[archivo de texto]] de 4 [[byte]]s (3 caracteres más el carácter de finalización de fichero) con el [[Comandos Bash|comando]] <code>echo</code>. Luego se crea un enlace duro con el comando <code>ln</code> y además un enlace simbólico por medio del parámetro <code>-s</code>. Nótese que en el primer enlace creado el valor del inodo no varía mientras que para el segundo enlace sí. Además, al agregar datos al archivo de texto su tamaño varía mas sin embargo en el enlace simbólico no, pues su tamaño es siempre el mismo y viene dado por la cantidad de caracteres en el nombre enlazado («archivo1.txt» son doce caracteres, doce bytes). En el siguiente ejemplo gráfico se puede corroborar la anterior afirmación. == Programación == Sistemas de archivos actuales, como por ejemplo [[ReiserFS]], pueden evitar tener una [[tabla de inodos]] en el sentido tradicional, pero deben implementar mecanismos que reproduzcan externamente toda la funcionalidad de los inodos. Los datos sobre el archivo contenidos en el inodo se pueden consultar desde un [[programa (computación)|programa]] por medio de la [[llamada al sistema]] <code>stat</code>. En sistemas Linux la información queda recogida en una estructura de [[lenguaje de programación C|C]] del tipo <code>struct inode</code>, definido en el archivo de cabecera <tt>linux/fs.h</tt>. Los sistemas derivados de [[BSD]] utilizan la denominación <code>vnode</code>; con la «v» en referencia al sistema de ficheros virtual que el [[Núcleo (informática)|núcleo]] del sistema operativo mantiene en memoria. == Consideraciones prácticas == En muchos programas empleados por los administradores de sistemas UNIX se trabaja con los números de inodo para identificar archivos; es el caso de <code>fsck</code> o <code>pfiles</code>. Se presenta así la necesidad de traducir números de inodo en rutas y nombres de archivo y viceversa. Esto se consigue con la utilidad <code>find</code> empleando la opción <code>-inum</code> o con el propio <code>ls</code> y la opción apropiada que en muchas plataformas es <code>-i</code>. == Referencias == {{listaref}} == Enlaces externos == * [https://barrabinbarrabash.com/como-limpiar-memoria-cache-inodes-y-dentries/ Como limpiar memoria cache, inodes y dentries] * {{Cita web |url=http://www.cse.unsw.edu.au/~neilb/oss/linux-commentary/vfs-7.html |título=The Linux Virtual File-system Layer: Inodes and Operations] - Inodos en [[Linux]] (en inglés) |fechaacceso=1 de marzo de 2006 |urlarchivo=https://web.archive.org/web/20081219051931/http://www.cse.unsw.edu.au/~neilb/oss/linux-commentary/vfs-7.html |fechaarchivo=19 de diciembre de 2008 }} {{Control de autoridades}} [[Categoría:Sistemas de archivos]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
Inodo
»
Añadir idiomas
Añadir tema