我有这个非常简单的脚本:
#!/bin/sh
# Variables
directorio=$(dirname "${0}")
distribucion=$(lsb_release -s -c)
arquitectura=$(uname -m)
echo "I am in ${directorio}, in ${distribucion} with the ${arquitectura} arch."
exit 0
它确实有效,它返回以下行:
I am in ., in xenial with the x86_64 arch.
所以一切似乎都正常,除了每次我运行它时,系统无法关机或重新启动:
它就卡在那里 - 图像 -,并且无法执行任何其他操作。
我正在运行 Ubuntu Mini 16.04.4 LTS x86_64,已更新至最新版本,没有任何修改。
答案1
首先,感谢大家帮忙发现问题,特别是甜点贡献:
您为什么认为关机问题与脚本有关?这实际上不太可能——卸载第一行中提到的驱动器似乎是问题所在。~dessert
这种行为似乎是 NFS 包中的一种错误(nfs-common
),所以我一直在测试如何重现这种情况以及如何避免它。
为了重现它我使用了以下内容:
主持人
- KDE Neon 5.12 x86_64(基于 Ubuntu 16.04 LTS)(更新升级至最新)
openssh-client
(版本1:7.2p2-4ubuntu2.4
)nfs-kernel-server
(版本1:1.2.8-9ubuntu12.1
)virtualbox-5.2
(版本5.2.12-122591~Ubuntu~xenial
) -用于虚拟化客户机
客人
- Ubuntu Mini 16.04.4 LTS x86_64(更新升级至最新)-此机器未安装任何接口或额外包
openssh-server
(版本1:7.2p2-4ubuntu2.4
)nfs-common
(版本1:1.2.8-9ubuntu12.1
)
问题
问题似乎与客户机内的 NFS 挂载文件夹有关。此客户机已准备好/etc/fstab
自动挂载主机的 NFS 共享文件夹。
假设:
# Host
/data/shared davdriver:davdriver 777
|
+---- /folder1 davdriver:davdriver 777
+---- /folder2 davdriver:davdriver 777
+---- /script.sh davdriver:davdriver 777 #The script mentioned in the question
# Guest
/data/nfs davdriver:davdriver 777 #fstab: nofail,auto,noatime,nolock,intr,tcp,actimeo=1800
到目前为止,一切都运行正常。
问题是,在NFS 安装文件夹内运行脚本和任何 poweroff 类型的命令( poweroff
,, ...)时,机器会以某种方式卡住。reboot
我做了以下测试:
测试 1:运行poweroff
里面NFS 挂载文件夹
cd /data/nfs/folder1
poweroff
# OK
测试 2:运行共享脚本并poweroff
里面NFS 挂载文件夹
cd /data/nfs/
./script.sh
poweroff
# GETS STUCK ! (the snapshot in the question)
测试 3:运行共享脚本并poweroff
外部NFS 挂载文件夹
cd /data/nfs/
./script.sh
cd /data
poweroff
# OK
测试 4:运行共享脚本,卸载 NFS 挂载文件夹,并运行poweroff
里面用于挂载 NFS 的文件夹。
cd /data/nfs/
./script.sh
cd /data
umount ./nfs
cd ./nfs
poweroff
# OK
解决方案
运行脚本后,NFS 服务似乎正忙于任何后台进程,并且只有在poweroff
NFS 挂载文件夹之外运行命令似乎才能帮助系统卸载它并允许其关闭。
也可以先将其卸载并访问已挂载的根文件夹,这种情况似乎不会产生影响,系统也会关闭。