Primeiro de tudo, obrigado a todos por ajudarem a encontrar o problema, especialmente para o contribuição de sobremesa :
Why do you think the shutdown issue has anything to do with the script? That’s actually very unlikely – unmounting the drive mentioned in the first line rather seems to be the problem. ~dessert
Esse tipo de comportamento parece ser um tipo de bug nos pacotes NFS ( nfs-common ), então tenho testado como reproduzir isso e como evitá-lo.
Para reproduzi-lo, usei o seguinte:
Anfitrião
- KDE Neon 5.12 x86_64 (baseado no Ubuntu 16.04 LTS) (atualizado e atualizado para o mais recente)
-
openssh-client(versão1:7.2p2-4ubuntu2.4) -
nfs-kernel-server(versão1:1.2.8-9ubuntu12.1) -
virtualbox-5.2(versão5.2.12-122591~Ubuntu~xenial) - para virtualizar o convidado
Convidado
- Ubuntu Mini 16.04.4 LTS x86_64 (atualizado e atualizado para o mais recente) - nem qualquer interface nem pacote extra foi instalado nesta máquina
-
openssh-server(versão1:7.2p2-4ubuntu2.4) -
nfs-common(versão1:1.2.8-9ubuntu12.1)
O problema
O problema parece estar relacionado com a pasta NFS montada dentro da máquina convidada. Este convidado é preparado via /etc/fstab para montar automaticamente a pasta compartilhada NFS do host.
Digamos que:
# 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
Tudo neste ponto funciona perfeitamente bem.
O problema é que a máquina fica presa durante a execução de um script e qualquer comando poweroff-kind ( poweroff , reboot , ...) dentro de uma pasta montada pelo NFS.
Eu fiz os seguintes testes:
Teste 1: Executando poweroff INSIDE a pasta montada em NFS
cd /data/nfs/folder1
poweroff
# OK
Teste 2: Execução de um script compartilhado e poweroff INSIDE na pasta montada em NFS
cd /data/nfs/
./script.sh
poweroff
# GETS STUCK ! (the snapshot in the question)
Teste 3: Execução de um script compartilhado e poweroff FORA da pasta montada em NFS
cd /data/nfs/
./script.sh
cd /data
poweroff
# OK
Teste 4: executando um script compartilhado, desmontando a pasta montada em NFS e executando o poweroff INSIDE na pasta usada para montar o NFS.
cd /data/nfs/
./script.sh
cd /data
umount ./nfs
cd ./nfs
poweroff
# OK
A solução
Após a execução do script, o serviço NFS parece estar ocupado com qualquer processo em segundo plano, e somente executando o comando poweroff fora da pasta montada pelo NFS parece ajudar o sistema a desmontá-lo e permitir seu desligamento.
Também é possível desmontá-lo primeiro e acessar a pasta raiz que foi montada, este cenário parece não afetar e o sistema também será desligado.