以读写方式挂载squashfs文件系统


45

我在USB记忆棒上安装了Clonezilla,我想对操作系统进行一些修改。具体来说,我想在其中插入一个可运行的脚本/usr/sbin,以使其易于运行自己的备份命令,从而减轻备份的麻烦。

主文件系统/live/filesystem.squashfs位于USB FAT-32分区下。

我如何在Linux机器上挂载此读/写文件,以便能够添加/删除/更改文件?我正在运行Ubuntu 12.04衍生产品。

Answers:


38

以root用户filesystem.squashfs身份复制到一些空目录,例如:

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

解压缩文件,然后将其移动到其他位置(因此您仍然可以将其作为备份):

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

进入squashfs-root,根据您的喜好添加/修改,然后重新创建filesystem.squashfs

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

将新创建的文件复制到filesystem.squashfsUSB驱动器上的现有文件,例如:

cp filesystem.squashfs /mnt/clonezilla/live/

然后重新启动并使用LIVE USB。

注意:上面的命令是的一部分squashfs-tools


这很好用,但是不幸的是,我收到所有根目录的消息告诉我Source directory entry bin already used! - trying bin_1。可以肯定的是,在输出文件系统中,我有一个/bin和一个/bin_1,而不是合并文件夹。有任何想法吗?如果我使用-noappend,文件系统运行,将无法正常工作。
Naftuli Kay 2013年

1
@TKKocheran-在其中添加自定义脚本/usr/bin并重新打包后,在这里没有出现任何这些错误mksquashfs。USB驱动器可以正常启动,我可以在实时会话中使用我的脚本。确保在运行之前不再将旧filesystem.squashfs文件与修改squashfs-root后的文件放在同一目录中mksquashfs
don_crissti 2013年

@Naftuli:您似乎已跳过“ mv ...备份/”步骤。
Joachim Wagner

这项工作不在(fake)根目录下吗?只是从提取中我得到了错误create_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
Wilf

@Wilf-您无法squashfs-root/dev/*以常规用户身份创建设备文件(),需要root特权。
don_crissti

5

如果您的系统支持某些uion文件系统,例如aufsoverlayfs,则不必提取原始的squashfs文件。

例如,使用了overlayfs(启用它的内核选项):您可以将squashfs.file挂载到/ fm或其他位置。准备其中有2个目录的可写文件系统,例如/ to/ temp。为合并结果准备另一个可写目录/ fin。将它们作为overlayfs一起安装到系统上-

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

现在,您可以在/ fin中添加/修改文件。完成所有操作后,您可以将mksquashfs / fin转换为新的squashfs文件,

mksquashfs /fin newfile; umount /fin

,然后清除/卸载所有其他使用的目录。

squashfs的一些的unionfs通常用于活CD


如果从已挂载的/ fin中删除文件,是否会将其从您创建的最终squashf中删除?
本地主机'18

2

在这里,我找到了另一个答案:

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

7
上面的命令将其以只读方式安装,这比根本不安装更好。,,不是眼前问题的完整答案。
哈珀维尔

我同意这不是一个完整的答案。与unix.stackexchange.com/a/377269/27328一起,您可以构建一个无需解压缩文件系统即可修改它的答案-更少的空间,更少的时间。
用户

最简单的方法,适用于CentOS 7
Seff

0

如图所示,使用overlayfs是拥有伪“ squashfs rw”的最佳方法。但是,它需要在> 4.x内核(或ubuntu> 14.x trusty)上运行。

当坐在没有任何overlayfs / aufs / unionfs的较早的现场CD上时,另一种解决方案是利用squashfs自身的功能

重要:

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

例:

修改squashfs的“ usr”目录

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

第三行临时构建squashfsfile,不包括olddir_usr

第4行将Modifyed-usr-dir附加到new_squashfsfile中

见这里追加squashfs 追加到squashfs文件内的子目录

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.