I have a Clonezilla installation on a USB stick and I’d like to make some modifications to the operating system. Specifically, I’d like to insert a runnable script into /usr/sbin to make it easy to run my own backup command to make backups less painful.
The main filesystem lives under /live/filesystem.squashfs on the USB FAT-32 partition.
How can I mount this read/write on my Linux machine in order to be able to add/remove/change files? I’m running an Ubuntu 12.04 derivative.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
As root, copy filesystem.squashfs to some empty dir, e.g.:
cp /mnt/clonezilla/live/filesystem.squashfs /path/to/workdir cd /path/to/workdir
Unpack the file then move it somewhere else (so you still have it as a backup):
unsquashfs filesystem.squashfs mv filesystem.squashfs /path/to/backup/
Go in squashfs-root, add/modify as per your taste then recreate filesystem.squashfs:
cd /path/to/workdir mksquashfs squashfs-root filesystem.squashfs -b 1024k -comp xz -Xbcj x86 -e boot
copy the newly created filesystem.squashfs over the existing one on your USB drive, e.g.:
cp filesystem.squashfs /mnt/clonezilla/live/
then reboot and use your LIVE USB.
Note: the above commands are part of squashfs-tools.
Method 2
If your system supports some uion-filesystem, such as aufs or overlayfs, you don’t have to extract your original squashfs file.
For example the overlayfs is used( a kernel option to enable it):
You can mount your squashfs.file to /fm or somewhere else first.
Prepare a writable filesystem with 2 directories in it, say /to and /temp.
prepare another writable directory /fin for the merged results.
Mount them together as an overlayfs to your system —
mount -t overlay -o lowerdir=/fm,upperdir=/to,workdir=/temp overlay /fin
Now you can add/modify files in /fin. Once everything done, you can mksquashfs /fin to a new squashfs file,
mksquashfs /fin newfile; umount /fin
, then clear/unmount all the other used directories as you will.
The squashfs and some unionfs are commonly used for a live-cd.
Method 3
Here, I found an other answer:
bash# mount dir.sqsh /mnt/dir -t squashfs -o loop
Method 4
Using overlayfs as shown is the best way to have pseudo “squashfs rw” ;
It requires however to run on > 4.x kernel (or ubuntu >14.x trusty ).
An alternative solution when one is sitting on older live cd without any overlayfs/aufs/unionfs is to make use of squashfs’own capabilities
Important: Without unsquashfs, so this can be done on low storage system
Example:
Modify squashfs’s “usr” directory
mount squashfs_file /mnt # 1
cp -a /mnt/usr $HOME # 2 Modify whatever $HOME/usr as needed
mksquashfs /mnt new_squashfs_file -wildcards -e usr # 3
mksquashfs $HOME/usr new_squashfs_file -keep-as-directory # 4
umount /mnt # 5 Cleanup
Line 3 builds temporarily squashfsfile excluding olddir_usr
Line 4 appends modified-usr-dir into new_squashfsfile
See here append squashfs
Method 5
Note: question written in 2013, now is 2021, I assume overlayfs (one of unionfs filesystems) is supported. This answer is basically merge of two other answers with some things written explicitly, proficient Linux users might see something as obvious (like using sudo), but not everybody is at that level, I’ve understood some things along the way and writing complete (IMO) instructions. Texts after # are comments, no need to copy them, on my system bash safely ignores them.
cd somefolder # some folder, no need for much free space, enough for modified data only mkdir fm # for mounting original mkdir to # for upper unionfs layers mkdir temp # some overlayfs technical folder mkdir fin # resulting folders/files would be there sudo mount /full_path/filesystem.squashfs fm -t squashfs -o loop sudo mount -t overlay -o lowerdir=fm,upperdir=to,workdir=temp overlay fin
Now can modify/add/delete files/folders in either “to” or “fin” folders.
Changes to them are “mirrored”.
To undo deletion of original file delete “deleted” file from “to” with sudo rm path/file.
After done with modifications to make new squashfs file in full_path folder, needs to be free space there:
sudo mksquashfs fin /full_path/filesystem.squashfs
When you don’t need your working files anymore:
sudo umount fin sudo umount fm sudo rm -R fm fin temp to
P.S. After change to quashfs I wanted to recreate iso file of modern distro which support both legacy and EFI boot. Why some options to below genisoimage command are critical, I don’t know, for me I was trial-and-error way. Boots both EFI and legacy, however start of iso is different: starts 33 ed 90 instead of 45 52 08, e.g. mjg59.dreamwidth.org/11285.html hints me Apple support is missing.
mkdir iso,efi sudo losetup --partscan --show --find original.iso # if output of previous loop0 sudo mount /dev/loop0p1 iso sudo mount /dev/loop0p2 efi # not necessary, just to see contents sudo mount -t overlay -o lowerdir=iso,upperdir=to,workdir=temp overlay fin
Replace what is needed in fin. Initially did sudo dd if=/dev/loop0p2 fin/EFI/BOOT/usb.efi to make image for efi, then found out it is already present in grub folder. If one takes available efi image, than losetup+mount /dev/loop steps can be replaced by simpler sudo mount original.iso iso
sudo genisoimage -lJr -o new.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 --boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot fin sudo isohybrid --uefi new.iso
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0