Você usa os nomes persistentes em /dev/disk/
ou software de nível superior que interage com o udev usando a API do libudev.
Eu percebi que nunca percebi isso completamente. O Linux mapeia dispositivos de armazenamento SATA e USB (e muitos outros tipos de) para /dev/sd[a-z]
arquivos de dispositivos na ordem em que foram "encontrados". Agora, dado que você sabe que, por exemplo, um cartão flash CF está conectado a uma máquina via SATA, como você determina qual arquivo de dispositivo ele possui? Claro que você poderia apenas olhar para dmesg
, mas e se você quiser fazer isso programaticamente? Analisando isso? Isso não é uma boa solução. O kernel deve fornecer uma API para descobrir isso e eu acho que deve ser simples. Mas até agora eu simplesmente não encontrei.
O Linux hoje em dia tem muitas informações do sistema gravadas no sistema de arquivos ( sysfs
, procfs
, etc
) onde você pode obter as informações necessárias para descobrir o arquivo do dispositivo. No entanto, isso depende do tempo em que os recursos foram ativados em tempo de compilação. Eu estou procurando uma solução que também funciona em um kernel mínimo, sem todas as coisas bonitas.
Você usa os nomes persistentes em /dev/disk/
ou software de nível superior que interage com o udev usando a API do libudev.