Tengo una imagen DD de una tarjeta SD de 4GB que tiene dos particiones, estas dos particiones solo están usando aproximadamente 800 MB y, como tal, deseo reducir el tamaño de la imagen.
¿Alguien sabe de una manera de eliminar el "espacio libre" del archivo img?
Respuestas:
Primero asegúrese de que el espacio libre esté realmente vacío y que no contenga restos de archivos eliminados. La forma más fácil de lograr esto es crear un archivo enorme en el disco, que contenga solo bytes nulos, y luego eliminarlo.
Luego comprímalo con una herramienta como
gzip
oxz
. Incluso en los niveles de compresión más bajos, una larga serie de ceros se comprime bien:Tenga en cuenta que debe descomprimir la imagen al volver a escribirla en el disco. Esto lo descomprimirá 'en vivo':
Tenga en cuenta que el dispositivo de salida (sda) debe tener el tamaño suficiente para adaptarse a la imagen original ; de lo contrario, los datos se perderán o se dañarán.
Un método alternativo, si desea seguir usando la imagen, por ejemplo, con una máquina virtual, es convertir la imagen en bruto en uno de los formatos de imagen utilizados por el software de virtualización; por ejemplo, qcow2 para Qemu, VDI para VirtualBox o VMDK para VMware.
Tenga en cuenta que esto aún requiere que prepare la imagen limpiando el espacio libre utilizando el método anterior.
Pero si va a volver a escribirse en un disco real, debe volver a convertirlo en una imagen sin formato.
fuente
resize2fs
ontfsresize
(Linux no tiene ninguna herramienta para FAT), antes de escribirla en el dispositivo más pequeño, o al crear un nuevo sistema de archivos y copiar solo los archivos.Usar
resize2fs
es mucho más fácilprimero se le pedirá que e2fsck, así que:
(¡La imagen NO se debe montar!)
Nota: esto solo funcionará si la imagen es de una sola partición, si es un dispositivo de bloque completo con múltiples particiones, vea la respuesta anterior ...
fuente
losetup --find --partscan xxx.img
para configurar el archivo de imagen como un dispositivo de bucle. luego ejecutelsblk
para encontrar las particiones del dispositivo de bucle.resize2fs
son solo paraextN
particiones de tipo. Otros tipos de particiones requerirán otras herramientas.También lo probé con qemu-img , y funcionó de maravilla :
Estamos cambiando el tamaño
test.img
para que sea 2G (2GB).Funcionó sin problemas para mí.
fuente
df -h
muestra el tamaño original. ¿Cómo es esto posible?He usado el enfoque separado con mi computadora Ubuntu 16.10:
1) Asigne el archivo img a la siguiente partición de bucle disponible
losetup
, como se describe en publicaciones anteriores como se indica arriba2) Compruebe con
lsblk
qué unidad de bucle está asignado su archivo de imagen, p. Ej./dev/loop0
3) Ejecutar
sudo gparted /dev/loop0
4) Reducir la (s) partición (es) de bucle según se considere apropiado; asegúrese de tener estas particiones desmontadas.
5) Ejecute
fdisk /dev/loop0
, luego ingresep
, esto le mostrará el tamaño del bloque y el número de bloque final de las diversas particiones.6) Ejecutar
dd if=/dev/loop0 of=shrunk_image_file.img
, aplicar a ese comando las opcionesbs=[BlockSize]
ycount=[EndBlockNumberOfLastLoopPartition+1]
tendrá un archivo de imagen reducido y de tamaño correcto.fuente