Come creare un sistema live su unità USB con modifiche persistenti su disco / hdd


10

Stavo cercando di installare Ubuntu live su un'unità USB con modifiche persistenti. Tuttavia, volevo scrivere le modifiche su HDD anziché su USB per vari motivi (Prestazioni, Spazio).

Ho scoperto che le modifiche sono gestite all'interno di un file con un file system ext3 montato dal sistema (casper-rw). Ma sembra essere rilevato automaticamente sull'unità flash all'avvio.

Come posso creare un nuovo file casper-rw su HDD e reindirizzare il sistema live di Ubuntu sull'unità USB su HDD?

modifica 14/07/2015:

Grazie per le risposte finora. Sono molto interessanti e aiutano molto a comprendere meglio le meccaniche della "funzione di salvataggio persistente del sistema live" e mostrano buoni approcci per risolvere il problema. Purtroppo stavo cercando di superare alcune limitazioni che avevo in mente quando ponevo la domanda relativa all'accesso al sistema host e / o all'accesso al nuovo hardware che non avevo indicato chiaramente (mi dispiace per quello).

Se il partizionamento è un'opzione, penso che la risposta dichiarata qui sia molto buona, dal momento che richiede solo di creare una nuova partizione, etichettarla casper-rw e il gioco è fatto (funziona benissimo, l'ho testato).

Se l'acquisto di nuovo hardware è un'opzione, vengono in mente unità flash USB 3.0 (MLC o SLC), HDD portatili, eSATA e altre opzioni che offrono prestazioni molto migliori rispetto a un'unità flash USB 2.0 media.

Quindi mi chiedevo se c'è un modo per creare semplicemente un file casper-rw invece di una partizione su un disco con accesso limitato a (o copiare / collegare quello sull'unità flash).

In questo modo sarebbe semplice copiare nuovamente il file casper-rw sull'unità flash e riutilizzarlo da lì o spostarlo su un altro computer, garantendo grande flessibilità, modifiche minime all'HDD e facile rimozione delle modifiche apportate a il sistema.


Non sono sicuro se questa è un'opzione, ma se hai solo bisogno di salvare i dati, potresti anche montare una partizione HDD da qualche parte sull'albero del tuo file system live ... In questo modo però hai solo cartelle specifiche sul disco.
Byte Commander

@ByteCommander grazie per il tuo commento. Sfortunatamente il partizionamento dell'HDD non è un'opzione per me e vorrei che tutto fosse il più compatto possibile in modo da poter eliminare i dati in modo rapido e semplice, quindi un singolo file su HDD sarebbe l'ideale.
LS

Dovrebbe essere possibile montare un file contenente un'immagine di un file system (ad es. .Iso o .img, probabilmente anche di più). Sfortunatamente non l'ho mai fatto e non posso dirti come farlo ...
Byte Commander

Come fai a sapere che non funziona? Il tuo file si chiama casper-rw ? È alla radice della tua partizione ? L'ho fatto (usando invece la persistenza su HDD con una partizione etichettata casper-rw) e non ricordo alcun passaggio aggiuntivo necessario.
solsTiCe

La tua ultima modifica rende la tua domanda troppo specifica per essere di largo uso (che la mia risposta è ...) Non è impossibile, ma significherebbe creare script e regole udev per [smontare] - [sincronizzare su HDD] - [montare] al momento dell'inserimento e [sincronizza con HDD] su smontaggio, ma è un sacco di lavoro e non adatto a un sito di domande e risposte come questo.
Fabby,

Risposte:


4

È possibile inserire facilmente il file system scrivibile (nel file casper-rw) per un supporto live su un disco rigido. Il limite è che il file casper-rw deve andare su una partizione FAT. Le macchine più recenti (UEFI) hanno tutte una partizione EFI FAT, ma in genere è troppo piccola per contenere un file casper-rw 1G-4G. Su un'altra partizione FAT abbastanza grande, puoi creare directory, ognuna contenente un file casper-rw per possibilmente diversi media live. Supponiamo che sda11 sia 10G e abbia un filesystem FAT 10G, montato su / mnt / sda11, sul quale sono presenti directory / A, / B, / C, / D e / E. Supponiamo che useremo / A per i nostri media persistenti, mettendo lì un casper-rw.

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

