我正在基于 RHEL 6.x 的服务器上处理一个复杂问题/etc/fstab
。该系统在八个分区中使用了各种挂载选项,包括几个绑定挂载。我正在测试选项及其对我正在处理的图像的影响。
例如nodev
,,,nosuid
和noexec
几个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 等文件系统将非常困难。例如,延迟重新挂载可能只会返回成功,但实际上永远不会有机会执行请求的重新挂载,因为在系统的整个运行过程中,文件句柄都会保持打开状态。
如果这是开发映像(听起来是这样),那么我建议每次测试时都启动干净的系统。这很繁琐,但至少你可以确定系统运行的方式与生产时一样,因此你的测试是可靠的。