Cómo crear un sistema en vivo en una unidad USB con cambios persistentes en el disco / disco duro

10

Intenté instalar Ubuntu en vivo en una unidad USB con cambios persistentes. Sin embargo, quería escribir los cambios en HDD en lugar de USB por varias razones (rendimiento, espacio).

Descubrí que los cambios se manejan dentro de un archivo con un sistema de archivos ext3 montado por el sistema (casper-rw). Pero parece ser detectado automáticamente en la unidad flash al inicio.

¿Cómo puedo crear un nuevo archivo casper-rw en HDD y redirigir el sistema en vivo de Ubuntu en la unidad USB a HDD?

editar 2015-07-14:

Gracias por las respuestas hasta ahora. Son muy interesantes y ayudan mucho a comprender mejor la mecánica de la "función de guardado persistente del sistema en vivo", y muestran buenos enfoques para resolver el problema. Desafortunadamente, estaba tratando de superar algunas limitaciones que tenía en mente al hacer la pregunta sobre el acceso al sistema host y / o el acceso al nuevo hardware que no dije claramente (lo siento).

Si la partición es una opción, creo que la respuesta indicada aquí es muy buena, ya que solo requiere que crees una nueva partición, la etiquetes casper-rw y listo (el trabajo es excelente, lo probé).

Si comprar un nuevo hardware es una opción, viene a la mente la unidad flash usb3.0 (MLC o SLC), los discos duros portátiles, eSATA y otras opciones que tienen un rendimiento mucho mejor que una unidad flash USB2.0 promedio.

Entonces, me preguntaba si hay una manera de crear un archivo casper-rw en lugar de una partición en un disco con acceso limitado (o copiar / vincular el que está en la unidad flash).

De esta manera, sería fácil simplemente copiar el archivo casper-rw a la unidad flash y usarlo desde allí nuevamente o moverlo a otra computadora, otorgando una gran flexibilidad, cambios mínimos en el HDD y fácil eliminación de los cambios realizados en el sistema.

LS
fuente
No estoy seguro de si esta es una opción, pero si solo necesita guardar datos, también podría simplemente montar una partición HDD en algún lugar de su árbol del sistema de archivos en vivo ... De esa manera, solo tiene carpetas específicas ubicadas en el disco.
Byte Commander
@ByteCommander gracias por tu comentario. Desafortunadamente, particionar el HDD no es una opción para mí y me gustaría que todo sea lo más compacto posible para poder eliminar los datos de manera rápida y simple, por lo que un solo archivo en HDD sería ideal.
LS
También debería ser posible montar un archivo que contenga una imagen de un sistema de archivos (por ejemplo, .iso o .img, probablemente más). Lamentablemente, nunca hice esto y no puedo decirte cómo hacerlo ...
Byte Commander
¿Cómo sabes que esto no está funcionando? ¿Su archivo se llama casper-rw ? ¿Está en la raíz de su partición ? Lo he hecho (usando la persistencia en HDD con una partición etiquetada casper-rw) y no recuerdo ningún paso adicional necesario.
solSTiCe
Su última edición hace que su pregunta sea demasiado específica para ser de uso amplio (que es mi respuesta ...) No es imposible, pero significaría crear scripts y reglas udev para [desmontar] - [sincronizar con HDD] - [montar] en la inserción y [sincronizar con HDD] al desmontar, pero eso es un montón de trabajo y realmente no es adecuado para un sitio de preguntas y respuestas como este.
Fabby

Respuestas:

4

Puede colocar fácilmente el sistema de archivos grabable (en el archivo casper-rw) para un medio en vivo en un disco duro. La limitación es que el archivo casper-rw debe ir en una partición FAT. Las máquinas más nuevas (UEFI) tienen una partición FAT EFI, pero generalmente es demasiado pequeña para contener un archivo casper-rw 1G-4G. En otra partición FAT lo suficientemente grande, puede crear directorios, cada uno con un archivo casper-rw para posiblemente diferentes medios en vivo. Supongamos que sda11 es 10G y tiene un sistema de archivos FAT 10G, montado en / mnt / sda11, en el que hay directorios / A, / B, / C, / D y / E. Supongamos que usaremos / A para nuestros medios persistentes, colocando un casper-rw allí.

cd /mnt/sda11/A
dd if=/dev/zero of=casper-rw bs=1M  count=4096
mkfs.ext4 -F -O^has_journal -L casper-rw casper-rw

Tome sus medios en vivo creados con persistencia y edite el archivo /boot/grub/grub.cfg y el archivo /syslinux/txt.cfg, agregando después de la palabra "persistente"

"persistent-path=/A"

/boot/grub/grub.cfg ...

menuentry "Try Ubuntu without installing" {
    set gfxpayload=keep
    linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- cdrom-detect/try-usb=true noprompt persistent persistent-path=/A
    initrd  /casper/initrd.lz
}

