在构建期间生成ramdisk并填充内容

时间:2018-01-12 11:08:29

标签: linux build ramdisk

在某种程度上,是否可以在不安装ramdisk的情况下使用文件创建AND填充ramdisk图像?

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

2 个答案:

答案 0 :(得分:1)

它被称为环回设备。

要安装的软件包: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

答案 1 :(得分:0)

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