Estou tentando melhorar um script de instalação com seleção interativa de discos de origem e de destino. Atualmente, ele obtém a lista de entradas de / sys / block e as filtra através de sr [0-9] | sd [az] | hd [az] | scd [0-5] - excluindo de forma efetiva outros tipos apropriados de dispositivos. Minha ideia era remover a máscara codificada e a abordagem com um método mais geral. Como um exemplo de resultado satisfatório, lsblk
funciona conforme o necessário por padrão, e eu achei que seria tão simples simplesmente examinar suas origens para copiar a lógica, mas isso não aconteceu no final das contas.
De acordo com a função set_cxt()
, o dispositivo é excluído se tiver tamanho de zero, ou seja, não-SCSI, que por sua vez é verificado por sysfs_blkdev_scsi_get_hctl()
- o que eu não consegui totalmente através de: é suposto inspecionar algo (ou seja, HCTL - Host, Canal, Target, LUN) na subárvore device , que é provavelmente representada por scsi_device e scsi_disk , no entanto, não existe nenhum scsi na subárvore hda de um dispositivo de cartão de memória, por exemplo, nem existe um dispositivo subárvore em etherd! e42.0 de um armazenamento ATA-over-Ethernet, ainda que eles sejam incluídos na saída lsblk
por padrão.
O que mais alguém pode verificar para filtrar confiavelmente dispositivos fictícios como ram15 ? Esses são pré-criados em grandes números, com tamanho > 0 e ro = 0, tornando difícil distingui-los dos discos comuns. Em termos simples, o resultado deve idealmente ser idêntico ao lsblk -d -n -o NAME
- como último recurso, vou apenas analisar essa saída, mas eu só queria entender melhor as coisas.
Tags linux block-device lsblk