Up: Sistemas de archivos   [Contents][Index]


12.3.1 Sistema de archivos Btrfs

El sistema de archivos Btrfs tiene características especiales, como los subvolúmenes, que merecen una explicación más detallada. La siguiente sección intenta cubrir usos básicos así como usos complejos del sistema de archivos Btrfs con el sistema Guix.

Con el uso más simple se puede describir un sistema de archivos Btrfs puede describirse, por ejemplo, del siguiente modo:

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

El ejemplo siguiente es más complejo, ya que usa un subvolumen de Btrfs, llamado rootfs. El sistema de archivos tiene la etiqueta mi-btrfs, y se encuentra en un dispositivo cifrado (de aquí la dependencia de mapped-devices):

(file-system
  (device (file-system-label "mi-btrfs"))
  (mount-point "/")
  (type "btrfs")
  (options "subvol=rootfs")
  (dependencies mapped-devices))

Algunos cargadores de arranque, por ejemplo GRUB, únicamente montan una partición Btrfs en su nivel superior durante los momentos iniciales del arranque, y dependen de que su configuración haga referencia a la ruta correcta del subvolumen dentro de dicho nivel superior. Los cargadores de arranque que operan de este modo producen habitualmente su configuración en un sistema en ejecución donde las particiones Btrfs ya se encuentran montadas y donde la información de subvolúmenes está disponible. Como un ejemplo, grub-mkconfig, la herramienta de generación de configuración que viene con GRUB, lee /proc/self/mountinfo para determinar la ruta desde el nivel superior de un subvolumen.

El sistema Guix produce una configuración para el cargador de arranque usando la configuración del sistema operativo como su única entrada; por lo tanto es necesario extraer la información del subvolumen en el que se encuentra /gnu/store (en caso de estar en alguno) de la configuración del sistema operativo. Para ilustrar esta situación mejor, considere un subvolumen que se llama ’rootfs’ el cual contiene el sistema de archivos raiz. En esta situación, el cargador de arranque GRUB únicamente vería el nivel superior de la partición de raíz de Btrfs, por ejemplo:

/                   (nivel superior)
├── rootfs          (directorio del subvolumen)
    ├── gnu         (directorio normal)
        ├── store   (directorio normal)
[...]

Por lo tanto, el nombre del subvolumen debe añadirse al inicio de la ruta al núcleo, los binarios de initrd y otros archivos a los que haga referencia la configuración de GRUB en /gnu/store, para que puedan encontrarse en los momentos iniciales del arranque.

El siguiente ejemplo muestra una jerarquía anidada de subvolúmenes y directorios:

/                   (nivel superior)
├── rootfs          (subvolumen)
    ├── gnu         (directorio normal)
        ├── store   (subvolumen)
[...]

Este escenario funcionaría sin montar el subvolumen ’store’. Montar ’rootfs’ es suficiente, puesto que el nombre del subvolumen corresponde con el punto de montaje deseado en la jerarquía del sistema de archivos. Alternativamente se puede hacer referencia el subvolumen ’store’ proporcionando tanto el valor /rootfs/gnu/store como el valor rootfs/gnu/store a la opción subvol.

Por último, un ejemplo más elaborado de subvolúmenes anidados:

/                           (nivel superior)
├── root-snapshots          (subvolumen)
    ├── root-current        (subvolumen)
        ├── guix-store      (subvolumen)
[...]

Aquí, el subvolumen ’guix-store’ no corresponde con el punto de montaje deseado, por lo que es necesario montarlo. El subvolumen debe ser especificado completamente proporcionando su nombre de archivo a la opción subvol. Para ilustrar este ejemplo, el subvolumen ’guix-store’ puede montarse en /gnu/store usando una declaración de sistema de archivos como la siguiente:

(file-system
  (device (file-system-label "mi-otro-btrfs"))
  (mount-point "/gnu/store")
  (type "btrfs")
  (options "subvol=root-snapshots/root-current/guix-store,\
compress-force=zstd,space_cache=v2"))

Up: Sistemas de archivos   [Contents][Index]