使用带有 nfsroot 内核参数的 fsc 挂载选项来允许 FS-cache

mea*_*rix 6 nfs boot mount pxe initramfs

我正在 PXE 引导一个 Ubuntu 10.10 系统,我指定内核参数如下:

append root=/dev/nfs initrd=ubuntu-boot/initrd.img-2.6.35-24-generic
nfsroot=11.22.33.44:/data/nfsroot,fsc ip=dhcp rw
Run Code Online (Sandbox Code Playgroud)

我需要使用挂载选项“fsc”才能使用 FS-cache 功能(cachefilesd 包)。但是,当我尝试这样做时,我在启动时收到以下错误:

nfsmount: bad option 'fsc'
Run Code Online (Sandbox Code Playgroud)

为什么 nfsmount 不允许这个选项?(mount -o fsc在启动后手动挂载时它工作正常。)

mount -t nfs在文件中将nfsmount 更改为,/usr/share/initramfs-tools/scripts/nfs然后我运行update-initramfs -u更新 initramfs 映像,但似乎仍然出现错误:

mount: unknown nfs mount option 'fsc'
Run Code Online (Sandbox Code Playgroud)

我的猜测是,这是klibc 中挂载功能的限制。解决这个问题的最佳方法是什么?nfsmount 程序需要打补丁吗?

由于这似乎是 klibc 中 nfsmount 工具的限制,我想我可以添加/sbin/mount.nfs到 initramfs 映像并使用此工具挂载 nfsroot。我将它复制到文件夹中/usr/lib/klibc/bin/usr/share/initramfs-tools/scripts/nfs并按如下方式更新了脚本:

mount.nfs ${NFSROOT} ${rootmnt} -o nolock ${roflag} ${NFSOPTS}
Run Code Online (Sandbox Code Playgroud)

启动更新后的 initramfs 映像后,执行 mount.nfs 时有很长的延迟,然后显示以下消息:

mount.nfs: an incorrect mount option was specified  
Begin: Retrying nfs mount ... Begin: Running /scripts/nfs-premount ... done.
Run Code Online (Sandbox Code Playgroud)

但是,无论我使用什么挂载选项,都会显示此消息,因此这似乎是一个完全不同的问题......

mea*_*rix 6

我终于设法解决了它。以下是步骤:

  1. 将 Ubuntu 10.04 中的 mount.nfs 添加到 initramfs 映像(将其复制到/usr/lib/klibc/bin folder.)
  2. 将 nfsmount 行更改/usr/share/initramfs-tools/scripts/nfs为:

    mount.nfs ${NFSROOT} ${rootmnt} -o nolock ${roflag} ${NFSOPTS}
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用mkinitramfs或更新 initramfs 映像update-initramfs

这将为我的 Ubuntu 10.10 系统启用 nfsroot 上的 fsc 选项。我不知道为什么我不能从 10.10 开始使用 mount.nfs —— 也许是回归?