Normalmente, o Windows coloca a primeira partição no setor 2048. No entanto, encontrei outros lugares diferentes para os quais preciso perguntar a você:
- Por que os fabricantes geralmente colocam partições em lugares diferentes? (setores: 2048, 65536, 131072) Quais são as decisões de engenharia de que a partição ficará em um local específico? Será que os blocos de memória em pendrives ou em cartões SD são de algum tamanho específico?
- Se eu colocar a partição em um setor diferente do fabricante - vejo corretamente uma velocidade de gravação mais baixa? Se sim, é porque existem blocos de memória no cartão/pendrive com limites específicos?
Ī̲ não abordará o ponto 1. em profundidade porque a presunção de que os fabricantes devem colocar a primeira partição no mesmo deslocamento não é substanciada. Afinal, eles poderiam comercializar dispositivos para diferentes propósitos.
Quanto ao ponto 2., uma coisa importante não é o deslocamento da partição em si, mas o layout resultante do sistema de arquivos. A maioria dos dispositivos de estado sólido modernos usa setores físicos de 4096 bytes , embora finjam que o tamanho do setor é de 512 bytes. Nesse caso, você obviamente pode degradar visivelmente o desempenho, por exemplo:
A última possibilidade certamente será alcançada se você criar um sistema de arquivos no estilo Unix a partir de um deslocamento (em “setores lógicos”) diferente de um múltiplo de 8. O AFAIK NTFS usa um conceito de layout de dados semelhante aos sistemas de arquivos Unix (como ext2/3 /4 e UFS), o que não é o caso do FAT. Para o FAT, colocar o setor inicial em offset divisível por 8 não garante um layout correto dos chamados clusters , portanto, cuidados especiais devem ser tomados.
A pergunta é brevemente respondida aqui:
https://pawitp.medium.com/block-alignment-on-sd-cards-cf09dca42439
Citar:
Acho isso intrigante, pois, como usuário de computador, sempre vi o cartão SD como um dispositivo de armazenamento bruto onde ele armazena bytes e você pode colocar qualquer tipo de dados e qualquer tipo de sistema de arquivos nele. Este é um elogio à camada de abstração que funciona tão bem que nunca me preocupei em olhar sob o capô para saber como funcionam os cartões SD.
Depois de mais pesquisas, descobri que a SD Card Association na verdade especifica o sistema de arquivos padrão a ser usado com o cartão SD, e não é apenas “usar FAT32”, mas na verdade especifica como o sistema de arquivos deve ser alinhado no cartão.
Parece que, a partir do SDHC, você só pode gravar no cartão SD em setores de 512 bytes, portanto, não pode escrever apenas um byte, deve informar ao cartão SD todo o setor (512 bytes) que deseja substituir o conteúdo com. Se você deseja escrever apenas um byte, deve ler os 512 bytes, alterar um byte na memória e, em seguida, escrever de volta todos os 512 bytes.
O sistema de arquivos FAT32 também possui tamanho de cluster. Isso significa que cada setor de 4 KB no disco é atribuído a apenas um arquivo (claro, um arquivo pode abranger vários setores). De acordo com a Microsoft, para a maioria dos tamanhos de partição, o tamanho do cluster é de 4 KB, que cabe exatamente em 8 setores do cartão SD.
Portanto, ao gravar um cluster, você pode emitir comandos de gravação diretamente para 8 setores.
Quando quiser gravar no cluster 1000, basta gravar no setor 8000–8007 sem se preocupar com os dados anteriores nesses setores. Agora, o que acontece quando você cria uma partição sem estar ciente da idiossincrasia do armazenamento subjacente. Provavelmente, o cluster no sistema de arquivos não corresponde ao setor no cartão SD. Isso resulta no cluster abrangendo 9 setores em vez de 8.
Em gravações desalinhadas, você deve tratar os setores 8000 e 8008 de maneira especial. No exemplo acima, você precisaria emitir um comando de leitura para o setor 8000 e 8008 para sobrescrevê-los parcialmente (você precisa preservar a primeira parte do setor 8000 e a última parte do setor 8008, pois possui dados de clusters diferentes). Então, no final, você precisa ler 2 setores e escrever 9 setores, o que é menos eficiente.
No grande esquema das coisas, os computadores têm muita memória para ser usada para armazenar em cache esses dados e os arquivos geralmente abrangem vários clusters contínuos, portanto, o problema é menos grave. Se você precisar escrever um cluster, são 11 comandos em vez de 8 (37% a mais de comandos). Mas se você precisar escrever 1.000 clusters contínuos (por exemplo, um arquivo de 4 MB), são 8.003 comandos em vez de 8.000 (0,037% a mais), então o problema não é tão sério.
No entanto, se você estiver em um microcontrolador com memória limitada e espaço de armazenamento de código, isso se tornará um problema maior. Você não apenas precisará de memória adicional para armazenar dados em cache para gravação, mas seu código será mais complexo, pois precisa lidar com o caso.
Se for especificado que o sistema de arquivos FAT32 em cartões SD deve ter clusters alinhados aos setores dos cartões SD, seu código pode simplesmente ignorar esse caso extremo e se recusar a trabalhar com cartões SD formatados incorretamente. Assim, posso ver por que a SD Card Association deseja especificar o sistema de arquivos até este nível.