Como encolher / redimensionar 32GB USB flash drive com 2GB de partição em arquivo de imagem de 2GB?

1

Procurei informações sobre como reduzir / redimensionar - ou diretamente dd - uma unidade flash USB de 32 GB que fiz para o meu Raspberry Pi em um arquivo img de 2G. Eu redimensionei as partições, há uma com o Win32 FAT de 64M e a partição do Linux é 2048Mb (2G), e tudo que eu quero é apenas um arquivo dd IMG de cerca de 2G.

Eu sei que existe o método de compactação Gzip, mas uma vez descompactado, ele descompacta um arquivo img de 32GB e, às vezes, não tenho muito espaço. Eu só quero ser capaz de dd o arquivo em uma unidade flash USB de 2GB, sem ter um arquivo 32G com apenas 2G usado nele. Entendi?

Além disso, estou usando um SSD e li que /dev/zero -o arquivo de imagem é meio prejudicial, por isso espero que haja uma maneira mais fácil de fazê-lo. Eu tenho Linux e Windows à minha disposição, por isso estou feliz em ouvir sugestões!

Atualização : Infelizmente eu cometi um erro e substituí a unidade flash USB por outra unidade, mas tenho todo o arquivo img que acabei de montar em /dev/loop0 e executei fdisk -l , aqui está a saída:

Disk flashrom32g.img: 29.8 GiB, 32010928128 bytes, 62521344 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xaebebc78

Device           Boot  Start     End Sectors Size Id Type
flashrom32g.img1        8192  137215  129024  63M  c W95 FAT32 (LBA)
flashrom32g.img2      137216 4331519 4194304   2G 83 Linux
    
por DARKGuy 26.03.2017 / 23:31

1 resposta

1

A parte relevante do seu pendrive leva exatamente 4331520 setores de 512 bytes (numerados de 0 a 4331519 ), então o comando deve ser:

dd if=/dev/your_usb_key of=/path/to/image.dd bs=512 count=4331520

Editar (para endereçar o comentário):

and why 4331520 if it's 4331519? +1 just because reasons?

Se os setores fossem numerados de 1 e o último fosse o 4331519 th, então haveria um total de 4331519 deles. Mas como eu disse, eles são numerados de 0 , é por isso que count=4331520 .

I feel uneasy with this kind of calculations, isn't there an automatic way to do it?

Francamente eu não sei. Eu tenho a tendência de pensar que se você precisa fazer tais truques, então você deve entender melhor o que você está fazendo. E se você entender, então você pode fazer as contas e você sabe as armadilhas, e você se sente desconfortável sem seus próprios cálculos.

something like DD but strip the empty/non-partitioned space?

Você não quer remover todo o espaço não particionado. Há MBR com tabela de partições no setor 0 . Seus setores 1..8191 podem conter código de bootloader.

Se houvesse GPT, haveria uma tabela de partições de backup no final do disco e também estaria no espaço não particionado.

Além disso, se suas partições tivessem espaço entre elas, sua ferramenta dd -like simplesmente não poderia ignorá-la, pois deslocaria efetivamente a última partição para o início da imagem e a tabela de partições (na imagem) tem que ser ajustado. Outra estratégia neste caso seria substituir este espaço de partição média por zeros enquanto escreve a imagem de saída como um arquivo esparso.

Mais uma armadilha: leia esta questão e minha resposta lá, então pense em como a ferramenta precisa ser sofisticada para ter sucesso tira o espaço não particionado dessa bagunça.

Em geral, você sempre pode criar imagens separadas do MBR (ou MBR + bootloader) e de cada partição. No seu caso, seria algo assim:

dd if=/dev/your_usb_key of=/path/to/image_MBR_bootloader.dd bs=512 count=8192
dd if=/dev/your_usb_key1 of=/path/to/partition1.dd
dd if=/dev/your_usb_key2 of=/path/to/partition2.dd

Se você deseja remover o espaço vazio (ou seja, o espaço mostrado por df ), use uma ferramenta que entenda o sistema de arquivos e trabalhe em nível de arquivos, não em setores de disco. Tenho certeza de que dd (ou algo como dd ) não é a ferramenta certa para esse tipo de trabalho.

how can I be so sure this would work without dumping it into a real drive for checking?

Aprenda, então um dia você poderá dizer "Eu sei o que estou fazendo". Ensaios e erros são partes do processo de aprendizagem. Eu suponho que despejar a imagem em um drive real para checar seria um bom teste.

    
por 26.03.2017 / 23:56