是否可以通过 FUSE 挂载 ext4 分区映像?

是否可以通过 FUSE 挂载 ext4 分区映像?

我正在尝试在用户空间中安装 ext4 分区映像。(没有 sudo,没有对 /dev/loop0 或 /etc/fstab 等进行特殊配置/权限修改)。所以我希望 FUSE 能够提供帮助。

然而,似乎通过 FUSE 系统挂载的每个文件系统都需要有一个特殊的 FUSE 驱动程序,并且我无法找到适用于 Linux 的 Linux 读写 ext4 FUSE 驱动程序。

有没有办法通过 FUSE 挂载 ext4 映像(具有写入权限)?

答案1

fuseext2显然将挂载 ext4分区读写。

警告:他们的文档中没有宣传 ext4 支持,并且尝试挂载时会出现警告:

This is experimental code, opening rw a real file system could be
dangerous for your data. Please add "-o ro" if you want to open the file
system image in read-only mode, or "-o rw+" if you accept the risk to test
this module

答案2

您需要为每种文件系统类型配备一个特定的保险丝驱动程序,因为保险丝的目的是让文件系统代码运行在用户空间. 因此,任何预先存在的内核驱动程序代码,运行在内核空间(ext2、ext3、ext4、xfs……)不能被 fuse 以‘原样’使用。

没有什么可以阻止开发人员重新使用相应内核驱动程序的部分代码来实现用户空间的保险丝驱动程序。但无论如何,你总是有为每种文件系统类型创建一个新的 fuse 驱动程序内核 C 代码和用户空间 C 代码是很不一样 (内核中没有标准 libc,驱动程序入口点没有相同的签名,等等...)

答案3

guestmountlibguestfs 诡计

sudo apt-get install libguestfs-tools

# Workarounds for Ubuntu 18.04 bugs.
# https://serverfault.com/questions/246835/convert-directory-to-qemu-kvm-virtual-disk-image/916697#916697
sudo rm -rf /var/cache/.guestfs-*
echo dash | sudo tee /usr/lib/x86_64-linux-gnu/guestfs/supermin.d/zz-dash-packages
sudo chmod +r /boot/vmlinuz-*

# Create a test image.
mkdir sysroot
dd if=/dev/urandom of=sysroot/myfile bs=1024 count=1024
virt-make-fs --format=raw --type=ext2 sysroot sysroot.ext2

# Mount it, have fun, unmount!
mkdir -p mnt
# /dev/sda becuase we have a raw filesystem.
guestmount -a sysroot.ext2.qcow2 -m /dev/sda mnt
cmp sysroot/myfile mnt/myfile
guestunmount mnt

依靠:

  • 文件系统的用户空间实现
  • 保险丝

文档:http://libguestfs.org/guestmount.1.html

在 Ubuntu 18.04、libguestfs-tools 1:1.36.13-1ubuntu3 上测试。

相关内容