Ubuntu 16.04: Uma imagem de cartão SD de 64 GB foi criada com o comando:
date; sudo sh -c 'pv /dev/mmcblk0 >rpi4_Ubuntu18.1_64GB.image'; date
O cartão SD rasbperry pi é equipado com o Ubuntu 18.1
Um laptop Ubuntu 16.04 pode:
- montar o arquivo .image?
- executar zerofree no ponto de montagem do arquivo .image?
- desmontar o arquivo .image?
Estou ciente de que é possível restaurar o arquivo de imagem para o cartão SD e processar o cartão com zerofree e tirar a imagem novamente. Seria bom poder processar vários arquivos .image sem restaurá-los no cartão SD.
ATUALIZAÇÃO: resultados do teste
Imagem montada com sucesso em /dev/loop9p2:
$ sudo losetup -P /dev/loop9 rpi4_Ubuntu18.1_64GB.image
$ ls -l /dev/loop9*
brw-rw---- 1 root disk 7, 9 Feb 2 19:12 /dev/loop9
brw-rw---- 1 root disk 259, 0 Feb 2 19:12 /dev/loop9p1
brw-rw---- 1 root disk 259, 1 Feb 2 19:12 /dev/loop9p2
falha zero livre:
$ zerofree -v /dev/loop9p2
zerofree: failed to open filesystem /dev/loop9p2
zero livre necessário sudo
:
$ sudo zerofree -v /dev/loop9p2
14346339/14348998/15073019
- 14346339 número de blocos diferentes de zero encontrados
- 14348998 número de blocos livres dentro do sistema de arquivos
- 15073019 número total de blocos dentro do sistema de arquivos
Bônus: reduza o tamanho da imagem com script pishrink
zerofree
opera em um sistema de arquivos compatível, não importa qual seja o meio de armazenamento subjacente. A versão dozerofree
meu sistema Debian 10 suportaext2
,ext3
eext4
sistemas de arquivos, então se o sistema de arquivos usado no cartão SD for um desses, a resposta seria sim .Mas parece que você imaginou o cartão inteiro, que pode ter mais de uma partição nele. Se for esse o caso, você não poderá apenas "montar o arquivo de imagem", pois o comando mount lida apenas com um sistema de arquivos por vez. E em uma imagem de disco inteiro, a tabela de partições geralmente ocupa algum espaço no início do disco, portanto, talvez você não consiga acessar o primeiro sistema de arquivos na imagem tentando montar a imagem de cartão inteiro diretamente.
Se o seu sistema tiver um
losetup
comando que suporte a-P
opção, você poderia fazer umlosetup -P /dev/loop0 rpi4_Ubuntu18.1_64GB.image
, que lhe daria dispositivos como/dev/loop0p1
,/dev/loop0p2
etc. - um para cada partição no arquivo de imagem. Você pode então montar cada um desses dispositivos de partição e executázerofree
-los, depois desmontar elosetup -d /dev/loop0
desconectar o dispositivo de loop.Se o seu
losetup
comando não suportar a-P
opção, existe uma alternativa: akpartx
ferramenta (às vezes empacotada separadamente, às vezes como parte dasdevice-mapper-multipath
ferramentas) pode criar mapeamentos para partições individuais. Nesse caso, você usaria primeirolosetup /dev/loop0 rpi4_Ubuntu18.1_64GB.image
para conectar o dispositivo de loop e,kpartx -a /dev/loop
em seguida, criar dispositivos de mapeamento para cada partição detectada nele. Os dispositivos de partição serão nomeados de forma um pouco diferente neste caso: eles serão/dev/mapper/loop0p1
etc. A montagem ezerofree
o procedimento seriam os mesmos, mas a limpeza após a desmontagem do sistema de arquivos também exigiria duas etapas: primeirokpartx -d /dev/loop0
excluir dispositivos de mapeamento de partição e, em seguida,losetup -d /dev/loop0
para excluir o dispositivo de loop principal.