Verifique se uma “string” é um nome de dispositivo existente e não um nome de partição

Verifique se uma “string” é um nome de dispositivo existente e não um nome de partição

Por exemplo, se eu tiver uma variável de dispositivo existente /dev/sda, quero verificar se não é o nome de uma partição, mas de todo o disco.
Eu tentei isso:

[[ $(df --output=source "$var" 2> /dev/null | tail -n 1) = 'udev' ]]

mas isso retorna verdadeiro se o var='/dev/sda'dispositivo estiver conectado ou se a var='/dev/sda1'partição não estiver montada.
Portanto, mesmo se você combinar a condição anterior com a seguinte:

if grep -sq "^$var " /proc/mounts; then ...

não seria suficiente dizer que é um nome de disco e não uma partição de disco.

Como posso verificar se a stringé um nome de dispositivo existente e não um nome de partição?

Responder1

Você poderia usar lsblkpara isso - especificamente lsblk -o typedeveria retornar part(para uma partição) ou disk(para um dispositivo de bloco inteiro).

Então, por exemplo, dado:

$ lsblk /dev/sda
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 238.5G  0 disk
├─sda1   8:1    0   9.8G  0 part
├─sda2   8:2    0 164.7G  0 part
├─sda3   8:3    0  31.1G  0 part /
├─sda4   8:4    0     1K  0 part
├─sda5   8:5    0  15.3G  0 part /usr/local
└─sda6   8:6    0  17.7G  0 part /home

então

$ var=/dev/sda; lsblk -ndo type "$var" | grep -qF part && echo "is a partition"
$ var=/dev/sda1; lsblk -ndo type "$var" | grep -qF part && echo "is a partition"
is a partition

ou

$ var=/dev/sda; lsblk -ndo type "$var" | grep -qF disk && echo "is a disk"
is a disk
$ var=/dev/sda1; lsblk -ndo type "$var" | grep -qF disk && echo "is a disk"

Responder2

Usar lsblk:

var="/dev/sda"

if lsblk "$var" &>/dev/null; then
   echo "Is a disk."
else
   echo "Is not a disk."
fi

Se "$var"não for um dispositivo válido, por exemplo var="/dev/sda1", lsblkterá um código de saída diferente de zero.


Para obter a saída de todos os dispositivos:

lsblk -dnp --output NAME

Responder3

Usar mountpoint.

De man mountpoint:

NAME
       mountpoint - see if a directory or file is a mountpoint

SYNOPSIS
       mountpoint [-d|-q] directory | file

       mountpoint -x device

DESCRIPTION
       mountpoint   checks   whether   the   given   directory   or  file  is  mentioned  in  the
       /proc/self/mountinfo file.

informação relacionada