Next: , Previous: , Up: Configuración del sistema   [Contents][Index]


12.3 Sistemas de archivos

La lista de sistemas de archivos que deben montarse se especifica en el campo file-systems de la declaración del sistema operativo (see Uso de la configuración del sistema). Cada sistema de archivos se declara usando la forma file-system, como en el siguiente ejemplo:

(file-system
  (mount-point "/home")
  (device "/dev/sda3")
  (type "ext4"))

Como es habitual, algunos de los campos son obligatorios—aquellos mostrados en el ejemplo previo—mientras que otros pueden omitirse. Se describen a continuación.

Tipo de datos: file-system

Objetos de este tipo representan los sistemas de archivos a montar. Contienen los siguientes campos:

type

Este campo es una cadena que especifica el tipo de sistema de archivos—por ejemplo, "ext4".

mount-point

Designa la ruta donde el sistema de archivos debe montarse.

device

Nombra la “fuente” del sistema de archivos. Puede ser una de estas tres opciones: una etiqueta de sistema de archivos, un UUID de sistema de archivos o el nombre de un nodo /dev. Las etiquetas y UUID ofrecen una forma de hacer referencia a sistemas de archivos sin codificar su nombre de dispositivo actual32.

Las etiquetas del sistema de archivos se crean mediante el uso del procedimiento file-system-label, los UUID se crean mediante el uso de uuid y los nodos /dev son simples cadenas. A continuación se proporciona un ejemplo de un sistema de archivos al que se hace referencia mediante su etiqueta, como es mostrada por la orden e2label:

(file-system
  (mount-point "/home")
  (type "ext4")
  (device (file-system-label "mi-home")))

Los UUID se convierten dede su representación en forma de cadena (como se muestra con la orden tune2fs -l) mediante el uso de la forma uuid33, como sigue:

(file-system
  (mount-point "/home")
  (type "ext4")
  (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))

Cuando la fuente de un sistema de archivos es un dispositivo traducido (see Dispositivos traducidos), su campo device debe hacer referencia al nombre del dispositivo traducido—por ejemplo, "/dev/mapper/particion-raiz". Esto es necesario para que el sistema sepa que el montaje del sistema de archivos depende del establecimiento de la traducción de dispositivos correspondiente.

