Prática recomendada para montar / desmontar dispositivos de loopback em um compartilhamento de rede?

4

Estou procurando uma maneira preferida de montar e desmontar automaticamente imagens de disco (ou seja, arquivos de loopback) em uma unidade de rede.

Infelizmente /etc/init.d/umountnfs não verifica dispositivos de loopback. Conseqüentemente, a seqüência de desligamento fica paralisada ao tentar desmontar a unidade de rede que hospeda o arquivo de loopback.

Por outro lado, como posso garantir que o arquivo de loopback esteja disponível na inicialização do sistema, ou seja, como influenciar a seqüência de montagem do sistema de arquivos durante a inicialização ?

    
por Black 12.07.2014 / 09:04

2 respostas

1

A ordem de montagem será normalmente determinada pelo último campo inteiro em /etc/fstab . Por exemplo:

UUID=XXX / ext4    errors=remount-ro,noatime,nodiratime 0 1

Aqui, o último campo inteiro determinará a ordem (quanto menor, quanto mais cedo). Então você provavelmente quer que o nfs mount tenha algum pedido aqui (por exemplo, 2) e loopback maior do que esse (por exemplo, 3). No entanto, com o nfs, a complicação pode ser que eles sejam montados somente depois que os dispositivos de rede estiverem totalmente ativados e talvez não aconteçam como parte do /etc/init/mountall.conf normal. Portanto, devemos ter o dispositivo de loopback, em vez disso, vinculado à interface subindo ou descendo.

Isso geralmente é feito por scripts em /etc/network/if-up.d . Mas a montagem do NFS acontecerá em segundo plano, uma vez que é governada pela tarefa inicial em /etc/init/mountall-net.conf , que simplesmente envia um sinal para a montagem para tentar recarregar todos os sistemas de arquivos da rede sempre que um dispositivo de rede é ativado. Parece que haverá atraso após o envio do sinal, então eu acho que um script que vai esperar assim deve funcionar:

#!/bin/sh

ntries=10
while [ $ntries -gt 0 ]; do
  if findmnt <nfs-mount-point> >/dev/null 2>/dev/null; then
    if findmnt <loop-mount-point> >/dev/null 2>/dev/null; then
      # loop already mounted; nothing to be done
      :
    else
      mount -t loop <loop-file> <loop-mount-point>
    fi
    break
  else
    sleep 1
    ntries="'expr $ntries - 1'"
  fi
done

(substitua <nfs-mount-point> , <loop-mount-point> , <loop-file> pelos valores reais) Isso aguarda 10 segundos em intervalo de 1 segundo para que o NFS seja montado. Como eu mencionei o lugar natural para colocá-lo em /etc/network/if-up.d ordenado depois do script upstart lá, mas é melhor lançarmos em segundo plano para evitar esperar especialmente porque a montagem upstart acontecerá em segundo plano através de um sinal por /etc/init/mountall-net.conf . Portanto, coloque este script em / usr / local / bin, torne-o executável (permitindo executar até mesmo o contrário) e adicione /etc/network/if-up.d/zzz-local (você deve primeiro verificar se o script funciona como esperado executando manualmente com sudo mountloop.sh ):

#!/bin/sh

/usr/local/bin/mountloop.sh &

(torne o zzz-local como executável) O umount é feito pela tarefa /etc/init.d/umountnfs.sh sysv. O que precisamos fazer é adicionar um script para desmontar um dispositivo de loop com um número de pedido menor que isso. Então, adicione /etc/init.d/umountloop.sh como:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          umountloop
# Required-Start:
# Required-Stop:     umountnfs
# Should-Stop:       $network $portmap nfs-common
# Default-Start:
# Default-Stop:      0 6
# Short-Description: Unmount network loop filesystems.
# Description:       Unmount network loop filesystems.
### END INIT INFO

umount <loop-mount-point>

(substitua pelo valor real e torne o script executável) A ordem de umountnfs.sh é 31 no meu sistema ( /etc/rc0.d/S31umountnfs.sh , /etc/rc6.d/S31umountnfs.sh ), portanto, daremos um número menor:

sudo update-rc.d umountloop.sh start 30 0 6 .

Edit: Eu cometi um erro no script mountloop.sh antes. Deve ter sido mount -o loop e não mount -t loop . Além disso, o umountloop.sh deve ter "Default-Start:" como "0 6" e não em "Default-Stop:" nos comentários para ser preciso, embora não vá atrapalhar e eu copiei principalmente de umountnfs.sh que tem o mesmo erro.

    
por sumwale 19.07.2014 / 12:27
0

Principalmente, o pedido é decidido com base nesse arquivo: gksu gedit / etc / fstab Por favor, crie um backup deste arquivo e edite-o, se necessário. Tenha muito cuidado ao editar. Para desmontar uma unidade, sudo umount -l mountpoint ou sudo umount -I mountpoint

Obrigado.

    
por CR2 15.07.2014 / 11:30