Monter un système de fichiers squashfs en lecture-écriture

45

J'ai une installation Clonezilla sur une clé USB et j'aimerais apporter quelques modifications au système d'exploitation. Plus précisément, j'aimerais insérer un script exécutable dans /usr/sbinafin de faciliter l'exécution de ma propre commande de sauvegarde afin de rendre les sauvegardes moins pénibles.

Le système de fichiers principal se trouve sous /live/filesystem.squashfsla partition USB FAT-32.

Comment puis-je monter cette lecture / écriture sur ma machine Linux afin de pouvoir ajouter / supprimer / modifier des fichiers? J'utilise un dérivé d'Ubuntu 12.04.

Naftuli Kay
la source

Réponses:

38

En tant que root, copiez filesystem.squashfsdans un répertoire vide, par exemple:

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

Décompressez le fichier puis déplacez-le ailleurs (vous l'avez toujours en réserve):

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

Entrez squashfs-root, ajoutez / modifiez selon votre goût puis recréez filesystem.squashfs:

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

copiez le nouveau créé par- filesystem.squashfsdessus celui existant sur votre clé USB, par exemple:

cp filesystem.squashfs /mnt/clonezilla/live/

puis redémarrez et utilisez votre LIVE USB.

Remarque: les commandes ci-dessus font partie de squashfs-tools.

don_crissti
la source
Cela fonctionne très bien, mais malheureusement, je reçois un message pour tous les répertoires racine Source directory entry bin already used! - trying bin_1. Effectivement, dans mon système de fichiers de sortie, j'ai un /binet un /bin_1, plutôt que de fusionner le dossier. Des idées? Si je cours avec -noappend,le système de fichiers ne fonctionne tout simplement pas.
Naftuli Kay
1
@TKKocheran - Je ne reçois aucune de ces erreurs après avoir ajouté un script personnalisé /usr/binet reconditionné avec mksquashfs. Le lecteur USB démarre correctement et je peux utiliser mon script à partir de la session en direct. Assurez-vous que vous n'avez plus l'ancien filesystem.squashfsdans le même répertoire avec votre modifié squashfs-rootavant de lancer mksquashfs.
don_crissti
@ Naftuli: Vous semblez avoir sauté l'étape "mv ... backup /".
Joachim Wagner
Est-ce que cela ne fonctionne pas sous (faux) racine? Je viens d'extraire l'erreurcreate_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
Wilf
@Wilf - vous ne pouvez pas créer de fichiers de périphérique ( squashfs-root/dev/*) en tant qu'utilisateur standard, vous devez disposer des privilèges root.
don_crissti
5

Si votre système prend en charge un système de fichiers uion, tel que aufs ou overlayfs , vous n'avez pas à extraire votre fichier squashfs d'origine.

Par exemple, overlayfs est utilisé (une option du noyau pour l’activer): Vous pouvez monter votre fichier squashfs.file sur / fm ou ailleurs. Préparez un système de fichiers accessible en écriture avec 2 répertoires, dites / to et / temp . prépare un autre répertoire / fin en écriture pour les résultats fusionnés. Montez-les ensemble en superposition sur votre système ---

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

Vous pouvez maintenant ajouter / modifier des fichiers dans / fin . Une fois que tout est fait, vous pouvez mksquashfs / fin dans un nouveau fichier squashfs,

mksquashfs /fin newfile; umount /fin

, puis effacez / démontez tous les autres répertoires utilisés comme vous le souhaitez.

Les squashfs et certains unionfs sont couramment utilisés pour un live-cd .

Zhi-Ming Chen
la source
Si vous supprimez un fichier de la commande monté / fin, sera-t-il supprimé des derniers squashfs que vous créez?
localhost
2

Ici , j'ai trouvé une autre réponse:

bash# mount dir.sqsh /mnt/dir -t squashfs -o loop
Utilisateur
la source
7
La commande ci-dessus le montera en lecture seule, ce qui est mieux que de ne pas le monter du tout; hélas, pas une réponse complète à la question posée.
harperville
Je conviens que ce n'est pas une réponse complète. Avec unix.stackexchange.com/a/377269/27328, vous pouvez créer une réponse qui vous évite de décompresser votre système de fichiers pour le modifier: moins d’espace, moins de temps.
Utilisateur
Méthode la plus simple, travaillé sur CentOS 7
Seff
0

Utiliser les superpositions comme indiqué est le meilleur moyen d’avoir pseudo "squashfs rw"; Cela nécessite toutefois de fonctionner sur le noyau> 4.x (ou sur ubuntu> 14.x trusty).

Une solution alternative lorsque vous êtes assis sur un ancien CD live sans superposition de fichiers / aufs / unionfs consiste à utiliser les fonctionnalités de squashfs'own

important:

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

Exemple:

modifier le répertoire "usr" de 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

line 3 construit temporairement squashfsfile en excluant olddir_usr

la ligne 4 ajoute le répertoire-usr-dir modifié dans le fichier new_squashfsfile

voir ici ajouter squashfs Ajouter au sous-répertoire à l'intérieur du fichier squashfs

utilisateur3477652
la source