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.