flags (predeterminadas: '())

This is a list of symbols denoting mount flags. Recognized flags include read-only, bind-mount, no-dev (disallow access to special files), no-suid (ignore setuid and setgid bits), no-atime (do not update file access times), no-diratime (likewise for directories only), strict-atime (update file access time), lazy-time (only update time on the in-memory version of the file inode), no-exec (disallow program execution), and shared (make the mount shared). See Mount-Unmount-Remount in The GNU C Library Reference Manual, for more information on these flags.

options (predeterminadas: #f)

This is either #f, or a string denoting mount options passed to the file system driver. See Mount-Unmount-Remount in The GNU C Library Reference Manual, for details.

Run man 8 mount for options for various file systems, but beware that what it lists as file-system-independent “mount options” are in fact flags, and belong in the flags field described above.

The file-system-options->alist and alist->file-system-options procedures from (gnu system file-systems) can be used to convert file system options given as an association list to the string representation, and vice-versa.

mount? (predeterminado: #t)

Este valor indica si debe montarse el sistema de archivos automáticamente al iniciar el sistema. Cuando se establece como #f, el sistema de archivos tiene una entrada en /etc/fstab (el cual es leído por la orden mount) pero no se montará automáticamente.

needed-for-boot? (predeterminado: #f)

Este valor lógico indica si el sistema de archivos es necesario para el arranque. Si es verdadero, el sistema de archivos se monta al cargar el disco inicial en RAM (initrd). Este es siempre el caso, por ejemplo, para el sistema de archivos raíz.

check? (predeterminado: #t)

This Boolean indicates whether the file system should be checked for errors before being mounted. How and when this happens can be further adjusted with the following options.

skip-check-if-clean? (default: #t)

When true, this Boolean indicates that a file system check triggered by check? may exit early if the file system is marked as “clean”, meaning that it was previously correctly unmounted and should not contain errors.

Setting this to false will always force a full consistency check when check? is true. This may take a very long time and is not recommended on healthy systems—in fact, it may reduce reliability!

Conversely, some primitive file systems like fat do not keep track of clean shutdowns and will perform a full scan regardless of the value of this option.

repair (default: 'preen)

When check? finds errors, it can (try to) repair them and continue booting. This option controls when and how to do so.

If false, try not to modify the file system at all. Checking certain file systems like jfs may still write to the device to replay the journal. No repairs will be attempted.

If #t, try to repair any errors found and assume “yes” to all questions. This will fix the most errors, but may be risky.

If 'preen, repair only errors that are safe to fix without human interaction. What that means is left up to the developers of each file system and may be equivalent to “none” or “all”.

create-mount-point? (predeterminado: #f)

Cuando es verdadero, el punto de montaje es creado si no existía previamente.

mount-may-fail? (predeterminado: #f)

Cuando tiene valor verdadero indica que el montaje de este sistema de archivos puede fallar pero no debe considerarse un error. Es útil en casos poco habituales; un ejemplo de esto es efivarfs, un sistema de archivos que únicamente puede montarse en sistemas EFI/UEFI.

dependencies (predeterminadas: '())

Una lista de objetos <file-system> o <mapped-device> que representan sistemas de archivos que deben montarse o dispositivos traducidos que se deben abrir antes (y desmontar o cerrar después) que el declarado.

Como ejemplo, considere la siguiente jerarquía de montajes: /sys/fs/cgroup es una dependencia de /sys/fs/cgroup/cpu y /sys/fs/cgroup/memory.

Otro ejemplo es un sistema de archivos que depende de un dispositivo traducido, por ejemplo una partición cifrada (see Dispositivos traducidos).

Procedimiento Scheme: file-system-label str

Este procedimiento devuelve un objeto opaco de etiqueta del sistema de archivos a partir de str, una cadena:

(file-system-label "home")
 #<file-system-label "home">

Las etiquetas del sistema de archivos se usan para hacer referencia a los sistemas de archivos por etiqueta en vez de por nombre de dispositivo. Puede haber encontrado previamente ejemplos en el texto.

El módulo (gnu system file-systems) exporta las siguientes variables útiles.

Variable Scheme: %base-file-systems

Estos son los sistemas de archivos esenciales que se necesitan en sistemas normales, como %pseudo-terminal-file-system y %immutable-store (véase a continuación). Las declaraciones de sistemas operativos deben contener siempre estos al menos.

Variable Scheme: %pseudo-terminal-file-systems

El sistema de archivos que debe montarse como /dev/pts. Permite la creación de pseudoterminales a través de openpty y funciones similares (see Pseudo-Terminals in The GNU C Library Reference Manual). Los pseudoterminales son usados por emuladores de terminales como xterm.

Variable Scheme: %shared-memory-file-system

Este sistema de archivos se monta como /dev/shm y se usa para permitir el uso de memoria compartida entre procesos (see shm_open in The GNU C Library Reference Manual).

Variable Scheme: %immutable-store

Este sistema de archivos crea un montaje enlazado (“bind-mount”) de /gnu/store, permitiendo solo el acceso de lectura para todas las usuarias incluyendo a root. Esto previene modificaciones accidentales por software que se ejecuta como root o por las administradoras del sistema.

El daemon sí es capaz de escribir en el almacén: vuelve a montar /gnu/store en modo lectura-escritura en su propio “espacio de nombres”.

Variable Scheme: %binary-format-file-system

El sistema de archivos binfmt_misc, que permite que el manejo de tipos de archivos ejecutables arbitrarios se delegue al espacio de usuaria. Necesita la carga del módulo del núcleo binfmt.ko.

Variable Scheme: %fuse-control-file-system

El sistema de archivos fusectl, que permite a usuarias sin privilegios montar y desmontar sistemas de archivos de espacio de usuaria FUSE. Necesita la carga del módulo del núcleo fuse.ko.

El módulo (gnu system uuid) proporciona herramientas para tratar con “identificadores únicos” de sistemas de archivos (UUID).

Procedimiento Scheme: uuid str [tipo]

Devuelve un objeto opaco de UUID (identificador único) del tipo (un símbolo) procesando str (una cadena):

(uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")
 #<<uuid> type: dce bv: …>

(uuid "1234-ABCD" 'fat)
 #<<uuid> type: fat bv: …>

tipo puede ser dce, iso9660, fat, ntfs, o uno de sus sinónimos habitualmente usados para estos tipos.

Los UUID son otra forma de hacer referencia de forma inequívoca a sistemas de archivos en la configuración de sistema operativo. Puede haber encontrado previamente ejemplos en el texto.


Footnotes

(32)

Fíjese que, aunque es tentador usa /dev/disk/by-uuid y nombres de dispositivo similares para obtener el mismo resultado, no es lo recomendado: estos nodo especiales de dispositivos se crean por el daemon udev y puede no estar disponible cuando el dispositivo sea montado.

(33)

La forma uuid espera un UUID de 16 bytes como se define en la RFC 4122. Este es el formato de UUID que usan la familia de sistemas de archivos ext2 y otros, pero es diferente de los “UUID” de los sistemas de archivos FAT, por ejemplo.


Next: , Previous: , Up: Configuración del sistema   [Contents][Index]