Identifique de forma confiável um disco (não uma partição) no Linux (Debian)

Identifique de forma confiável um disco (não uma partição) no Linux (Debian)

Quero fazer backup da tabela de partição de um disco em um script como este:

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

Mas

  • Não quero usar /dev/sda, porque pode não ser confiável.

  • /dev/disk/by-id parece tambémnão ser confiável.

  • /dev/disk/by-uuide dfinclua apenas partições (não discos).

No entanto, fdisk -lmostra um UUID de "Identificador de disco". De alguma forma, posso obter o nome do disco ( sda) do identificador do disco? Ou existe outra maneira de identificar um disco com segurança?

Responder1

Use /dev/disk/by-id/de qualquer maneira.O problema ao qual você vinculame parece um mau funcionamento raro de hardware ou algo igualmente ruim.

Comparar

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

para

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

No entanto, em alguns dos meus sistemas, o comando acima exibe valores em branco; ainda assim você pode tentar:

# 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

eu não sei muito sobreWWNmas os números de série devem ser codificados no hardware. O que quero dizer é que, se algum número de série for alterado por qualquer motivo, você poderá ter problemas maiores do que um script de backup que de repente não funciona.


Observe que um número de série identifica um dispositivo físico, não importa qual seja sua tabela de partição (ou se houver alguma, estude o termo "superfloppy" eessa questão). Se você deseja identificar as próprias tabelas de partição, esses UUIDs de "Identificador de disco" que você descobriu serão a abordagem correta (observe que eles são UUIDs de 128 bits no esquema GPT, mas assinaturas opcionais de 32 bits no MBR,exemplo aqui). Eles são apenas alguns bytes no disco que podem ser alterados, clonados e copiados. Não encontrei nenhuma maneira rápida de identificar um nó de dispositivo por esse tipo de identificador, além de navegar pelos dispositivos disponíveis:

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[...] incluem apenas partições (não discos).

Bem, pode incluir nem todos eles porque esses UUIDs se referem a estruturas dentro de partições (como sistemas de arquivos ou swap), não a partições em si (e se você lidar com superdisquete, ele estará aqui como um disco inteiro). Cada um desses UUIDs é escrito em algum lugar dentro de sua partição correspondente (ou dispositivo, se for superdisquete). Estes são identificadores que você vê quando invoca, por exemplo

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

Se você precisar de identificadores de partições, eles estão no formato /dev/disk/by-partuuid/. Estes são os mesmos que em

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

e eles são armazenados em uma tabela de partição correspondente, não dentro de nenhuma partição. Você pode obter uma visão mais ampla executando

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

Para identificar um dispositivo que contém uma partição com um determinado UUID, tente:

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

( sedapenas remove os dígitos finais aqui). Esta solução pode ser facilmente adaptada para recuperar informações /dev/disk/by-uuid/se você precisar.

informação relacionada