我的任务是在设备映射器内核模块的帮助下在真实设备下制作虚拟设备。虚拟设备必须将任何请求传输到真实设备,因此两个设备必须相等。
在未来我应该能够控制请求,所以我使用这篇文章编写了内核模块,代表设备映射器目标。
制作模块并插入它(insmod 命令)后,我设置了我的设备(dmsetup create)。然后进行挂载,可以通过刚刚创建的虚拟设备与真实设备一起使用。
但问题是如何在启动时重复上述指令?我想将我的虚拟设备用作通用设备(我猜是通过更改 fstab)。
提前致谢!
我的任务是在设备映射器内核模块的帮助下在真实设备下制作虚拟设备。虚拟设备必须将任何请求传输到真实设备,因此两个设备必须相等。
在未来我应该能够控制请求,所以我使用这篇文章编写了内核模块,代表设备映射器目标。
制作模块并插入它(insmod 命令)后,我设置了我的设备(dmsetup create)。然后进行挂载,可以通过刚刚创建的虚拟设备与真实设备一起使用。
但问题是如何在启动时重复上述指令?我想将我的虚拟设备用作通用设备(我猜是通过更改 fstab)。
提前致谢!
如果要将设备用作根文件系统,则需要创建一个 initramfs 来设置它。基本上是一个发出dmsetup
命令的 shell 脚本,然后是一个mount
,最后pivot_root
是新的文件系统。
去年在 dm-devel 邮件列表上讨论了如何在没有 initramfs 的 Linux 内核中执行此操作,方法是在内核命令行上指定映射器行。这是 Chrome OS 的做法,因为他们不能/不会使用 initramfs。有关此功能的文档,请参见此处。不过,该功能从未合并。
补丁系列于 2017 年 5 月更新并重新提交。希望我们最终会看到它以某种形式合并。
如果您不打算将您的设备用作根文件系统,您仍然可以根据需要使用相同的方法,但可能有更简单的方法。