Esta respuesta y este mensaje de correo electrónico indican que algo llamado "OverlayFS" está disponible en Ubuntu 11.10 y reemplazará a los aufs en Ubuntu 12.04.
¿Como lo uso? ¿Dónde está su documentación?
Esta respuesta y este mensaje de correo electrónico indican que algo llamado "OverlayFS" está disponible en Ubuntu 11.10 y reemplazará a los aufs en Ubuntu 12.04.
¿Como lo uso? ¿Dónde está su documentación?
Respuestas:
Editar: desde que escribimos esta respuesta, algunas cosas han cambiado en overlayfs, a saber, la adición de un parámetro requerido workdir
, consulte la respuesta de totti a continuación para obtener una descripción detallada de este nuevo parámetro.
Finalmente logré encontrarlo. Encontré referencias a él en la fuente del kernel, pero por alguna razón no aparece en el árbol git en kernel.org. ¡Pero! Si extrae la fuente del núcleo de Ubuntu de esta manera: apt-get source linux-image-3.0.0-16-generic
puede encontrarla en linux-3.0.0/Documentation/overlayfs.txt
. También está disponible en el paquete linux-doc en /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz
.
Como la documentación de ayuda real es más un "cómo funciona" en lugar de un "cómo montarlo", aquí hay un breve resumen (hay un ejemplo en la documentación del núcleo):
mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]
Donde [opciones de montaje] pueden ser:
Una cosa que me confundió al principio, por lo que probablemente debería aclarar, es que montar un overlayfs en realidad no monta un sistema de archivos. Estaba tratando de montar un sistema de archivos squashfs usando un montaje overlayfs, pero no es así como funciona. Primero debe montar el sistema de archivos (en mi caso squashfs) en un directorio arbitrario, luego usar overlayfs para fusionar el punto de montaje (un directorio) y otro directorio en un directorio terciario (el punto de montaje overlayfs) (editar: este directorio "terciario" en realidad puede ser el directorio upperdir =). El directorio terciario es donde verá los sistemas de archivos fusionados (o árboles de directorios, es flexible).
He estado trabajando en un disco de arranque híbrido de Ubuntu donde el sistema base de Ubuntu existe como filesystem.squashfs y tengo archivos llamados ubuntu.overlay kubuntu.overlay xubuntu.overlay y lubuntu.overlay. Los archivos .overlay son instalaciones básicas de dichos sistemas con los contenidos de filesystem.squashfs podados (para ahorrar espacio). Luego modifiqué los scripts de inicio para superponer el archivo .overlay de la distribución correcta (desde un parámetro de arranque) usando overlayfs y las opciones anteriores y ¡funciona de maravilla!
Estas son las líneas que utilicé en mis scripts de inicio (una vez que se traducen todas las variables):
mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /
Tenga en cuenta que filesystem.squashfs anterior es un directorio creado por casper, no un archivo.
Estas tres declaraciones crean un /overlay
directorio, montan un sistema de archivos squashfs en el /overlay
directorio y luego usan OverlayFS para fusionar esencialmente el contenido de /overlay
over /
.
En el proceso de reconstrucción de mi USB en vivo para cada versión, uso OverlayFS para ahorrar un montón de tiempo. Comienzo con un directorio llamado ubuntu-base que contiene el contenido de la imagen ubuntu-core, que es la instalación más básica. Luego crearé directorios llamados ubuntu, kubuntu, lubuntu y xubuntu.
Luego, uso OverlayFS para hacer que los archivos de ubuntu-base aparezcan en los directorios individuales. Yo usaría algo como esto:
mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu
Esto hace que los archivos de ubuntu-base aparezcan en la carpeta kubuntu. Entonces, puedo chroot
ir a la carpeta kubuntu y hacer algo como apt-get install kubuntu-desktop
. Cualquier cambio que se realice mientras está en este montaje OverlayFS permanecerá en el directorio superior, en este caso la carpeta kubuntu. Luego, una vez que desmonte el OverlayFS, monte los archivos que realmente existen en ubuntu-base pero que están "reflejados" en la carpeta kubuntu desaparecen a menos que hayan sido cambiados. Esto evita que tenga que tener múltiples copias de los archivos en ubuntu-base y al mismo tiempo poder usarlas como si existieran físicamente en cada ubicación.
overlay
no conoverlayfs
Desde https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :
Superior e inferior
Un sistema de archivos superpuesto combina dos sistemas de archivos: un sistema de archivos 'superior' y un sistema de archivos 'inferior'. Cuando existe un nombre en ambos sistemas de archivos, el objeto en el sistema de archivos 'superior' es visible mientras que el objeto en el sistema de archivos 'inferior' está oculto o, en el caso de directorios, fusionado con el objeto 'superior'.
Sería más correcto referirse a un 'árbol de directorios' superior e inferior en lugar de a un 'sistema de archivos', ya que es bastante posible que ambos árboles de directorios estén en el mismo sistema de archivos y no es necesario que se proporcione la raíz de un sistema de archivos para ya sea superior o inferior.
El sistema de archivos inferior puede ser cualquier sistema de archivos compatible con Linux y no es necesario que se pueda escribir. El sistema de archivos inferior puede incluso ser otro overlayfs. El sistema de archivos superior normalmente se podrá escribir y, si lo es, debe admitir la creación de atributos extendidos. * Confiables y debe proporcionar d_type válido en las respuestas readdir, por lo que NFS no es adecuado.
Una superposición de solo lectura de dos sistemas de archivos de solo lectura puede usar cualquier tipo de sistema de archivos.
Directorios
La superposición implica principalmente directorios. Si un nombre dado aparece en los sistemas de archivos superior e inferior y hace referencia a un no directorio en cualquiera de ellos, entonces el objeto inferior está oculto; el nombre se refiere solo al objeto superior.
Donde los objetos superiores e inferiores son directorios, se forma un directorio combinado.
En el momento del montaje, los dos directorios dados como opciones de montaje "lowerdir" y "upperdir" se combinan en un directorio combinado:
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
El "workdir" debe ser un directorio vacío en el mismo sistema de archivos que upperdir.
Luego, cada vez que se solicita una búsqueda en dicho directorio combinado, la búsqueda se realiza en cada directorio real y el resultado combinado se almacena en caché en la dentry que pertenece al sistema de archivos de superposición. Si ambas búsquedas reales encuentran directorios, ambos se almacenan y se crea un directorio combinado; de lo contrario, solo se almacena uno: el superior si existe, y el inferior.
Solo se fusionan las listas de nombres de directorios. Otro contenido, como metadatos y atributos extendidos, se informa solo para el directorio superior. Estos atributos del directorio inferior están ocultos.
He extendido estos artículos para incluir un Script para overlayfs que configura una raíz fs de solo lectura.
Espero eso ayude.
Ejemplo ejecutable mínimo
# Create the filesystems.
dd if=/dev/zero of=lower.ext4 bs=1024 count=102400
mkfs -t ext4 lower.ext4
cp lower.ext4 upper.ext4
mkdir lower upper overlay
sudo mount lower.ext4 lower
sudo mount upper.ext4 upper
sudo chown "$USER:$USER" lower upper
printf lower-content > lower/lower-file
# Upper and work must be on the same filesystem.
mkdir upper/upper upper/work
printf upper-content > upper/upper/upper-file
# Work must be empty. E.g. this would be bad:
#printf work-content > upper/work/work-file
# Make the lower readonly to show that that is possible:
# writes actually end up on the upper filesystem.
sudo mount -o remount,ro lower.ext4 lower
# Create the overlay mount.
sudo mount \
-t overlay \
-o lowerdir=lower,upperdir=upper/upper,workdir=upper/work \
none \
overlay \
;
# Interact with the mount.
printf 'overlay-content' > overlay/overlay-file
ls lower upper/upper upper/work overlay
# Write to underlying directories while mounted
# gives undefined behaviour.
#printf lower-content-2 > lower/lower-file-2
#printf upper-content-2 > upper/upper-file-2
# Unmount the overlay and observe state.
sudo umount overlay
ls lower upper/upper upper/work
# Cleanup.
sudo umount upper lower
Salida del primero ls
con el soporte:
lower:
lost+found lower-file
overlay:
lost+found lower-file overlay-file upper-file
upper/upper:
overlay-file upper-file
upper/work:
work
Salida del segundo ls
sin el soporte:
lower:
lost+found lower-file
upper/upper:
overlay-file upper-file
upper/work:
work
Interpretación:
work/
directorio) que no deberíamos preocuparnosEjemplo adaptado de: Ejemplo de uso de OverlayFS
Aquí hay un ejemplo más complejo con múltiples capas inferiores: Overlayfs recarga con múltiples capas (migración lejos de aufs)
Probado en Ubuntu 18.04, kernel de Linux 4.15.0.
mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point
. Más allá de eso no tengo ni idea. Estoy jugando con él en un sistema en vivo, pero aún no he logrado que funcione. Desearía poder saber exactamente qué significan "upperdir" y "lowerdir". No he encontrado nada