Up: Sistemas de archivos [Contents][Index]
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]