Como obter o número de série da unidade a partir do ponto de montagem?

4

Se lsblk -o NAME,SERIAL,MOUNTPOINT incluir o seguinte em sua saída

sdb                                           X55MM4827123
└─sdb1
  └─luks-4d0dc651-9aa6-452d-9442-7b33d95f8427                /run/media/main/mydrive

O que é um simples comando console / CLI que eu possa usar para obter o número de série ( X55MM4827123 neste caso) quando eu fornecer o ponto de montagem ( /run/media/main/mydrive neste caso)?

A resposta não precisa necessariamente usar lsblk , mas esperamos que seja concisa e, idealmente, use apenas scripts simples de bash.

    
por user779159 13.01.2017 / 12:32

2 respostas

3

Estas opções imprimirão seu disco serial sem títulos: lsblk -n -o SERIAL /dev/sda

Opções explicadas, e que podem ser encontradas nas páginas de trabalho:

-n, --noheadings
Do not print a header line.

Esta opção removerá cabeçalhos como Serial: da saída do comando.

-o, --output list
Specify which output columns to print. Use --help to get a list of all supported columns.

Selecione quais informações imprimir sobre discos.

Isso será suficiente para trazer apenas a série. Infelizmente, lsblk não funciona com pontos de montagem, pois a serial é um atributo do disco, não da partição. Dando uma olhada no synopsis :

Synopsis

lsblk [options]
lsblk [options] device...

Você terá que fazer um grande esforço para extrair do ponto de montagem a partição, cortar as informações do disco e, em seguida, fornecê-lo como parâmetro para lsblk . Isso provavelmente fará o truque:

mount| grep /run/media/main/mydrive | awk 'NR==1{print $1}'|sed 's/[0-9]*//g'

mount listará todos os pontos de montagem, grep obterá a linha de seu ponto de montagem, awk obterá a coluna de partição e sed removerá números, que são a representação de partições. Somando tudo:

lsblk -n -o SERIAL 'mount| grep /run/media/main/mydrive | awk 'NR==1{print $1}'|sed 's/[0-9]*//g''
    
por 13.01.2017 / 12:41
0

Tanto quanto eu entendo, o objetivo é fornecer a entrada de comando como ponto de montagem e número de série de saída. Bem, é possível com um script pequeno que usa um pouco de awk magic e smartmontools package.

Demo:

$ ./mount2serial.sh /                                                                                                    
[sudo] password for xieerqi: 
Serial Number:    A22MD061520000172
$ ./mount2serial.sh /mnt/HDD                                                                                             
[sudo] password for xieerqi: 
Serial Number:    Z4GRCSXAT

E aqui está o próprio script:

#!/usr/bin/env bash

if [ "$1" = "/"  ]
then
    dev=$(awk -v mount="$1" '$2 == mount{print $1}' /proc/self/mounts)
else
    dev=$(awk -v mount="$1" '$0 ~ mount{print $1}' /proc/self/mounts)
fi
sudo smartctl -i "$dev" | grep 'Serial Number:'
    
por 13.01.2017 / 13:30