这是 RHEL8 VM。我尝试在 /var 上安装逻辑卷(因为我需要更多空间)。目前,我已创建目录 /xvar 进行安装,但它不起作用,并且不显示错误。以下是示例,我首先在 /mnt 上安装,检查它是否存在,然后 umount(再次检查),然后尝试在 /xvar 上安装。下面是 SELinux 上下文列表(对我来说有点神秘),但我将 /xvar 的上下文设置为与 /mnt 的上下文相同。
使用 mount -v 不会给出任何额外的提示,除了一些关于文件系统没有任何标签的 SELinux 提示,我稍后会处理。/mnt 和 /xvar 之间没有区别。
~ ls /dev/mapper | grep lvol0
data-lvol0
~ mount /dev/mapper/data-lvol0 /mnt
~ mount | grep lvol0
/dev/mapper/data-lvol0 on /mnt type ext4 (rw,relatime,seclabel)
~ umount /mnt
~ mount | grep lvol0
~ mount /dev/mapper/data-lvol0 /xvar # no error
~ mount | grep lvol0 # but not mounted, either
~ ls -Zl / | grep mnt\\\|var
drwxr-xr-x. 2 root root system_u:object_r:mnt_t:s0 6 Jun 21 2021 media
drwxr-xr-x. 2 root root system_u:object_r:mnt_t:s0 6 Jun 21 2021 mnt
drwxr-xr-x. 46 root root system_u:object_r:var_run_t:s0 1360 May 9 14:50 run
drwxr-xr-x. 2 root root system_u:object_r:var_t:s0 6 Jun 21 2021 srv
drwxr-xr-x. 22 root root system_u:object_r:var_t:s0 4096 May 9 14:47 var
drwxr-xr-x. 2 root root system_u:object_r:mnt_t:s0 6 May 9 14:42 xvar
~
[编辑]
以下是一些按照 Peter Whittaker 的提示截取的贝壳截图(见下文)。结果:
- /mnt 和 /xvar 都位于同一个 FS 上
- 它与 SELinux 没有任何关系。
这真是令人费解。我已经使用各种版本的 Linux 和 Unix 大约 30 年了,我从来没有能够在任何地方不安装任何东西,更不用说“安装”明确表示它做了某事,而实际上它没有。
# df /mnt /xvar
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/rootvg-root 9758720 148816 9609904 2% /
/dev/mapper/rootvg-root 9758720 148816 9609904 2% /
# ts=$(date +%H:%m)
# mount /dev/mapper/data-lvol0 /xvar
# ausearch -m avc -m useravc -ts $ts | tee raw | audit2allow > rules
Valid message types are: ALL USER LOGIN [... lots more stuff ...]
Nothing to do
# cat rules
# mount | grep xvar
# getenforce
Enforcing
# setenforce permissive
# getenforce
Permissive
# mount /dev/mapper/data-lvol0 /xvar
# mount | grep lvol0
# mount -v /dev/mapper/data-lvol0 /xvar
mount: /dev/mapper/data-lvol0 mounted on /xvar.
# mount | grep lvol0
# mount -v /dev/mapper/data-lvol0 /mnt
mount: /dev/mapper/data-lvol0 mounted on /mnt.
# mount | grep lvol0
/dev/mapper/data-lvol0 on /mnt type ext4 (rw,relatime,seclabel)
关于上下文,简单说一下:这是我公司内联网上的 RHEL8 VMWare 客户机,我通过 ssh 进入。除了在多用户模式下使用 ssh,我无法访问该机器,因此没有救援/内核命令行的东西(即使有可能,使用一些技巧,弄乱它并使系统无法启动,也需要 IT 方面相当大的社会和政治麻烦,我想不惜一切代价避免这种情况)。
答案1
由于我没有发言权,所以无法发表评论。我想到以下几点:
- 显示了什么
df /mnt /xvar
?它们实际上都在吗/
? - SELinux 是宽容的还是强制的?(
getenforce
会告诉你)如果是宽容的,那不太可能是 SELinux 的问题。 - 如果强制执行和
/usr/sbin/ausearch
/usr/bin/audit2allow 可用,请尝试如下操作:
ts=$(date +%H:%m)
do the mount command that fails
sudo ausearch -m avc -m useravc -ts $ts | tee raw | audit2allow > rules
- 这至少可以让您知道哪些特定的 SELinux 权限可能在起作用:“规则”文件将包含建议的 SELinux 更改,“原始”文件将具有更多上下文,以便对这些规则建议进行有意义的评估(切勿在未经审查的情况下采纳 audit2allow 的建议;有时 SEL 正在做您想要的事情...)。
答案2
我想我找到了原因。当我开始解决这个问题时,我将 /xvar 上的挂载放入 /etc/fstab 中,并使用选项 nofail。当时,其他东西可能不对,导致挂载失败,但内核一定仍然为 /xvar 保留了一个特殊位置(尽管我在进一步探索和此处提供的所有示例中已在 fstab 中注释掉该行)。在 /xvar 挂载仍被注释掉的情况下进行干净重启后,我可以正常挂载到 /xvar。“mount”声称已完成挂载且没有错误,但实际上并非如此,在我看来这是一个相当严重的错误。
下一步:
在 /etc/fstab 中取消注释 /xvar mount
如果安装成功,将 /var 的内容复制到 /xvar 中
在 fstab 中使用挂载点 /var (原计划)