Como redimensionar o tamanho de imagens de cartão

redimensionar o tamanho de imagens

Quem nunca passou pelo problema de baixar uma imagem de cartão sd da internet mas a dita cuja tem o tamanho maior do que um cartão que você tem disponível?

Aqui vai um passo-a-passo (em 4 etapas) de como redimensionar essa imagem.

Primeiro certifique-se que o novo tamanho da partição irá comportar todos os arquivos presentes, ou seja, tome cuidado para não reduzir muito o tamanho e acabar perdendo dados.

Não se esqueça de fazer uma cópia do seu arquivo de imagem original.

Vamos fazer um exemplo onde queremos transformar uma imagem de 8G em uma de 4G.

1º Passo: Montar a imagem

Primeiramente vamos conhecer o layout das partições da nossa imagem:

$ sudo losetup -f --show some_image.img
/dev/loop0
$ sudo parted /dev/loop0 unit mb print
Model: Loopback device (loop)
Disk /dev/loop0: 8069MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
1      0.00MB  4.19MB  4.19MB  primary
2      4.19MB  58.7MB  54.5MB  primary  fat32        boot, lba
3      58.7MB  8069MB  8010MB  primary  ext4

Aqui vemos que a imagem é de 8G (8069MB) e possui três partições.

Iremos diminuir a partição 3 (ext4) para que a imagem caiba em um cartão de 4G.

Para isso vamos modificar o tamanho da partição 3, redimensionar o sistemas de arquivo dela e depois encolher o arquivo de imagem.

2º Passo: Redimensionar a partição

Vamos utilizar a ferramenta parted:

$ sudo parted /dev/loop0

GNU Parted 2.3

Using /dev/loop0

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted)

Digitando “print” temos as seguintes informações:

(parted) print                                                            
Model: Loopback device (loop)
Disk /dev/loop0: 8069MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
1      512B    4194kB  4194kB  primary
2      4194kB  58.7MB  54.5MB  primary  fat32        boot, lba
3      58.7MB  8069MB  8010MB  primary  ext4

(parted)

Para redimensionar a partição 3 primeiro teremos que removê-la:

(parted) rm 3

E agora vamos recriá-la passando o seu início (58.7MB) e fim (3965MB que nos dá o total de 4G)

(parted) mkpart primary 58.7 3965

Conferindo:

(parted) print                                                            
Model: Loopback device (loop)
Disk /dev/loop0: 8069MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
 
Number  Start   End     Size    Type     File system  Flags
1      512B    4194kB  4194kB  primary
2      4194kB  58.7MB  54.5MB  primary  fat32        boot, lba
3      58.7MB  3965MB  3906MB  primary  ext4

(parted)

Para continuar precisaremos da informação da quantidade de setores da partição 3 e em qual setor ela inicia:

(parted) unit s                                                           
(parted) print                                                            
Model: Loopback device (loop)
Disk /dev/loop0: 15759360s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start    End       Size      Type     File system  Flags
1      1s       8191s     8191s     primary
2      8192s    114687s   106496s   primary  fat32        boot, lba
3      114688s  7743487s  7628800s  primary  ext4

(parted)

Sabemos que a partição 3 possui 7628800 setores (de 512 bytes) e que seu início é no setor 114688.

Vamos sair do parted:

(parted) quit

3º Passo: Redimensionar o sistema de arquivos

Para isso temos que montar a partição 3 e precisamos saber o offset em bytes do seu início:

$ echo '114688 * 512' | bc
58720256
$ sudo losetup -f --show -o 58720256 some_image.img
/dev/loop1

Antes de redimensionar vamos verificar e corrigir possíveis erros que estejam presentes na partição com a ferramenta e2fsck:

$ sudo e2fsck -f /dev/loop1
e2fsck 1.42.5 (29-Jul-2012)
rootfs: recovering journal
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
rootfs: 146271/489600 files (0.1% non-contiguous), 619173/1955584 blocks

Agora vamos calcular o novo tamanho da partição dividindo a quantidade de setores (7628800) por 8 (blocos de 4KB dividido por 512 bytes/setor), assumindo que estamos usando blocos de 4KB no sistema de arquivos.

$ echo '7628800 / 8' | bc
953600

E usaremos a ferramenta resize2fs para redimensionar a partição 3:

$ sudo resize2fs /dev/loop1 953600
resize2fs 1.42.5 (29-Jul-2012)
Resizing the filesystem on /dev/loop1 to 953600 (4k) blocks.
The filesystem on /dev/loop1 is now 953600 blocks long.

Podemos remover os loopback devices agora:

$ sudo losetup -d /dev/loop0 /dev/loop1

4º Passo: Redimensionar o arquivo de imagem

Sabemos que nossa partição 3 termina no marco de 3965MB que é o tamanho total da imagem que queremos (4G). Para encolher o arquivo de imagem usamos o comando truncate:

$ truncate -s 3965MB some_image.img

Verificando o resultado do trabalho:

$ sudo parted some_image.img unit mb print
Model:  (file)
Disk /home/dsueiro/tmp/some_image.img: 3965MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      0.00MB  4.19MB  4.19MB  primary
 2      4.19MB  58.7MB  54.5MB  primary  fat32        boot, lba
 3      58.7MB  3965MB  3906MB  primary  ext4

Agora você já pode usar o dd para gravar a nova imagem no teu cartão sd.

Se caso seja desejado encolher para uma imagem de 2G devemos usar o marco final de 1967MB e repetir os procedimentos e cálculos feitos acima.

NOTA: se o comando resize2fs imprimir a mensagem:

resize2fs: New size smaller than minimum

Significa que você está tentando criar um sistema de arquivos menor do que o tamanho mínimo permitido.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
4 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Joselito Junior
Membro
25/04/2025 09:39

Ótimo tutorial, 12 anos depois ainda funciona perfeitamente.

Roberto
Roberto
10/05/2019 18:48

Olá, será que alguém pode me ajudar
tenho um cartão de 256 GB de celular que estava com 85 GB, funcionava muito bem e rápido aí deu um problema e apagou tudo
usei o recuvera e voltou zerado, mas agora não consigo carregar com mais de 17 GB
O que posso fazer para restaurá-lo?

Edson
Edson
29/10/2018 17:11

Excelente dica e funciona perfeitamente ! Parabéns.

Matheus Quick
Matheus Quick
12/03/2017 16:04

Boa dica.

Home » Linux Embarcado » Como redimensionar o tamanho de imagens de cartão

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: