如何在启动时设置循环设备?


14

我想在启动时设置一个循环设备。我想知道什么是最好的方法。

我已经在Google上搜索了它。有人说添加udev规则,有人说添加脚本/etc/init.d,甚至有人修改initramfs。

那么最好的或正确的方法是什么?您能否提供一些细节(有关操作方法)?

谢谢。


我会选择/etc/init.d/something/etc/rc.local,但是我建议保留任何可行的方法。
enzotib

6
做什么的?如果要在引导时挂载文件,只需使用loop选项将其添加到/ etc / fstab中,挂载将为您配置回送设备。
psusi 2011年

@psusi:谢谢您的建议,但出于我的目的,挂载还不够,实际上不能简单地挂载文件。它是磁盘映像,而不是分区映像。我需要知道循环设备的确切名称,才能使用它在VirtualBox中制作虚拟磁盘。(我让这种虚拟磁盘认为在虚拟机和主机之间共享文件更容易。内置的共享文件夹不适用于某些应用程序。)
Roun 2011年

4
您可以仅将虚拟机指向文件而不是回送设备。您还需要非常小心,以确保永远不要运行虚拟机(或使其挂起)并在主机上同时挂载文件系统,否则会损坏fs。因此,使用网络使主机通过nfs或samba或sshfs共享来宾访问文件是一个更好的主意。
psusi 2011年

@Roun:尽管您必须指定分区从文件开头的扇区偏移量(例如mount /disk.img /mnt -o loop,offset=2048,第一个分区),但仍可以挂载文件中的分区。一旦设置了循环设备,就可以使用parted或fdisk找到偏移(有关此信息,请参见下面的答案)。
zanfur 2011年

Answers:


7

在Ubuntu中至少有三种“适当的”方式来执行启动操作(假定您不只是要挂载它),这里按优先级降序列出:

  1. /etc/init/*.conf (暴发户)
  2. /etc/init.d/* (sysvinit)
  3. /etc/rc.local (运行级别更改脚本)

还有使用udev规则的可能性,但它会令人费解。我建议反对。sysvinit脚本对于这么小的事情太过苛刻,因此我将重点介绍其他两个选项。运行级别更改脚本是最简单的(尽管是最不推荐的),所以我将从这里开始。

/etc/rc.local文件仅由/etc/init.d/rc.localsysvinit脚本执行,该脚本(默认情况下)在切换到任何正常的“ on”运行级别时(默认情况下)最后执行(例如,当您正常启动时,而不是在关闭或进入恢复模式时才执行)。要实现设置启动设备,只需在末尾添加它/etc/rc.local,假设您的文件已被调用/srv/diskimage并且希望/dev/loop0用作循环设备:

losetup /dev/loop0 /srv/diskimage

真的就是全部。当然,请使用最适合您的设置的文件名替换文件名。

如果您想对此更加具体,则可以为其创建Upstart作业,该作业将在安装了该文件的文件系统挂载后对其进行设置。以下是一个示例,假设这/srv是包含diskimage文件的安装点:

description     "Setup loop devices after filesystems are mounted"

start on mounted MOUNTPOINT=/srv
task
exec losetup /dev/loop0 /srv/diskimage

这应该足够简单,从概念上讲是这样:第一行只是供人类读者阅读的注释,它是Upstart的指示,等待/srv文件系统挂载,执行Lostup流程,并在流程成功退出时认为自己已完成(“任务”,而不是持久性服务)。只需将这些内容放入匹配的文件中即可/etc/init/*.conf。我会/etc/init/losetup.conf自己选择。

/etc/rc.local与这样简单的事情相比,Upstart作业的优势虽然很小但很重要。首先,/etc/rc.local它已被弃用,如今,几乎每个人都反对将它用作“完成任务的混乱沙箱”。皱眉使用它的其他原因中,某些确实使用该文件的程序只会覆盖内容,并且很难调和需要进入同一文件的不同脚本。其次,Upstart实际上为您处理了依赖项检查(确保首先安装了文件系统),因此,如果在安装文件系统时遇到问题,它将不会尝试设置回路设备...。但是一旦您解决并安装它,它就可以。第三,Upstart更加灵活:例如,您可以使其足够聪明以找到未使用的循环设备,并“发出”该循环设备以供其他新贵工作使用,类似于我们使用“ MOUNTPOINT”变量的方式在上面的示例中。


/etc/init/losetup.conf如何调用?它对我不起作用...
Imran

1

正如@psusi指出的,最简单的方法是将以下行添加到/etc/fstab文件中

/path/to/loop/device       /path/to/mount/point       auto       loop       0 0

现在重新启动或mount -a以root用户身份运行。然后应安装设备。您可以使用进行检查lsblk

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.