Montare un filesystem squashfs in lettura-scrittura


45

Ho un'installazione Clonezilla su una chiavetta USB e vorrei apportare alcune modifiche al sistema operativo. In particolare, vorrei inserire uno script eseguibile /usr/sbinper semplificare l'esecuzione del mio comando di backup per rendere i backup meno dolorosi.

Il filesystem principale vive sotto /live/filesystem.squashfsla partizione USB FAT-32.

Come posso montare questa lettura / scrittura sulla mia macchina Linux per poter aggiungere / rimuovere / cambiare file? Sto eseguendo un derivato di Ubuntu 12.04.

Risposte:


38

Come root, copia filesystem.squashfsin qualche directory vuota, ad esempio:

cp /mnt/clonezilla/live/filesystem.squashfs /path/to/workdir
cd /path/to/workdir

Decomprimi il file e spostalo altrove (quindi lo hai ancora come backup):

unsquashfs filesystem.squashfs
mv filesystem.squashfs /path/to/backup/

Entra squashfs-root, aggiungi / modifica secondo i tuoi gusti, quindi ricrea filesystem.squashfs:

cd /path/to/workdir
mksquashfs squashfs-root filesystem.squashfs -b 1024k -comp xz -Xbcj x86 -e boot

copia quello appena creato filesystem.squashfssu quello esistente sul tuo drive USB, ad esempio:

cp filesystem.squashfs /mnt/clonezilla/live/

quindi riavviare e utilizzare LIVE USB.

Nota: i comandi precedenti fanno parte di squashfs-tools.


Funziona benissimo, ma sfortunatamente ricevo un messaggio per tutte le directory root che mi dicono Source directory entry bin already used! - trying bin_1. Abbastanza sicuro, nel mio filesystem di output, ho un /bine un /bin_1, piuttosto che unire la cartella. Qualche idea? Se corro con -noappend,il filesystem semplicemente non funziona.
Naftuli Kay,

1
@TKKocheran - Non sto riscontrando nessuno di questi errori dopo aver aggiunto uno script personalizzato /usr/bine aver reimballato mksquashfs. L'unità USB si avvia bene e posso usare il mio script dalla sessione live. Assicurati di non avere più il vecchio filesystem.squashfsnella stessa directory con il tuo modificato squashfs-rootprima di eseguire mksquashfs.
don_crissti,

@Naftuli: sembra che tu abbia saltato il passaggio "mv ... backup /".
Joachim Wagner,

Questo non funziona sotto la radice (falsa)? Dall'estrazione ottengo l'errorecreate_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
Wilf

@Wilf: non puoi creare file di dispositivo ( squashfs-root/dev/*) come utente normale, hai bisogno dei privilegi di root.
don_crissti,

5

Se il tuo sistema supporta alcuni filesystem uion, come aufs o overlayfs , non devi estrarre il tuo file squashfs originale.

Ad esempio, viene utilizzato overlayfs (un'opzione del kernel per abilitarlo): è possibile montare prima il file squashfs.file su / fm o altrove. Preparare un filesystem scrivibile con 2 directory in esso, dire / to e / temp . preparare un'altra directory / pin scrivibile per i risultati uniti. Montali insieme come overlayfs sul tuo sistema ---

mount -t overlay -o lowerdir=/fm,upperdir=/to,workdir=/temp overlay /fin

Ora puoi aggiungere / modificare i file in / fin . Una volta fatto tutto, puoi mksquashfs / fin in un nuovo file squashfs,

mksquashfs /fin newfile; umount /fin

, quindi cancella / smonta tutte le altre directory utilizzate come preferisci.

Gli squashfs e alcuni unionfs sono comunemente usati per un live cd .


Se elimini un file dalla montata / pinna, verrà rimosso dagli squashfs finali che crei?
localhost

2

Qui ho trovato un'altra risposta:

bash# mount dir.sqsh /mnt/dir -t squashfs -o loop

7
Il comando sopra lo monterà in sola lettura, il che è meglio che non montarlo affatto; purtroppo, non è una risposta completa alla domanda in corso.
Harperville,

Sono d'accordo che non è una risposta completa. Insieme a unix.stackexchange.com/a/377269/27328 è possibile creare una risposta in cui non è necessario decomprimere il file system per modificarlo: meno spazio, meno tempo.
Utente

Metodo più semplice, ha funzionato su CentOS 7
Seff l'

0

L'uso di overlayfs come mostrato è il modo migliore per avere pseudo "squashfs rw"; Richiede tuttavia di essere eseguito su kernel> 4.x (o ubuntu> 14.x fidato).

Una soluzione alternativa quando si è seduti su un vecchio cd live senza sovrapposizioni / aufs / unionfs è fare uso delle capacità di squashfs

importante:

 without unsquashfs, so this can be done on low storage system

esempio:

modifica la directory "usr" di squashfs

1    mount squashfs_file /mnt

2    cp -a /mnt/usr $HOME  ##modify whatever $HOME/usr as needed

3    mksquashfs /mnt new_squashfs_file -wildcards -e usr

4    mksquashfs $HOME/usr new_squashfs_file -keep-as-directory

5    umount /mnt  # cleanup

la riga 3 crea temporaneamente il file squashfs escluso olddir_usr

la riga 4 aggiunge modificato-usr-dir nel file new_squashfs

vedi qui aggiungi squashfs Aggiungi alla sottodirectory all'interno del file squashfs

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.