/syslinux/txt.cfg

default live
label live
menu label ^Try Ubuntu without installing
kernel /casper/vmlinuz.efi
append noprompt cdrom-detect/try-usb=true persistent persistent-path=/A file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash ---
label live-install
...

Eso es. Ni siquiera necesita cambiar el nombre / eliminar el archivo casper-rw en el dispositivo USB.


Si hay espacio en los medios USB, incluso puede copiar el casper-rw del disco duro de nuevo al USB y llevar sus cambios con usted.


La ruta persistente no permite ninguna referencia explícita de disco, por lo que debe ser única en todas las particiones FAT. Probado con 1 o 2 particiones FAT (una es la partición EFI). No funcionará en un sistema de archivos ext2 o ntfs en lugar de FAT. Si también agrega la palabra "toram" en la misma línea que "persistente", su sistema de archivos comprimido en el USB lento se copiará en ram y dará un rendimiento mucho mejor, sin embargo, parece haber un problema de apagado, con la partición FAT no estar limpiamente desmontado (lo que no parece causar ningún problema pero ...)

ubfan1
fuente
Gracias. Eso hace las cosas mucho más claras. Supongo que en el estado de arranque no se puede reconocer ntfs (¿verdad?) Por lo que es imposible tener un casper-rw en una partición ntfs. Así que creo que iré con la partición ext4 etiquetada casper-rw o probaré algunas cosas de "toram" o ramdrive.
LS
¿Cómo se modifica grub.cfgo syslinux.txtdado que solo se puede montar la lectura de medios en vivo solo porque es una iso?
solSTiCe
Lo anterior utilizó el ISO para crear un USB de medios en vivo, en el que los archivos son grabables. Arrancar el ISO directamente (desde un disco duro, por ejemplo) usa un grub completamente separado (el que está en el disco duro) cuyos archivos son editables, en este caso no usa los mecanismos de arranque del ISO.
ubfan1
7

Eso es extremadamente fácil si usa la siguiente configuración:

  1. Instale Ubuntu en una memoria USB SLC (se prefiere USB 3.0 si su hardware lo admite) sin ninguno de los elementos casper (solo una instalación normal, tratando la memoria USB como un SSD).

    ¿Por qué? ¡Los SLC son dos veces más caros que los MLC, pero son 4 veces más rápidos y duran 8 * más! ¡Así que realmente son pequeños SSD en un palo!

  2. Optimice el sistema y trate la memoria USB como un pequeño SSD, por lo tanto:

    En tu /etc/sysctl.confcomplemento:

    # Fabby: change the "swappiness" to 10 to prevent swapping as much as possible
    # to not wear out the USB stick as the Ubuntu default is optimized for a server.
    # 10 to balance with vfs_cache_pressure
    vm.swappiness = 10
    
    # Fabby: Lower vfs_cache_pressure to 75% 
    # (once cached, probably not immediately needed any more)
    #
    # This percentage value controls the tendency of the kernel to reclaim
    # the memory which is used for caching of directory and inode objects.
    #
    # At the default value of vfs_cache_pressure=100 the kernel will attempt to
    # reclaim dentries and inodes at a "fair" rate with respect to pagecache and
    # swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
    # to retain dentry and inode caches.
    vm.vfs_cache_pressure = 75
    
    # Fabby: Good to improve sequential reads (stop stuttering in movie play)
    # Can also be implemented per disk using udev rules
    vm.max-readahead=2048
    vm.min-readahead=1024
    

    En su /etc/fstabagregar los parámetros en negrita a su línea de arranque USB. (Probablemente sea sdco sdd. El siguiente es un ejemplo, use UID si es posible)

    /dev/sdc / ext4 defaults,noatime,discard,errors=remount-ro 0 1

  3. cree 2 usuarios: un usuario administrador que tiene su directorio de inicio en la memoria USB pero tiene muy pocos archivos y un usuario normal que tendrá su directorio de inicio en el HDD.

  4. Solo ahora inserte el HDD y agregue la información de HDD necesaria fstabpara montar automáticamente el HDD y agregue los siguientes parámetros:

    nobootwait,nofail

    para permitir el arranque incluso cuando el HDD no está presente (si ese es el caso, solo el usuario administrador tendrá acceso, no el usuario normal)

  5. Ahora inicie sesión como usuario administrador y mueva el directorio de inicio para el usuario normal desde la memoria USB al HDD:

cp --preserve=all /home/NormalUser/* /media/ExternalHDD/NormalUser

Si todo está bien:

rm --recursive --force /home/NormalUser/*
cd /home
ln --symbolic /media/ExternalHDD/NormalUser

¡Hecho! :-)

Para el registro: tengo una memoria USB 2.0 MLC de 16GB como esta (más que suficiente para mi caso de uso y no es demasiado costosa, ¡ahora tiene alrededor de 5 años y aún funciona!)

Fabby
fuente