Suponha que eu conectei uma unidade USB ou um SSD nvme em um computador, como o computador sabe a quantidade total de setores que há na unidade? Quero dizer, o disco sabe disso sozinho? Se ele souber, ele simplesmente dirá ao computador? Preciso disso para um script que estou escrevendo, não posso importar nenhum pacote para o script, então preciso fazer isso da maneira bruta, uma abordagem que pensei é tentar gravar no disco e registrar o número de setores que falharam na gravação porque estão fora do limite.
relate perguntas
-
Sistema que pode ler o disco rígido e gravar exclusivamente na RAM?
-
Devo substituir/atualizar meu disco rígido após 5 anos?
-
Devo particionar um SSD secundário (sem sistema operacional) usado para armazenamento? [fechado]
-
A execução do CrystalDiskMark causa BSOD no Windows 10
-
O fenômeno 'Write cliff' só acontece com discos SSD?
O controlador do disco foi programado para saber sua capacidade e irá reportá-la ao SO quando solicitado. É parte do mesmo protocolo que define os comandos básicos de "leitura/escrita".
Por exemplo, dispositivos NVMe usam o protocolo NVMe – daí o nome – que tem os comandos 'Identificar Controlador' e 'Identificar Namespace' (e provavelmente alguns relacionados).
Da mesma forma, os pendrives usam o protocolo SCSI, que também tem um comando 'INQUIRY'; os discos SATA e IDE têm comandos semelhantes no protocolo ATA.
No entanto, embora o envio de comandos SCSI ou NVMe brutos geralmente seja possível, o mecanismo para fazer isso depende do sistema operacional – por exemplo, ioctl em /dev/sg0 para SCSI no Linux, etc. – e universalmente requer direitos de root ou administrador.
É possível fazer isso por meio do Python, mas você terá que implementar todos os três protocolos manualmente (e provavelmente fará coisas erradas, como suporte para vários LUNs em dispositivos USB) e levará muito mais tempo do que apenas perguntar ao sistema operacional — já que, afinal, o sistema operacional já coletou essas informações. (Por exemplo, no Linux, você pode consultar o udev.)