Compruebe si una "cadena" es un nombre de dispositivo existente y no un nombre de partición

Compruebe si una "cadena" es un nombre de dispositivo existente y no un nombre de partición

Por ejemplo, si tengo una variable de dispositivo existente /dev/sda, quiero verificar que no sea el nombre de una partición sino de todo el disco.
He probado esto:

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

pero esto devuelve verdadero si el var='/dev/sda'dispositivo está conectado o si la var='/dev/sda1'partición no está montada.
Así que incluso si combinas la condición anterior con la siguiente:

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

no sería suficiente decir que es un nombre de disco y no una partición de disco.

¿Cómo puedo comprobar si a stringes un nombre de dispositivo existente y no un nombre de partición?

Respuesta1

Podría usarlo lsblkpara esto; específicamente lsblk -o typedebería devolver part(para una partición) o disk(para un dispositivo de bloque completo).

Así, por ejemplo, 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

entonces

$ 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

o

$ 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"

Respuesta2

Usar lsblk:

var="/dev/sda"

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

Si "$var"no es un dispositivo válido, por ejemplo var="/dev/sda1", lsblktendrá un código de salida distinto de cero.


Para obtener resultados de todos los dispositivos:

lsblk -dnp --output NAME

Respuesta3

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.

información relacionada