¿Es posible montar un archivo loopback como de solo lectura y redirigir todas las escrituras a la RAM?
fuente
¿Es posible montar un archivo loopback como de solo lectura y redirigir todas las escrituras a la RAM?
Es posible usar una capa de sistema de archivos de unión como aufs .
Manifestación:
# dd if=/dev/zero of=/tmp/image bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.0028428 s, 369 MB/s
# mke2fs /tmp/image
...
# mkdir /tmp/imgmnt
# mount -o loop /tmp/image /tmp/imgmnt
# echo hello > /tmp/imgmnt/hello.txt
# umount /tmp/imgmnt
# mount -o loop,ro /tmp/image /tmp/imgmnt
# echo blah > /tmp/imgmnt/hello.txt
-su: /tmp/imgmnt/hello.txt: Read-only file system
# mkdir /tmp/rammnt
# mount -t tmpfs -o size=1M none /tmp/rammnt
# mkdir /tmp/combined
# mount -t aufs -o br:/tmp/rammnt:/tmp/imgmnt=ro none /tmp/combined
Esa opción de montaje para crear una nueva "rama" ( br
) apilando /tmp/rammnt
(lectura-escritura) encima de /tmp/imgmnt
(solo lectura). Esta "rama" se hace visible como un sistema de archivos (lectura-escritura) en /tmp/combined
.
(Consulte la página del comando man aufs (5) para obtener todos los detalles).
Ahora todo lo que está hecho, esto es lo que tienes:
# ls /tmp/combined
hello.txt lost+found
# cat /tmp/combined/hello.txt
hello
# echo bye > /tmp/combined/hello.txt
# cat /tmp/combined/hello.txt
bye
# cat imgmnt/hello.txt
hello
# cat rammnt/hello.txt
bye
Por lo tanto, las escrituras "stop" en el tmpfs
sistema de archivos, no intentan propagarse de nuevo al archivo de imagen montado en bucle.
Podría haber utilizado un directorio simple (en un sistema de archivos de lectura / escritura), o posiblemente un directorio debajo /dev/shm
si eso funciona para usted, en lugar de crear un específico tmpfs
para eso.
Esta técnica (o variaciones de la misma) es utilizada por alguna distribución LiveCD. La entrada de Wikipedia aufs enumera algunos.
fstab
el punto de montaje/
? (es decir, por lo que el sistema arranca desde una imagen descartable, más o menos.)/
, creo que estás mejor con un initrd (creo que así es como se hace para livecds). Es posible que pueda hacerlo desde un script de inicio, aunque eso suena complicado.Actualizar:
Parece que hay otras 2 formas más simples de hacer esto en Ubuntu (al menos las versiones posteriores):
sudo apt-get install overlayroot
seguido de estableceroverlayroot="tmpfs:swap=1,recurse=0"
en/etc/overlayroot.local.conf
.sudo apt-get install fsprotect
seguido de pasarfsprotect
como un parámetro del núcleo¡Finalmente descubrí cómo hacer esto con el sistema de archivos raíz (en Ubuntu 11.04)!
Los pasos para hacer un sistema arrancable son simples. Utilicé esta guía en combinación con esta guía y un montón de búsquedas web para descubrir cómo hacer que funcione correctamente, sin errores.
Resumen:
Correr:
Guarda esto en
/etc/initramfs-tools/scripts/init-bottom/__rootaufs
. No creo que el nombre realmente importe, pero el principio__
podría usarse para hacer pedidos, por lo que si cambia el nombre, es posible que desee mantener los guiones bajos. (Esta es una copia de este archivo ).En
/etc/default/grub
, encuentre la línea que comienza conGRUB_CMDLINE_LINUX_DEFAULT
, y dentro de las comillas que siguen, agregue el parámetroaufs=tmpfs
.Bonificación: si necesita desactivar ocasionalmente la redirección temporalmente, simplemente elimine este argumento de la lista de parámetros del kernel. Probablemente pueda hacer esto manteniendo presionada la tecla Mayús cuando el sistema se está iniciando, para mostrar el menú GRUB; luego presione e para editar los parámetros, y simplemente borre el
aufs=...
parámetro de la lista.Agregue estas líneas a
/etc/sysctl.conf
. ( Advertencia : riesgo potencial de seguridad).Ejecute estas líneas:
Si todo salió bien, cuando reinicies, lo harás en un sistema de archivos temporal. La parte de RAM estará en
/rw
, y la imagen del disco estará en/ro
, pero por supuesto será de solo lectura.Sin embargo, si ha iniciado en un sistema temporal pero necesita hacer un cambio permanente, puede volver a montar el
/ro
sistema de archivos diciendopara que se pueda escribir, y luego puede realizar las modificaciones necesarias en ese directorio.
fuente
Sí, por unionfs, ver unionfs.filesystems.org . Ha montado el primer sistema de archivos de solo lectura y como segundo sistema de archivos RAM de lectura y escritura a través de unionfs.
En Ubuntu puede encontrar el paquete unionfs-fuse, que es otra implementación de las mismas cosas, pero en el espacio del usuario, no como un módulo del núcleo.
fuente
También puede hacer esto en el nivel del dispositivo, sin uniones como aufs. Ver dispositivo-mapper
snapshot-origin
.fuente