在 FreeBSD 10 上启动时自动挂载 iSCSI 分区

在 FreeBSD 10 上启动时自动挂载 iSCSI 分区

我有一台安装 iSCSI 驱动器的 FreeBSD 10.2 服务器。我希望将这些驱动器自动安装在 fstab 中,以便它们在重新启动后保持不变。

如果我执行命令

mount /dev/da0p1 /mnt

它工作完美。

mount
/dev/ada0p2 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
/dev/da0p1 on /mnt (ufs, local, soft-updates)

但是,如果我在/etc/fstab系统中放置一个条目,则会停止其引导进程,并表示该条目/dev/dap1无效。我假设这是因为网络和 iSCSI 服务尚未启动。

在我的/etc/fstab文件系统中,我添加了“late”选项,但它没有任何效果。

# cat /etc/fstab
# Device    Mountpoint  FStype  Options Dump    Pass#
/dev/ada0p2     /       ufs     rw        1        1
/dev/ada0p3    none     swap    sw        0        0


#User Added Entries
#/dev/da0p1      /mnt            ufs     rw,late  3       3

发生的情况是,引导过程停止说“没有文件或目录 /dev/da0p1。如果我执行ls /dev/da*该目录,就会显示出来。(见下图) 在此输入图像描述

事实上,经过一些测试,如果我只等待几秒钟,然后在单用户模式下在提示符处键入“exit”,系统将继续启动并且驱动器会正常安装。

有没有办法设置 5 秒的延迟来允许创建 iscsi 设备,这样挂载就不会失败?

答案1

免责声明:我不知道这是否是正确的要做的事情,但这对我有用。

因此,我本质上需要在启动过程中花费一些额外的时间,以便网络服务可以完成加载,并且可以创建 iSCSI 挂载,以便可以挂载某些内容。

我所做的就是添加sleep 5/etc/rc.d/mountlate脚本中。

# PROVIDE: mountlate
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: nojail

. /etc/rc.subr

name="mountlate"
start_cmd="mountlate_start"
stop_cmd=":"

mountlate_start()
{
        local err latefs
        sleep 5               <-------- Added this line
        # Mount "late" filesystems.
        #
        err=0

5秒对我来说似乎是一个不错的数字;您的里程可能会有所不同,并且您需要测试不同的值。

再次,我不知道这是否是解决这个特定问题的正确方法,如果有人有更好或正确的方法,请发布。

答案2

目前最好的解决方案(需要 FreeBSD 11.0+)似乎是:

  • fstab 条目包含:
    • “late”选项(不减慢启动过程)
    • “failok”选项(在 iSCSI 连接错误的情况下不进入单用户模式)
    • 转储/传递值设置为 0
  • 将“-w 10”添加到 rc.conf 中的 iscsictl_flags 中,以便 iscsictl 将等待 iscsi 连接(最多 10 秒)

/etc/fstab:

/dev/PARTITION.journal         /mnt         ufs     rw,async,failok,late     0       0

/etc/rc.conf:

iscsictl_enable="YES"
iscsictl_flags="-Aa -w 10"
iscsid_enable="YES"

PS:我不知道为什么,但我无法在 iSCSI 上使用 GPT 标签(它可以在创建时使用,但重新启动时标签位于此处 - 由“gpart show -l”显示 - 但在 /dev 中不可用/gpt/)。

答案3

我发现我不需要将 sleep 添加到 /etc/rc.d/mountlate 中。相反,我在 /etc/fstab 中将转储编号更改为 0,将 fsck 传递编号更改为 0。启动时不会运行 fsck,但已挂载分区:

/dev/da0p1      /opt            ufs     rw,late 0       0

相关内容