快速恢复或重新加载 /etc/fstab 设置的方法?

快速恢复或重新加载 /etc/fstab 设置的方法?

我正在基于 RHEL 6.x 的服务器上处理一个复杂问题/etc/fstab。该系统在八个分区中使用了各种挂载选项,包括几个绑定挂载。我正在测试选项及其对我正在处理的图像的影响。

例如nodev,,,nosuidnoexec几个nobarrier选项XFS 文件系统参数已经到位。

虽然我知道可以使用特定选项重新挂载,但是有没有一种快速的方法可以将所有挂载恢复为硬编码的持久设置/etc/fstab

例如sysctl -p加载/etc/sysctl.conf值并应用它们。有mount等价的吗?


编辑:

示例配置:

#
# /etc/fstab
#
UUID=e6ca80cd    /                       ext4    noatime,nobarrier        1 1
UUID=a327d315    /boot                   ext4    defaults                 1 2
UUID=333ada18    /home                   ext4    noatime,nobarrier,nodev  1 2
UUID=7835718b    /tmp                    ext4    nodev,nosuid,noexec      1 2
UUID=4dd2e9d4    /usr                    ext4    defaults                 1 2
UUID=c274f65f    /var                    ext4    noatime,nobarrier        1 2
UUID=5b5941e0    /var/log                ext4    defaults                 1 2
UUID=3645951a    /var/log/audit          ext4    defaults                 1 2
UUID=3213123c    /vol1                   xfs     noatime,logbufs=8,nobarrier 1 2
UUID=1ee1c070    swap                    swap    defaults                 0 0
# Bind mount for /tmp
/tmp             /var/tmp                none    bind                     0 0
tmpfs            /dev/shm                tmpfs   nodev,nosuid,noexec      0 0
devpts           /dev/pts                devpts  gid=5,mode=620           0 0
sysfs            /sys                    sysfs   defaults                 0 0
proc             /proc                   proc    defaults                 0 0

当然,开发商要求执行权限/tmp才能安装应用程序...

我发现remount如果不指定设备,该选项在此系统上不起作用(重新)挂载点。这是一台经过安全强化的服务器,所以我看到的问题可能与 SElinux 有关,或者是绑定挂载的结果,甚至可能是否定选项的存在(noexec 与 exec)...

答案1

在 bash 中输入:

egrep -v '^#' /etc/fstab | while read dev dir type opts dump pass ; do
    echo "mount -o remount,${opts} ${dir}";
done

在我的系统上,这将产生如下输出:

mount -o remount,nodev,noexec,nosuid /proc
mount -o remount,relatime,errors=remount-ro /
mount -o remount,defaults /misc

在您的系统上尝试一下。如果您喜欢它产生的输出,请使用它,或者只需echo从上面的命令中删除和双引号。

答案2

我只需要使用脚本来为相关的文件系统执行此操作

for fs in /home /var /whatever
do
    mount -o remount "$fs"
done

-f如果一个或多个 fs 可能很忙,你可能也需要在那里放一个,例如

mount -f -o remount "$fs"

答案3

来自mount手册页

重新安装功能遵循 mount 命令使用 fstab 选项的标准方式。这意味着仅当设备和目录完全指定时,mount 命令才不会读取 fstab(或 mtab)。

  mount -o remount,rw /dev/foo /dir

在此调用之后,所有旧的挂载选项都被替换,并且来自 fstab 的任意内容都将被忽略,但由 mount 命令内部生成和维护的 loop= 选项除外。

  mount -o remount,rw  /dir

因此mount -o remount /mountpoint应恢复选项/etc/fstab

mgorven@mamma:~% grep boot /etc/fstab
UUID=823c73dc-8f64-4f76-a120-968106ffdf5a /boot           ext4    relatime        0       2
mgorven@mamma:~% sudo mount -o remount,ro /boot
mgorven@mamma:~% mount | grep boot
/dev/sda4 on /boot type ext4 (ro,relatime)
mgorven@mamma:~% sudo mount -o remount /boot
mgorven@mamma:~% mount | grep boot
/dev/sda4 on /boot type ext4 (rw,relatime)

答案4

一旦系统启动并运行,重新挂载 /usr 和 /var 等文件系统将非常困难。例如,延迟重新挂载可能只会返回成功,但实际上永远不会有机会执行请求的重新挂载,因为在系统的整个运行过程中,文件句柄都会保持打开状态。

如果这是开发映像(听起来是这样),那么我建议每次测试时都启动干净的系统。这很繁琐,但至少你可以确定系统运行的方式与生产时一样,因此你的测试是可靠的。

相关内容