Como verificar se um diretório específico está montado? [duplicado]

20

Como verificar se um diretório específico está montado na máquina Linux. Por exemplo, existe uma pasta chamada teste, eu quero verificar se ele está montado ou não.

    
por unixx 21.08.2014 / 15:57

6 respostas

23

Se você quiser verificar se é o ponto de montagem de um sistema de arquivos, é para isso que o comando mountpoint (na maioria dos sistemas baseados em Linux) é:

if mountpoint -q -- "$dir"; then
  printf '%s\n' "$dir is a mount point"
fi

Ele faz isso verificando se . e .. têm o mesmo número de dispositivo ( st_dev in stat() result). Então, se você não tem o comando mountpoint , você pode fazer:

perl -le '$dir = shift; exit(1) unless
  (@a = stat "$dir/." and @b = stat "$dir/.." and
  ($a[0] != $b[0] || $a[1] == $b[1]))' "$dir"

Como mountpoint , ele retornará verdadeiro para / , mesmo que / não seja um ponto de montagem (como em uma chroot jail) ou false para um ponto de montagem de um bind monte do mesmo sistema de arquivos dentro de si mesmo.

Ao contrário de mountpoint , para links simbólicos, ele verifica se o destino do symlink é um ponto de montagem.

    
por 21.08.2014 / 16:59
11

Como HalosGhost menciona nos comentários, os diretórios não são necessariamente montados por si só. Em vez disso, eles estão presentes em um dispositivo que foi montado. Para verificar isso, você pode usar o comando df da seguinte forma:

$ df -h /boot/
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1              99M   55M   40M  59% /boot

Aqui podemos ver que o diretório /boot faz parte do sistema de arquivos, /dev/hda1 . Este é um dispositivo físico, no sistema, um HDD.

Você também pode abordar isso de forma um pouco diferente usando o comando mount para consultar o sistema para ver quais dispositivos estão montados no momento:

$ mount | column -t
/dev/mapper/VolGroup00-LogVol00  on  /                         type  ext3         (rw)
proc                             on  /proc                     type  proc         (rw)
sysfs                            on  /sys                      type  sysfs        (rw)
devpts                           on  /dev/pts                  type  devpts       (rw,gid=5,mode=620)
/dev/hda1                        on  /boot                     type  ext3         (rw)
tmpfs                            on  /dev/shm                  type  tmpfs        (rw)
/dev/mapper/lvm--raid-lvm0       on  /export/raid1             type  ext3         (rw)
none                             on  /proc/sys/fs/binfmt_misc  type  binfmt_misc  (rw)
sunrpc                           on  /var/lib/nfs/rpc_pipefs   type  rpc_pipefs   (rw)
nfsd                             on  /proc/fs/nfsd             type  nfsd         (rw)

Aqui você pode ver o tipo de dispositivo e o tipo de sistema de arquivos atualmente montado em seu sistema. A terceira coluna mostra onde eles estão montados no sistema dentro de seu sistema de arquivos.

    
por 21.08.2014 / 16:06
4

Bem, como outros disseram, você deve editar sua pergunta e deixar claro o que você está tentando alcançar. Tanto quanto eu entendi, você precisa verificar se um diretório está montado em um dispositivo específico. Você pode tentar algo como abaixo também.

df -P /test | tail -1 | cut -d' ' -f 1

Então, basicamente, o comando acima permite que você conheça o ponto de montagem do diretório se o dispositivo estiver montado em um diretório.

    
por 21.08.2014 / 16:11
3

Eu estava procurando a mesma pergunta quando quis verificar a montagem de um novo sistema de arquivos XFS.

Eu encontrei o comando findmnt : findmnt /directoryname

[root@CentOS7-Server /]# findmnt /mnt
TARGET SOURCE    FSTYPE OPTIONS
/mnt   /dev/sdb1 xfs    rw,relatime,seclabel,attr2,inode64,noquota
[root@CentOS7-Server /]# 
    
por 13.02.2018 / 14:44
1

O one-liner agradável e curto do Python pode ser construído com base na resposta de Gilles :

$ python -c 'import os,sys;print(os.path.ismount(sys.argv[1]))' /mnt/HDD
True

$ python -c 'import os,sys;print(os.path.ismount(sys.argv[1]))' /etc                
False

Eu fiz a implementação personalizada do comando mountpoint no Python, que analisa o arquivo /proc/self/mounts . Com o mesmo comportamento de mount na resposta de Stephane, exceto pelo comando parses /proc/self/mountinfo . O uso é muito simples: is_mountpoint.py /path/to/dir .

#!/usr/bin/env python3
from os import path
import sys

def main():

    if not sys.argv[1]:
       print('Missing a path')
       sys.exit(1)

    full_path = path.realpath(sys.argv[1])
    with open('/proc/self/mounts') as mounts:
       print
       for line in mounts:
           if full_path in line:
              print(full_path,' is mountpoint')
              sys.exit(0)
    print(full_path,' is not a mountpoint')
    sys.exit(1)

if __name__ == '__main__':
    main()

Execução de teste:

$ python3 ./is_mountpoint.py /mnt/HDD                                          
/mnt/HDD  is mountpoint
$ lsblk | grep HDD
└─sdb6   8:22   0 405.3G  0 part /mnt/HDD
$ python3 ./is_mountpoint.py $HOME                                             
/home/xieerqi  is not a mountpoint
    
por 17.09.2016 / 11:52
0

Sua pergunta é um pouco confusa, mas eu acho, uma das maneiras de verificar isso: mount |awk '{print $3}'| grep -w <your_directory> . Se a saída estiver vazia, nenhum dispositivo será montado no diretório. Se não estiver vazio, algum dispositivo será montado no diretório. Outra maneira é usar df <your_directory> . Se o último campo for igual ao nome do seu diretório - do que algum dispositivo está montado nele.

    
por 21.08.2014 / 16:05

Tags