Prendi i tuoi media live creati con persistenza e modifica il file /boot/grub/grub.cfg e il file /syslinux/txt.cfg, aggiungendo dopo la parola "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
...

Questo è tutto. Non è nemmeno necessario rinominare / rimuovere il file casper-rw sul supporto USB.


Se c'è spazio sul supporto USB, puoi persino copiare il casper-rw del disco rigido su USB e portare con te le modifiche.


Il percorso persistente non consente alcun riferimento esplicito al disco, quindi dovrebbe essere univoco in tutte le partizioni FAT. Testato con 1 o 2 partizioni FAT (una delle quali è la partizione EFI). Non funzionerà su un filesystem ext2 o ntfs invece di FAT. Se aggiungi anche la parola "toram" sulla stessa riga di "persistente", il tuo filesystem compresso sulla USB lenta verrà copiato in RAM e fornirà prestazioni molto migliori, tuttavia sembra che ci sia un problema di spegnimento, con la partizione FAT non essere smontato in modo pulito (che non sembra causare alcun problema ma ...)


Grazie. Questo rende le cose molto più chiare. Presumo che nello stato di avvio ntfs non possa essere riconosciuto (giusto?) Rendendo così impossibile avere un casper-rw su una partizione ntfs. Quindi penso che andrò con la partizione ext4 etichettata casper-rw o proverò qualche "toram" o roba ramdrive.
LS

Come si modifica grub.cfgo syslinux.txtdato che è possibile montare solo i media live in sola lettura in quanto è un iso ??
solsTiCe

Quanto sopra ha usato l'ISO per creare un USB live media, su cui i file sono scrivibili. L'avvio diretto dell'ISO (ad esempio da un disco rigido) utilizza un grub completamente separato (quello sul disco rigido) i cui file sono modificabili, in questo caso non si utilizzano affatto i meccanismi di avvio dell'ISO.
ubfan1,

7

È estremamente semplice se si utilizza la seguente configurazione:

  1. Installa Ubuntu su una chiavetta USB SLC (preferibilmente USB 3.0 se l'hardware lo supporta) senza alcuna roba da casper (solo una normale installazione, trattando la chiavetta USB come un SSD).

    Perché? Gli SLC sono due volte più costosi degli MLC ma sono 4 volte più veloci e durano 8 * in più! Quindi sono davvero piccoli SSD su un bastone!

  2. Ottimizza il sistema e tratta la chiavetta USB come un piccolo SSD, quindi:

    Nel tuo /etc/sysctl.confaggiungi:

    # 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
    

    Nel tuo /etc/fstabaggiungi i parametri in grassetto alla tua linea USB di avvio. (Probabilmente sarà sdco sdd. Il seguente è un esempio, usa l'UID se possibile)

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

  3. creare 2 utenti: un utente amministratore che ha la sua directory home sulla chiavetta USB ma ha pochissimi file e un utente normale che avrà la sua directory home sull'HDD.

  4. Solo ora inserisci l'HDD e aggiungi le informazioni necessarie sull'HDD per fstabmontare automaticamente l'HDD e aggiungere i seguenti parametri:

    nobootwait,nofail

    per consentire l'avvio anche quando l'HDD non è presente (in tal caso, solo l'utente admin avrà accesso, non l'utente normale)

  5. Ora accedi come utente amministratore e sposta la home directory per l'utente normale dalla chiavetta USB all'HDD:

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

Se tutto va bene:

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

Fatto! :-)

Per la cronaca: ho una chiavetta MLC USB 2.0 da 16 GB in questo modo (più che sufficiente per il mio caso d'uso e non troppo costosa e ora ha circa 5 anni e funziona ancora!)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.