J'ai une image DD d'une carte SD de 4 Go qui a deux partitions, ces deux partitions n'utilisent qu'environ 800 Mo et en tant que tel, je souhaite réduire la taille de l'img fie.
Quelqu'un connaît-il un moyen de supprimer "l'espace libre" du fichier img?
Réponses:
Assurez-vous d'abord que l'espace libre est réellement vide et ne contient pas de restes de fichiers supprimés. La façon la plus simple d'y parvenir est de créer un énorme fichier sur le disque, ne contenant que des octets nuls, puis de le supprimer.
Ensuite, compressez-le avec un outil comme
gzip
ouxz
. Même aux niveaux de compression les plus bas, une longue série de zéros se comprime bien:Notez que vous devez décompresser l'image lors de la réécriture sur le disque. Cela le décompressera «en direct»:
Notez que le périphérique de sortie (sda) doit être de taille suffisante pour s'adapter à l' image d' origine , sinon les données seront perdues ou corrompues.
Une autre méthode, si vous souhaitez continuer à utiliser l'image - par exemple avec une machine virtuelle - consiste à convertir l'image brute en l'un des formats d'image utilisés par le logiciel de virtualisation; par exemple qcow2 pour Qemu, VDI pour VirtualBox ou VMDK pour VMware.
Notez que cela vous oblige toujours à préparer l'image en nettoyant l'espace libre en utilisant la méthode ci-dessus.
Mais s'il doit être réécrit sur un vrai disque, vous devez le reconvertir en image brute.
la source
resize2fs
ountfsresize
(Linux n'a pas d'outil pour FAT), avant de l'écrire sur le plus petit appareil, ou en créant un nouveau système de fichiers et en copiant uniquement les fichiers.L'utilisation
resize2fs
est beaucoup plus facileil vous sera d'abord demandé d'e2fsck - donc:
(l'image ne doit PAS être montée!)
Remarque: cela ne fonctionnera que si l'image est d'une seule partition, si c'est un périphérique de bloc entier avec plusieurs partitions, voir la réponse ci-dessus ...
la source
losetup --find --partscan xxx.img
pour configurer le fichier image comme périphérique de boucle. puis exécutezlsblk
pour trouver les partitions du périphérique de boucle.resize2fs
ne concerne queextN
les partitions de type. D'autres types de partitions nécessiteront d'autres outils.Je l'ai également essayé avec qemu-img , et cela a fonctionné comme un charme:
Nous redimensionnons le
test.img
pour le rendre 2G (2 Go).A fonctionné sans faille pour moi.
la source
df -h
affiche la taille d'origine. Comment est-ce possible?J'ai utilisé l'approche gparted avec mon ordinateur Ubuntu 16.10:
1) Mappez le fichier img à la prochaine partition de boucle disponible avec
losetup
, comme décrit dans les articles précédents comme ci-dessus2) Vérifiez avec
lsblk
quel lecteur de boucle votre fichier image est mappé, par exemple/dev/loop0
3) Exécuter
sudo gparted /dev/loop0
4) Rétrécir la ou les partitions de boucle comme jugé approprié; veuillez vous assurer que ces partitions sont démontées.
5) Exécutez
fdisk /dev/loop0
, puis entrezp
, cela vous montrera la taille du bloc et le numéro de bloc de fin des différentes partitions.6) Exécuter
dd if=/dev/loop0 of=shrunk_image_file.img
, appliquer à cette commande les optionsbs=[BlockSize]
etcount=[EndBlockNumberOfLastLoopPartition+1]
vous aurez un fichier image et rétrécis rightsized.la source