Como verificar se um sistema de arquivos está montado com um script

16

Eu sou novo no script ... Eu posso fazer coisas muito básicas, mas agora eu preciso de uma mão.

Eu tenho um sistema de arquivos local que só será montado quando eu precisar fazer um backup.

Estou começando com isso.

#!/bin/bash
export MOUNT=/myfilesystem

if grep -qs $MOUNT /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."; then
  mount $MOUNT;
fi

Como eu disse, sou muito básico em escrever scripts. Ouvi dizer que você pode verificar o status do comando mount observando os códigos de retorno.

RETURN CODES
       mount has the following return codes (the bits can be ORed):
       0      success
       1      incorrect invocation or permissions
       2      system error (out of memory, cannot fork, no more loop devices)
       4      internal mount bug
       8      user interrupt
       16     problems writing or locking /etc/mtab
       32     mount failure
       64     some mount succeeded

Eu não sei como verificar isso. Alguma orientação?

    
por maniat1k 17.05.2012 / 17:51

5 respostas

14

Você pode verificar o código de status de mount e os executáveis mais bem escritos, com o parâmetro especial ? .

De man bash :

? Expands to the exit status of the most recently executed foreground pipeline.

Depois de executar o comando mount , a execução imediata de echo $? imprimirá o código de status do comando anterior.

# mount /dev/dvd1 /mnt
  mount: no medium found on /dev/sr0
# echo $?
  32

Nem todos os executáveis têm códigos de status bem definidos. No mínimo, deve sair com um código de sucesso (0) ou falha (1), mas nem sempre é o caso.

Para expandir (e corrigir) o seu script de exemplo, adicionei uma construção if aninhada para maior clareza. Não é a única maneira de testar o código de status e realizar uma ação, mas é mais fácil de ler quando se aprende.

#!/bin/bash
mount="/myfilesystem"

if grep -qs "$mount" /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."
  mount "$mount"
  if [ $? -eq 0 ]; then
   echo "Mount success!"
  else
   echo "Something went wrong with the mount..."
  fi
fi

Para mais informações sobre "Sair e sair do status", consulte o Guia avançado de script de script .

    
por 17.05.2012 / 18:15
29

Muitas distribuições do Linux possuem o comando mountpoint . Ele pode explicitamente usado para verificar se um diretório é um ponto de montagem. Simples assim:

#!/bin/bash    
if mountpoint -q "$1"; then
    echo "$1 is a mountpoint"
else
    echo "$1 is not a mountpoint"
fi
    
por 21.05.2012 / 19:50
2

A maneira mais fácil que não requer raiz é:

if $(df | grep -q /mnt/ramdisk); then

fi

ou para ver se não está montado:

if ! $(df | grep -q /mnt/ramdisk); then

fi
    
por 09.03.2018 / 16:08
1

Mais uma forma:

if [ "$(findmnt ${mount_point})" ] ; then
  #Do something for positive result (exit 0)
else
  #Do something for negative result (exit 1)
fi
    
por 18.05.2018 / 12:12
0

Curtas declarações

Verifique se montado :

mount|grep -q "/mnt/data" && echo "/mnt/data is mounted; I can follow my job!"

Verifique se não está montado :

mount|grep -q "/mnt/data" || echo "/mnt/data is not mounted I could probably mount it!"
    
por 28.11.2018 / 12:02