Obtenha o nome do dispositivo e o ponto de montagem se o rótulo da partição for conhecido

5

Como obter o nome do dispositivo de partição e o ponto de montagem quando o sistema de arquivos rótulo é conhecido?

Existem várias possibilidades:

Linux

Rótulo do sistema de arquivos para o nome do dispositivo

O nome do dispositivo pode ser obtido com blkid :

blkid -l -o device -t LABEL="$label" -c /dev/null

Nome do dispositivo para o ponto de montagem

Eu tentei obter o ponto de montagem com blkid , mas falhei. Usando o -s alternar todos os outros campos pode ser consultado quando o rótulo é fornecido:

blkid -l -t LABEL="$label" -o value -s LABEL      # yields label
blkid -l -t LABEL="$label" -o value -s TYPE       # yields partition type
blkid -l -t LABEL="$label" -o value -s UUID       # yields UUID
blkid -l -t LABEL="$label" -o value -s MOUNTPOINT # yields nothing

A obtenção do ponto de montagem não é suportada aparentemente, embora esteja listado quando a opção -o list é fornecida, mas não de maneira fácil e fácil de usar:

blkid -o list -c /dev/null <device>

A próxima tentativa foi usar df -P . Aqui está o que eu inventei, assumindo o dispositivo é armazenado na variável device :

export device
mountpoint=$(df -P |
  awk --assign dev="$device" \
    '{if ($1==dev)             \
      {for (i=1; i<=NF-5; i++) \
        $i=$(i+5);             \
        NF-=5;                 \
        print                  \
      }                        \
    }')

Este código funciona. No entanto, dada a sua fealdade eu não estou convencido de que a análise df é o caminho preferido.

Outros Unices

Rótulo do sistema de arquivos para o nome do dispositivo

blkid funciona perfeitamente no Linux, mas não está disponível no Solaris ou FreeBSD (pelo menos um não pode esperar que seja instalado). O mesmo vale para findfs .

Como faço para obter o nome do dispositivo de maneira portátil no Linux, Solaris e FreeBSD?

Nome do dispositivo para o ponto de montagem

Felizmente, df -P produz resultados muito semelhantes em todos os sistemas testados. o O problema é que o meu feio awk script não parece ser portátil (testado com Sol awk , gawk no Solaris e FreeBSDs awk ). Qual é o caminho preferido?

Perguntas relacionadas

Como obter o ponto de montagem do flash drive usando o uuid? Problema: A análise de /proc/mounts não é portável e problemática mesmo no Linux. Parsing mount parece ainda pior. Perl geralmente não está disponível.

Existe um comando para ver onde um disco é montado? Problema: Analisa /proc/mounts com um script awk com bugs. As soluções não são portáteis.

Resumo

Gostaria de obter o nome do dispositivo e o ponto de montagem quando o rótulo do sistema de arquivos é fornecido de maneira portátil (assumindo um shell POSIX). O rótulo do disco pode contém espaços em branco ou outros caracteres não-ASCII que parecem complicar as coisas ainda mais.

         Label-To-Device    Device-To-Mount-Point
         ---------------    ---------------------
Linux           ✓                    ✓ (ugly)
Solaris         .                    .
FreeBSD         .                    .
    
por Marco 25.03.2013 / 00:56

1 resposta

1

Você pode seguir estas etapas para fazer isso:

  1. obtenha devname usando blkid_dev_devname(...)
  2. obtenha prob para esta partição usando blkid_new_probe_from_filename(...)
  3. use setmntent(...) , getmntent(...) , & endmntent(...) , onde mnt->mnt_fsname é igual a devname copy mnt->mnt_dir , que é o ponto de montagem!

Veja estas referências para mais detalhes

Estrutura de dados mntent

struct mntent {    
    char *mnt_fsname;   /* name of mounted file system */    
    char *mnt_dir;      /* file system path prefix */      
    ...
}; 
    
por 25.11.2013 / 12:33