我已经在 Centos 7 上设置了 autofs。但是,似乎在重启后,挂载 /home/ 目录需要一些时间,即使我使用“cd”进入该目录也是如此。尝试 3 次后才成功:
[root@localhost ~] cd /home/<user>
-bash: cd: /home/<user>: No such file or directory
并且,autofs已启用,因此我希望它在重启后启动:
[root@localhost etc]# systemctl status autofs
autofs.service - Automounts filesystems on demand
Loaded: loaded (/usr/lib/systemd/system/autofs.service; enabled)
Active: active (running) since Tue 2015-07-21 10:34:38 HKT; 1h 13min ago
Process: 1379 ExecStart=/usr/sbin/automount $OPTIONS --pid-file /run/autofs.pid (code=exited, status=0/SUCCESS)
Main PID: 1385 (automount)
CGroup: /system.slice/autofs.service
└─1385 /usr/sbin/automount --pid-file /run/autofs.pid
Jul 21 10:34:38 localhost.localdomain systemd[1]: Starting Automounts filesystems on demand...
Jul 21 10:34:38 localhost.localdomain automount[1385]: setautomntent: lookup(sss): setautomntent: No such file or directory
Jul 21 10:34:38 localhost.localdomain systemd[1]: Started Automounts filesystems on demand.
这是 /etc/auto.master:
/misc /etc/auto.misc
/net -hosts
+dir:/etc/auto.master.d
/home /etc/auto.home
/san /etc/auto.san
+auto.master
/etc/auto.master:
* -fstype=nfs,rw 192.254.100.4:/home_external/user_home_local/&
/etc/auto.san:
mysql_db 192.254.100.4:/san_external/mysqldb
我怀疑出于类似的原因,当 mysql 在重启后启动时,它会出现一个错误,说它无法“cd”到 /san/mysql_db/。但在机器启动后手动重启 mysql 是可行的。有什么想法吗?谢谢 vm
答案1
我也经历过类似的事情。
也就是说,自动挂载主目录的用户登录在重启后立即挂起,直到我使用“systemctl start rpcbind”手动启动 rpcbind。这是截至今天的所有最新 Cent7 更新。
我发现修改 autofs 单元文件以依赖 rpcbind 和一些其他服务可以解决我的问题。请参阅下面“After”代码块中的“Requires=network.target rpc-statd.service rpcbind.service”行...
之前:/usr/lib/systemd/system/autofs.service
[Unit]
Description=Automounts filesystems on demand
After=network.target ypbind.service sssd.service
[Service]
Type=forking
PIDFile=/run/autofs.pid
EnvironmentFile=-/etc/sysconfig/autofs
ExecStart=/usr/sbin/automount $OPTIONS --pid-file /run/autofs.pid
ExecReload=/usr/bin/kill -HUP $MAINPID
TimeoutSec=180
[Install]
WantedBy=multi-user.target
之后:/usr/lib/systemd/system/autofs.service
[Unit]
Description=Automounts filesystems on demand
Requires=network.target rpc-statd.service rpcbind.service
After=network.target ypbind.service sssd.service
[Service]
Type=forking
PIDFile=/run/autofs.pid
EnvironmentFile=-/etc/sysconfig/autofs
ExecStart=/usr/sbin/automount $OPTIONS --pid-file /run/autofs.pid
ExecReload=/usr/bin/kill -HUP $MAINPID
TimeoutSec=180
[Install]
WantedBy=multi-user.target
答案2
这是问题的根本原因:
- systemd 首先启动 sssd
- sssd 在 sssd 中配置为一个分叉进程。sssd 不会在完全加载时向 systemd 发出信号。启动后,systemd 认为 sssd 已加载并继续启动过程。
- 在某些情况下,加载 sssd 并开始回答 autofs/passwd/...nss 查询可能需要一段时间。我见过的系统需要长达 5 秒钟的时间。
- 如果 autofs 在 sssd 加载之前启动,则 autofs 映射不可用。
有几种方法可以解决这个问题:
- 干净的解决方案是 sssd 实现 systemd 信号,以便它可以在完全加载时通知 systemd
- 尝试加快 sssd 的加载速度。检查您的 sssd 配置,看看是否有导致其加载速度如此缓慢的原因。
一个 hacky 解决方案是在 autofs 启动前人为地添加足够的延迟。(这是上一个答案的工作原理。它只是在 autofs 之前添加了另一个服务,以便 sssd 获得更多时间。)在某些情况下,这是不够的。bug 中提出了另一种解决方案https://bugzilla.redhat.com/show_bug.cgi?id=1189767。 添加
ExecStartPre=/bin/sleep 10
到你的 sssd.unit