mkfs.ext4: blocos inválidos deslocados = X no dispositivo device.img

1

Meu objetivo é criar um arquivo regular e, dentro dele, fazer uma partição e sistemas de arquivos (literalmente, um disco rígido virtual) e, finalmente, montá-lo, então eu fiz:

sudo dd if=/dev/zero of=imagem-zero.img count=20480000

Para criar o arquivo com aproximadamente 20 Gb. Então particionei com cfdisk , depois disso o status do arquivo foi:

$ gdisk -l imagem-zero.img

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk imagem-zero.img: 40960000 sectors, 19.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 544A9633-7FA3-4BE8-BEE7-612C151A4504
Partition table holds up to 128 entries
First usable sector is 2048, last usable sector is 40959966
Partitions will be aligned on 2048-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        16779263   8.0 GiB     8304  
   2        16779264        40959966   11.5 GiB    8302  

Agora, quero tornar o sistema de arquivos ext4 nessas duas partições, mas estou com a mensagem de erro no título da pergunta:

$ sudo mkfs.ext4 imagem-zero.img offset=$((2048*512))
mke2fs 1.43.4 (31-Jan-2017)
mkfs.ext4: invalid blocks 'offset=1048576' on device 'imagem-zero.img'

$ sudo mkfs.ext4 imagem-zero.img offset=$((2048))
mke2fs 1.43.4 (31-Jan-2017)
mkfs.ext4: invalid blocks 'offset=2048' on device 'imagem-zero.img'

Minha pergunta é, como encontrar o deslocamento correto para fazer o sistema de arquivos em ambas as partições?

    
por Fabiotk 02.10.2018 / 04:46

2 respostas

3

Você acabou de esquecer de usar a opção -E

Além disso, sugiro não usar sudo , quando não for necessário.

  1. Crie um arquivo zerado, sem necessidade de sudo aqui:

    dd if=/dev/zero of=image-zero.dd count=20480000 status=progress
    
  2. Particione a imagem zerada com cfdisk como quiser, sem necessidade de sudo aqui:

    cfdisk image-zero.dd
    
  3. Crie o sistema de arquivos na (s) partição (ões) usando, sem necessidade de sudo aqui:

    mkfs.ext4 image-zero.dd -E offset=$(( 512 * 2048 ))
    
  4. Crie um diretório para o ponto de montagem:

    mkdir mnttest
    
  5. Monte a imagem com, observe que há necessidade de sudo aqui:

    sudo mount -t ext4 -o offset=$(( 512 * 2048 )) image-zero.dd ./mnttest
    

Testado no Linux Mint 19.

Como encontrar compensações adequadas

Sua imagem tem:

  • Tamanho do setor lógico: 512 bytes

  • Iniciar setor da primeira partição: 2048

  • Iniciar setor da segunda partição: 16779264

Cálculo:

Multiplique o tamanho do setor lógico com o setor Iniciar de uma partição e vamos fazer as contas com o seu shell.

Resultados:

  • Primeira partição: offset=$(( 512 * 2048 ))

  • 2ª partição: offset=$(( 512 * 16779264 ))

por 02.10.2018 / 09:23
0

Supondo que você poderia criar o sistema de arquivos com a opção offset= , como você o usaria?

A página man diz

-E extended-options

Set extended options for the filesystem. Extended options are comma separated, and may take an argument using the equals ('=') sign.

offset=offset

Create the filesystem at an offset from the beginning of the device or file. This can be useful when creating disk images for virtual machines.

Então a sintaxe correta seria

sudo mkfs.ext4 imagem-zero.img -E offset=$((2048))

Isso permitiria que você criasse o sistema de arquivos, mas provavelmente também desejaria gravar alguns arquivos. Então é melhor usar um dispositivo de loop.

losetup -P -f imagem-zero.img

Isso lhe dará /dev/loopX e partições /dev/loopXp0 , /dev/loopXp1 . Você pode usar mkfs nessas partições, montá-las e gravar arquivos nessas partições. Depois de desmontar as partições, faça

losetup -d /dev/loopX
    
por 02.10.2018 / 07:09