Identificar de manera confiable un disco (no una partición) en Linux (Debian)

Identificar de manera confiable un disco (no una partición) en Linux (Debian)

Quiero hacer una copia de seguridad de la tabla de particiones de un disco en un script como este:

sfdisk --dump /dev/sda > partition_table.dump

Pero

  • No quiero usarlo /dev/sdaporque puede que no sea confiable.

  • /dev/disk/by-id parece tambiénno ser confiable.

  • /dev/disk/by-uuide dfincluir solo particiones (no discos).

Sin embargo, fdisk -lmuestra un UUID de "Identificador de disco". ¿Puedo de alguna manera obtener el nombre del disco ( sda) del identificador del disco? ¿O hay otra forma de identificar un disco de forma fiable?

Respuesta1

Úselo /dev/disk/by-id/de todos modos.El problema al que vinculasMe parece un mal funcionamiento poco común del hardware o algo similar.

Comparar

ls -l /dev/disk/by-id/

a

# 'lsblk' is from 'util-linux' package
lsblk -pdo NAME,VENDOR,MODEL,SERIAL,WWN

Sin embargo, en algunos de mis sistemas el comando anterior muestra valores en blanco; Aún puedes intentar:

# the below 'smartctl' command (from 'smartmontools' package) probably needs 'sudo'
for sd in $(lsblk -pdo NAME | tail -n +2); do
  printf "%s\n" "$sd"; smartctl -i "$sd" |
  grep -E "Model:|Number:|WWN"
done

no se mucho sobreWWNpero los números de serie deben estar codificados en el hardware. Lo que quiero decir es que si algún número de serie cambia por cualquier motivo, es posible que tenga problemas mayores que un script de respaldo que de repente no funciona.


Tenga en cuenta que un número de serie identifica un dispositivo físico sin importar cuál sea su tabla de particiones (o si existe alguna, estudie el término "superfloppy" yesta pregunta). Si desea identificar las tablas de particiones, estos UUID de "Identificador de disco" que descubrió serán el enfoque correcto (tenga en cuenta que son UUID de 128 bits en el esquema GPT pero firmas opcionales de 32 bits en MBR).ejemplo aquí). Son sólo unos pocos bytes en el disco que se pueden cambiar, clonar y realizar copias de seguridad. No he encontrado ninguna forma rápida de identificar un nodo de dispositivo mediante este tipo de identificador, aparte de navegar por los dispositivos disponibles:

id=8080fdb4-6905-4f34-91fa-61389615d7d3
# the below 'fdisk' command (from 'util-linux' package) probably needs 'sudo'
for sd in $(lsblk -pdo NAME | tail -n +2); do
  fdisk -l "$sd" | grep -qi " ${id}$" && printf "%s\n" "$sd"
done

/dev/disk/by-uuid[...] incluir sólo particiones (no discos).

Bueno, puede que ni siquiera los incluya a todos porque estos UUID se refieren a estructuras dentro de las particiones (como sistemas de archivos o swap), no a las particiones en sí (y si trata con un superfloppy, estará aquí como un disco completo). Cada uno de estos UUID está escrito en algún lugar dentro de su partición correspondiente (o dispositivo, si es superfloppy). Estos son identificadores que ves cuando invocas, por ejemplo

# 'file' is from 'file' package
file -s /dev/sda2

Si necesita identificadores de particiones, están en formato /dev/disk/by-partuuid/. Estos son los mismos que en

# 'partx' is from 'util-linux' package
partx --show /dev/sda

y se almacenan en una tabla de particiones correspondiente, no dentro de ninguna partición. Puede obtener una imagen más amplia ejecutando

# 'blkid' (from 'util-linux' package) probably needs 'sudo'
blkid

Para identificar un dispositivo que contiene una partición con un UUID determinado, intente:

id=68e3b991-5c7a-4d18-a120-834ef4effe00
readlink -e "/dev/disk/by-partuuid/$id" | sed 's/[0-9]*$//'

( sedAquí simplemente elimina los dígitos finales). Esta solución se puede adaptar fácilmente para recuperar información /dev/disk/by-uuid/si es necesario.

información relacionada