O problema

O problema

Eu tenho esse script bem simples:

#!/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

O que realmente funciona, retorna a seguinte linha:

I am in ., in xenial with the x86_64 arch.

Então tudo parece estar bem, exceto que toda vez que eu o executo, o sistema não consegue desligar nem reiniciar:

Sistema travado ao desligar

Ele fica preso aí mesmo -image-, e não faz mais nada.

Estou executando um Ubuntu Mini 16.04.4 LTS x86_64, atualizado para o mais recente, sem nenhuma modificação.

Responder1

Em primeiro lugar, obrigado a todos por ajudarem a encontrar o problema, especialmente aocontribuição da sobremesa:

Por que você acha que o problema de desligamento tem algo a ver com o script? Na verdade, isso é muito improvável – desmontar a unidade mencionada na primeira linha parece ser o problema. ~sobremesa

Esse tipo de comportamento parece ser uma espécie de bug nos pacotes NFS ( nfs-common), então venho testando como reproduzir isso, e uma forma de evitá-lo.

Para reproduzi-lo usei o seguinte:

Hospedar

  • KDE Neon 5.12 x86_64 (baseado no Ubuntu 16.04 LTS)(atualizado e atualizado para o mais recente)
  • openssh-client(versão 1:7.2p2-4ubuntu2.4)
  • nfs-kernel-server(versão 1:1.2.8-9ubuntu12.1)
  • virtualbox-5.2(versão 5.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) -nenhuma interface ou pacote extra foi instalado nesta máquina
  • openssh-server(versão 1:7.2p2-4ubuntu2.4)
  • nfs-common(versão 1:1.2.8-9ubuntu12.1)

O problema

O problema parece estar relacionado à pasta montada pelo NFS dentro da máquina convidada. Este convidado é preparado /etc/fstabpara montar automaticamente a pasta compartilhada NFS do host.

Digamos:

# 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 de alguma forma ao executar um script e qualquer comando do tipo poweroff ( poweroff, reboot, ...) dentro de uma pasta montada em NFS.

Eu fiz os seguintes testes:

Teste 1: Corridapoweroff DENTROa pasta montada em NFS

cd /data/nfs/folder1
poweroff
# OK

Teste 2: Executando um script compartilhado epoweroff DENTROa pasta montada em NFS

cd /data/nfs/
./script.sh
poweroff
# GETS STUCK ! (the snapshot in the question)

Teste 3: Executando um script compartilhado epoweroff FORAa 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 opoweroff DENTROa pasta usada para montar o NFS.

cd /data/nfs/
./script.sh
cd /data
umount ./nfs
cd ./nfs
poweroff
# OK

A solução

Depois de executar o script, o serviço NFS parece estar ocupado com qualquer processo em segundo plano, e apenas executar o poweroffcomando fora da pasta montada no 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.

informação relacionada