Verifique se a pasta é um sistema de arquivos remoto montado

36

Qual é a melhor maneira (confiável, portátil, etc.) para verificar se uma determinada pasta está em um sistema de arquivos remoto (nfs) montado dentro de um script de shell?

Estou procurando um comando que se pareça com:

chk-remote-mountpoint /my/path/to/folder 
    
por Totor 12.04.2013 / 19:07

10 respostas

31

Como Stephane diz "não há uma resposta Unix universal para isso".

A melhor solução que encontrei para a minha pergunta:

df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'

retornará o tipo de sistema de arquivos, por exemplo: nfs ou ext3 .

A opção -T não é padrão , por isso pode não funcionar em outros sistemas Unix / Linux ...

De acordo com o Gilles 'comentário abaixo: "Isso funciona em qualquer Linux não embutido, mas não no BusyBox, * BSD, etc."

    
por 12.04.2013 / 19:07
9

Você pode usar o GNU stat .

%m para descobrir o ponto de montagem.

$ stat --format=%m /usr/src/linux
/usr/src

%T (no modo de sistema de arquivos) para descobrir o nome do sistema de arquivos.

$ stat --file-system --format=%T /usr/src/linux
reiserfs

Assim, você sabe que /usr/src/linux , no meu sistema, está armazenado em um sistema de arquivos que está montado em /usr/src e tem o tipo de sistema de arquivos reiserfs .

Consulte também man stat para referência futura. É um comando muito versátil, útil quase sempre quando você precisa de informações sobre arquivos e não quer voltar para grep | awk wardness.

    
por 12.04.2013 / 21:08
4

mount -l e use grep , sed ou awk para encontrar a linha que se refere ao diretório em questão.

    
por 12.04.2013 / 19:19
2

Infelizmente, não há uma resposta Unix universal para isso.

Uma coisa que você pode fazer, para um determinado arquivo /a/b/c/d , é percorrer o caminho:

  • / a / b / c /.
  • / a / b / c /..
  • / a / b / c /../..
  • ...

... e faça um stat(2) em cada nível, até que o st_dev seja alterado. Então você saberá onde está o ponto de montagem. Em seguida, você pode procurar o caminho canônico desse ponto de montagem em /etc/mtab ou na saída de mount para descobrir o tipo de sistema de arquivos. Então descobrir o que é remoto e o que não é, vai ser complicado, especialmente para os do tipo fusível. Por exemplo, nfs , cifs , fuse.sshfs , fuse.davfs são óbvios, mas e por exemplo fuse.gvfs-fuse-daemon ou fuse.avfsd que podem ter arquivos de rede e não de rede?

    
por 12.04.2013 / 21:49
1

df /path informará que /path é um ponto de montagem se disser que o ponto de montagem não é / .

    
por 23.06.2013 / 17:43
1

Apenas faça

df /me/path/to/folder

Se o primeiro campo (o sistema de arquivos) estiver no formato host: / path então você sabe que é NFS

    
por 10.05.2018 / 15:21
0

O "-l" para df (1) irá falhar com um erro em sistemas de arquivos não-locais, então você pode usar este comportamento para saber se o sistema de arquivos é remoto:

df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
   echo "local mount, do stuff"
fi

No entanto, a opção -l não é padrão .

    
por 27.04.2017 / 20:23
0

Você pode usar o df -t no Linux e df -T nos sistemas BSD.

De man df :

-t, --type=TYPE

limit listing to file systems of type TYPE

if df -t nfs | grep -q /path/to/folder$; then
  # it is an NFS
fi
    
por 06.06.2017 / 22:54
-1

Eu pessoalmente usaria mountpoint (muito portátil no Linux!):

NAME
       mountpoint - see if a directory is a mountpoint

SYNOPSIS
       mountpoint [-d|-q] directory

ou showmount , que é praticamente obrigatório para ser instalado em qualquer sistema que realmente monte NFS compartilhamentos (parte do pacote nfs-common ):

NAME
       showmount - show mount information for an NFS server

SYNOPSIS
       showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]

Outra opção seria algo como:

$ mount -l -t nfs | grep 'my mount point'
    
por 08.01.2016 / 09:32
-3
find . -type d -name nfs -exec mountpoint {} \; | grep not

irá verificar todas as pastas nomeadas 'nfs' se elas estiverem montadas

    
por 17.10.2015 / 10:37