Estou tentando criar manualmente uma distro no meu cartão SD, começando pela criação de partições, e está falhando...
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 119.4G 0 disk
vda 254:0 0 12G 0 disk
├─vda1 254:1 0 300M 0 part /boot
└─vda2 254:2 0 11.7G 0 part /
$ sudo dd if=/dev/zero of=/dev/sda bs=1M count=32
32+0 records in
32+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 0.0289816 s, 1.2 GB/s
$ sudo parted -s /dev/sda mklabel gpt
$ sudo parted -s /dev/sda mkpart fat32 32MB 512MB
Error: The location 512MB is outside of the device /dev/sda.
Qual poderia ser a causa potencial para isso?
$ sudo parted /dev/sda unit mib print free
Model: (file)
Disk /dev/sda: 32.0MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
0.02MiB 32.0MiB 32.0MiB Free Space
E por alguma razão, agora há uma partição sda1 aparecendo ao entrar em lsblk
. Acho que isso acontece assim que o rótulo está sendo criado.
$ lsblk
...
sda 8:0 1 119.4G 0 disk
└─sda1 8:1 1 119.4G 0 part
...
[editar]
Talvez eu devesse ter mencionado que estava fazendo tudo isso em uma VM. Por alguma razão, o fdisk na VM encontraria uma partição fantasma no momento em que eu adicionasse um rótulo. Ela deveria ter sido excluída, mas lá está.
Consegui excluir a partição desabilitando o cartão SD da VM, reinseri-lo e iniciar o gdisk no meu host.
Infelizmente, o problema continua, agora sem as partições fantasmas.
Vamos analisar o que você nos mostrou
O seu dispositivo
/dev/sda
é mostrado pela primeira saída como tendo aproximadamente 120 GiBEm seguida, você limpa os primeiros 32 MiB do dispositivo, preparando-o para uma nova tabela de partição
O que realmente aconteceu aqui é que em algum ponto antes desta etapa o nó do dispositivo
/dev/sda
foi removido ou ainda não está presente. Então vocêdd
cria um arquivo que tem exatamente 32 MiB de comprimento. Daqui em diante você está usando um arquivo em vez do dispositivo. Você pode provar isso olhando para a saída dels -l /dev/sda
e vendo que é um arquivo em vez de um dispositivo de bloco.Em seguida, prepare
/dev/sda
uma tabela de partição GPT. (Mas observe que este é seu arquivo de 32 MiB, não o dispositivo de 120 GiB.)Em seguida, você tenta criar uma partição começando em 32 MB (não 32 MiB, então você tem uma pequena quantidade de espaço disponível para o comando tentar executar) e terminando em 512 MB, o que teria um tamanho de 480 MB. No entanto, o "disco" não é grande o suficiente para ocupar uma partição de 480 MB, então o comando cria uma partição tão grande quanto possível - aproximadamente 88 MB - executando do ponto inicial especificado até o final do disco
Agora você pede o espaço livre, e como só falta o segmento de 0 a 32 MB é isso que ele te mostra
Quando você voltar a isso, esteja ciente de suas unidades - você pode querer dizer
parted
para usar 2 unidades n (MiB, GiB, etc.) em vez de 10 unidades n (MB, GB, etc.) para que corresponda à saída padrão delsblk
. Você faria isso com ounit
subcomando. Por exemplo,