Como formatar uma partição dentro de um arquivo img?

8

Eu criei um arquivo img por meio do seguinte comando:

dd if=/dev/zero bs=2M count=200 > binary.img

É apenas um arquivo com zeros, mas posso usá-lo em fdisk e criar uma tabela de partições:

# fdisk binary.img

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x51707f21.

Command (m for help): p
Disk binary.img: 400 MiB, 419430400 bytes, 819200 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: 0x51707f21

e, digamos, uma partição:

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-819199, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-819199, default 819199): 

Created a new partition 1 of type 'Linux' and of size 399 MiB.

Command (m for help): w
The partition table has been altered.
Syncing disks.

Quando eu verifico a tabela de partições, obtenho o seguinte resultado:

Command (m for help): p
Disk binary.img: 400 MiB, 419430400 bytes, 819200 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: 0x7f3a8a6a

Device      Boot Start    End Sectors  Size Id Type
binary.img1       2048 819199  817152  399M 83 Linux

Portanto, a partição existe. Quando tento formatar esta partição via gparted, recebo o seguinte erro:

Não sei porque é que procura binary.img1 e não tenho ideia de como formatar a partição a partir do comando live.

Alguém sabe como formatá-lo usando o sistema de arquivos ext4?

    
por Mikhail Morfikov 14.06.2015 / 14:28

4 respostas

11

Você pode acessar a imagem do disco e suas partições individuais por meio do recurso de loopback. Você já descobriu que alguns utilitários de disco funcionarão (razoavelmente) de forma feliz em imagens de disco. No entanto, mkfs não é um deles (mas estranhamente mount é).

Aqui está a saída de fdisk -lu binary.img :

Disk binary.img: 400 MiB, 419430400 bytes, 819200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...

Device           Boot Start    End Sectors  Size Id Type
binary.img1            2048 819199  817152  399M 83 Linux

Para acessar a partição que você criou, você tem algumas opções

  1. A rota explícita

    losetup --offset $((512*2048)) --sizelimit $((512*817152)) --show --find binary.img
    /dev/loop0
    

    A saída /dev/loop0 é o nome do dispositivo de loop que foi alocado. O parâmetro --offset é apenas o deslocamento da partição ( Start ) multiplicado pelo tamanho do setor ( 512 ). Considerando que --sizelimit é o tamanho da partição, e você pode calcular da seguinte maneira: End-Start + 1, que é 819199-2048 + 1 = 817152, e esse número também deve ser multiplicado pelo tamanho do setor.

    Você pode usar /dev/loop0 como referência para a partição:

    mkfs -t ext4 -L img1 /dev/loop0
    mkdir -p /mnt/img1
    mount /dev/loop0 /mnt/img1
    ...
    umount /mnt/img1
    losetup -d /dev/loop0
    
  2. A rota implícita

    losetup --partscan --show --find binary.img
    /dev/loop0
    

    A saída /dev/loop0 é o nome do dispositivo de loop principal que foi alocado. Além disso, a opção --partscan diz ao kernel para varrer o dispositivo em busca de uma tabela de partições e atribuir dispositivos subsidiários de loop automaticamente. No seu caso com a única partição, você também obtém /dev/loop0p1 , que você pode usar como referência para a partição:

    mkfs -t ext4 -L img1 /dev/loop0p1
    mkdir -p /mnt/img1
    mount /dev/loop0p1 /mnt/img1
    ...
    umount /mnt/img1
    losetup -d /dev/loop0
    
por 14.06.2015 / 17:47
7

Existe outra maneira de fazer isso em geral, use kpartx ( não relacionado ao kde)

sudo kpartx -a binary.img

e agora você deve ter todos os dispositivos de partição definidos em /dev/mapper como loop0p1 , loop0p2 , ...

e depois

sudo mkfs.ext4 /dev/mapper/loop0p1

Optionnaly, quando estiver pronto, você também pode executar

sudo kpartx -d binary.img

para se livrar do loop0p? deivce

    
por 15.06.2015 / 09:33
3

I don't know why it looks for binary.img1

(… e depois para binary.img2 enterrado no comentário.)

Isso ocorre porque as ferramentas esperam que os nomes de arquivos sigam um padrão específico. Esse padrão é aquele usado pelos arquivos de dispositivos para discos e volumes de disco reais em seu sistema, a saber:

  • Um arquivo de dispositivo que abrange todo o disco é denominado sda (ou outra coisa). Isso é o que o fdisk espera usar.
  • Os arquivos de dispositivos para fatias individuais do disco, descritos por seu particionamento, são denominados sda1 , sda2 , sda3 e assim por diante. Isto é o que ferramentas como gparted esperam usar quando dizem mkfs para fazer coisas em volumes de disco individuais .

Naturalmente, os arquivos comuns não se sobrepõem da maneira que os arquivos dos dispositivos de disco fazem. As discussões que envolvem o sistema de arquivos de loopback que você viu são sobre como usar um único arquivo de imagem de disco inteiro e usar o loopback para criar os arquivos 1 , 2 , 3 e assim por diante que refletem as fatias individuais dentro dele , uma vez que o layout de partição desejado foi gravado na tabela de partições.

    
por 14.06.2015 / 17:01
0

Embora este tópico não esteja diretamente relacionado, ele menciona muitas informações semelhantes e relacionadas.

Wiki do Debian | Raspberry Pi e qemu-user-static

Se você não puder usar apt para instalar alguns dos comandos mencionados nesta postagem, tente usar apt-cache search [package_name] . Isso pode não gerar resultados se o comando vier de um pacote com um nome diferente.

Por exemplo, losetup anteriormente poderia ser instalado como losetup usando apt install losetup , mas agora é parte de util-linux no repositório do Ubuntu. A maneira como você descobre qual pacote atua como um contêiner para outro pacote, você deve usar a pesquisa para o repositório on-line para sua distribuição Linux. Ou, se você precisar instalá-lo de outra fonte, use um mecanismo de pesquisa da Web.

Alguns pacotes valem a pena conferir ...

util-linux genisoimage dosfstools squashfs-tools fsarchiver xfsprogs reiserfsprogs reiser4progs jfsutils ntfsprogs btrfs-tools

Toda distribuição Linux também tem seus próprios manpages online. Às vezes é mais fácil usar as páginas de manual do que um tutorial. As páginas de manual também lhe dirão todas as opções e parâmetros de comando. Um tutorial geralmente foca apenas nos usados.

    
por 22.04.2018 / 14:44