Centos 7 autofs 挂载在重启后无法正常工作

Centos 7 autofs 挂载在重启后无法正常工作

我已经在 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

提示:https://www.centos.org/forums/viewtopic.php?f=47&t=51789

答案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

相关内容