Linux: obtenha o nome do dispositivo do disco de inicialização atual

1

Ao inicializar uma máquina com um dispositivo USB,

sudo fdisk -l

gera dois dispositivos marcados com um asterisco e você nunca saberá qual era o dispositivo de inicialização.

Preciso de uma lista de todos os discos conectados à máquina atual em que

sed -ne 's/.*\([sh]d[a-zA-Z]\+$\)/\/dev\/\1/p' /proc/partitions 

é uma boa maneira, ele gera

/dev/sda
/dev/sdb

Isso me dá uma pista de qual é o dispositivo de inicialização, essencial para querer inicializar de um e excluir com segurança o outro - automaticamente (entre, inicialize, deixe executar ...) como faço em um monte de máquinas ao mesmo tempo, garantindo que nenhum dado permaneça nos discos rígidos do computador do cliente.

awk '$2 == "/"' /proc/self/mounts 

Isso fornece o número UUID - mas como encontrar o que /dev/sd?pertence a ele?

(Dica sobre "usar UUID" não é útil - não quero reconfigurar o sistema, quero limpá-lo. É claro que posso atribuir novos UUIDs ao fazer isso, custa um segundo, mas definitivamente não é o objetivo e ainda sinto falta do fato de não saber qual dispositivo /dev/sd?dar um novo.)

dban fez o trabalho, mas não será livre para usar no futuro.

mideal
fonte
sudo blkidfornecerá o UUID (e outras informações) para cada /dev/sd*dispositivo. Você também pode ver o /dev/disk/by-uuid/conteúdo em que cada UUID é um link simbólico para um específico /dev/sd*.
piernov 31/07/2015

Respostas:

1

Você quase o tem com sua awkinvocação. Alguns pequenos ajustes devem ser suficientes.

awk '$1 ~ /^\/dev\// && $2 == "/" { print $1 }' /proc/self/mounts

A $1 ~ /^\/dev\//parte requer que qualquer linha satisfatória nomeie um dispositivo em algum lugar em / dev. Agora, tudo o que precisamos é de um mapeamento do nome do UUID do dispositivo para o nome atribuído ao kernel, o que é fácil, pois todos os nomes listados serão diretamente esse nome ou um link simbólico (no final das contas) apontando para esse nome, para que possamos sentir eles ls -lgostam assim:

ls -l $(awk '$1 ~ /^\/dev\// && $2 == "/" { print $1 }' /proc/self/mounts)

Isso deve fornecer uma única linha de saída, informando em qual dispositivo físico o sistema de arquivos raiz está montado atualmente. Não será infalível, então eu não automatizaria nada potencialmente destrutivo com base nisso, mas para um humano que só quer alguma ajuda para descobrir em qual dispositivo apontar, isso deve ser suficiente.

um CVn
fonte
Isso me dá lrwxrwxrwx 1 root root 10 jul 29 20:39 / dev / disk / by-uuid / 330a4fd2-db87-4641-941d-a29e79540241 -> ../../sda6 que é bom o suficiente, pois contém o " sda ", que se deve à conclusão" posso excluir sdb ". (Lembre-se, a intenção é que o sistema seja inicializado por um pendrive e todos os outros discos sejam triturados).
mideal 31/07