在构建过程中生成虚拟硬盘并填充内容



是否可以以某种方式创建虚拟硬盘映像并用文件填充虚拟硬盘映像而无需安装虚拟硬盘?

我有一组自定义的 linux 文件(所以,只是一堆文件),它们应该在文件系统中。现在我想在生成虚拟硬盘的构建过程中执行它,用 mkfs 格式化它(不需要 root),然后以某种方式将文件复制到虚拟硬盘中(但方式一定不需要 root 权限!有没有办法这样做?

它被称为环回设备。

要安装的软件包:libguestfs-tools

它需要Linux内核映像文件(/boot/vmlinuz-*-generic)可以被用户读取。

# Create mountpoint.
mkdir space
# Create image.
dd if=/dev/zero of=space.img bs=1024 count=255
# Format image.
/sbin/mkfs.ext4 space.img
# Mount image.
#
# There is a bug with it at least on Ubuntu:
# "The kernel is no longer readable by non-root users"
# https://bugs.launchpad.net/ubuntu/+source/linux/+bug/759725
#
# Fix: $ dpkg-statoverride --add --update root root 0644 /boot/vmlinuz-$(uname -r)
# Alternative fix is to chown the kernel image manually: chown a+r /boot/vmlinuz-*-generic
#
# Does uid/gid mapping, uses space.img as image, /dev/sda of the quest as partition, space/ as the mount point.
guestmount -o uid=$(id -u) -o gid=$(id -g) -o default_permissions -a space.img -m /dev/sda space
# do things
# Unmount.
guestunmount space
mount

用于共享文件系统以供用户使用。这种"共享"(包含文件系统的文件/事物与用户可访问的目录和文件结构之间的连接)是由内核中的module(在内核内运行的程序)完成的。该"程序"将用户请求(例如创建文件)转换为文件系统上的操作。
我们需要的是一个在用户空间中运行并且不调用mount的文件系统程序。用户空间文件系统实现称为 fuse,我知道流行文件系统有 fuse 实现。 无论如何,我不知道任何流行的程序,例如,可以在文件上的文件系统中创建文件,而无需将其"挂载"到目录中。您可以在wiki上浏览示例,也许您会找到这样的程序。
我会自己编写这样的程序。您可以编写自己的文件系统,
也可以选择使用现有的文件系统并编写一个程序来修改文件的内容(或虚拟硬盘映像,在 Linux 上它是一个文件),然后使用此程序创建和修改此文件系统的内容,而无需执行 linuxmount调用。
例如,您可以使用许多嵌入式系统中使用的fat_fs库,实现fat_fs回调函数(例如disc_read() disc_write) 从文件/ramdisc 读取和写入,然后调用fat_fs函数来修改 ramdisc/文件的内容。此类嵌入式库不应对mount或任何 Linux 系统调用进行任何调用,因为这些调用在嵌入式系统上丢失。
附言。在我的大学里有这样的课程,学生必须编写一个简单的文件系统程序来打开一个文件,并支持在这个文件中的文件系统中创建、修改和删除文件。

最新更新