如何覆盖内核默认的挂载选项?

如何覆盖内核默认的挂载选项?

我正在努力开发一个在文件中创建文件系统并将其安装为环回设备的程序。该程序的目的是创建根文件系统的克隆,并且它认为通过复制块设备的 UUID 也是非常聪明的。但是,由于我使用的是 XFS,环回安装会因重复的 UUID 值而失败。

我可以使用手动安装mount -o nouuid,但程序会重新创建设备并尝试自行安装。因为它不使用 fstab,所以我无法在那里设置默认安装选项。

有没有一种方法可以告诉内核运行挂载时的默认选项是什么,并设置选项,nouuid以便即使mount在没有明确指定该选项的情况下调用的命令也会使用它?

答案1

对于适用于每个文件系统的通用选项,核心将传递给系统调用的挂载选项mount作为布尔标志数组应用到它,它没有任何内置默认值。

对于 xfs,内核解析选项在内置默认值之上(所有位均为零对于布尔标志)。

因此,您需要安排将正确的选项传递给mount系统调用。如果您的程序调用该mount程序,您可以编写一个包装器来动态更改选项。

#!/bin/sh
if [ "$(ps -p $PPID -o comm=)" = "annoying-program" ]; then
  case "$* " in
    *" -t xfs "*) set -- -o nouuid "$@";;
  esac
fi
exec /sbin/mount "$@"

将此脚本放在mount您的 PATH 之前,或者如果程序将路径硬编码为mount,则暂时移动mount到其他位置并将脚本放在其位置。

如果你的程序mount直接调用系统调用,你可以通过覆盖呼叫LD_PRELOAD

相关内容