Comment réduire un fichier image après avoir alloué tout l'espace

13

Je suis en train d'expérimenter la sauvegarde d'une carte SD Raspberry Pi (Raspbian). J'utilise Win32DiskImager pour lire l'image (du lecteur de carte SD) sur mon disque dur, avec succès - mais maintenant le problème de taille. L'image est juste plus grande que la carte SD d'origine et ne peut être réécrite que sur une carte SD plus grande qui, si vous la sauvegardez, a le même problème.

Après avoir créé un fichier .img, comment puis-je supprimer à nouveau tout l'espace inutilisé? (est-ce parce que j'ai utilisé raspi-config pour allouer tout l'espace disponible à la racine?)

J'ai essayé de me faire une idée de l'apparence des partitions avec Cygwin, mais je n'arrive pas à faire fonctionner fdisk (-bash: fdisk: commande introuvable) - (après avoir lu l' image d'une carte 16 Go contenant de l'espace non partitionné sur la fin: Troncature possible? )

Renier Delport
la source

Réponses:

12

Donc, la meilleure façon que j'ai trouvée est d'utiliser GParted (vous pouvez utiliser un système d'exploitation Linux ou démarrer à partir d'un GParted Live USB). Il est assez simple de trouver des instructions détaillées sur la façon de faire chacune de ces étapes en détail, mais voici la méthode générale que j'ai trouvée fonctionner:

  1. Exécutez GParted, trouvez votre carte SD dans la liste des appareils et réduisez la partition principale aussi petite que possible.
  2. Prenez la valeur du dernier secteur de cette partition et multipliez-la par la taille du secteur (512 pour moi; je suppose que c'est standard, bien que vous puissiez vérifier cela dans les paramètres GParted de votre appareil): cela vous donnera la taille totale en octets copier.
  3. Divisez le nombre total d'octets par 4096 (arrondissez si vous en avez besoin - mieux vaut prendre un peu plus d'espace que pas assez), et cela vous donnera le «nombre» pour ensuite entrer la commande suivante sur le terminal sous Linux environnement (Vous pouvez probablement le faire à partir du terminal du système d'exploitation USB GParted Live ou dans Cygwin sans sudo tant que vous l'exécutez en tant qu'administrateur):

sudo dd if=/dev/mmcblk0 of=/path/to/your/file.img bs=4k count=<count>

Modifiez l'emplacement du périphérique d'entrée si nécessaire. Cela devrait vous donner un fichier image final qui est le plus petit possible, en omettant l'espace vide.

Mike Roberts
la source
Je peux vérifier que cela fonctionne. Je viens de l'essayer il y a quelques minutes pour passer d'une carte 8 Go à une carte 4 Go. Cela devrait fonctionner à condition que vos données soient plus petites que votre carte de destination.
PNDA
Trier a oublié ce post depuis que je suis parti. Je vais l'essayer à l'avenir. Il semble que ce soit un problème courant, alors merci pour votre contribution.
Renier Delport
Cela devrait être marqué comme la bonne réponse! Merci!
rodripf
de toute façon sur Windows?
Flash Thunder
1
Vous pouvez démarrer à partir d'un GParted Live USB.
Mike Roberts
7

Il existe un bel outil appelé pishrink qui réduit autant que possible la taille d'une image dd en réduisant la partition racine. Si vous démarrez l'image restaurée la première fois que la partition est étendue à sa taille maximale à nouveau. Si vous exécutez Windows, utilisez simplement votre Linux sur votre Raspberry pour réduire l'image.

framp
la source
0

La dernière version de Win32DiskImager a l'option Partitions allouées en lecture seule. Il écrit uniquement l'espace utilisé, pas vide.

  1. Rétrécir la partition sur la carte SD avec GParted.
  2. Créez une image avec Win32DiskImager à partir d'une carte plus grande.
  3. Écrivez l'image avec Win32DiskImager sur une carte plus petite en utilisant l'option mentionnée plus haut.
Pavol Fejko
la source
-1

La réponse est simple: vous ne pouvez pas. Si vous voulez réduire l'image, utilisez la compression, ce qui est le plus souvent (sur 'NIX gzip fonctionne bien). Vous trouverez de nombreuses discussions à ce sujet sur ce site.

L'alternative est de sauvegarder uniquement les fichiers. Mon approche est décrite ci-dessous. /raspberrypi//a/28087/8697

Milliways
la source
1
vous pouvez (si le contenu des données est plus petit que la nouvelle carte SD)
Wilf
2
La compression n'aidera pas. Ce n'est pas une question d'espace disque où se trouve le fichier IMG. C'est une question d'espace sur la carte SD où le fichier IMG doit être écrit
Thomas Weller
@Thomas La compression du fichier IMG le rendra plus petit afin qu'il s'adapte (espérons-le) à la carte SD sur laquelle vous souhaitez l'écrire .... Suis-je en train de manquer quelque chose?
user253751
@immibis: Vous pouvez compresser le fichier IMG pour qu'il utilise moins d'espace sur le disque dur de votre PC. Si vous écrivez les données compressées sur les cartes SD, elles ne démarreront pas. Les données doivent être au format correct pour démarrer et ce n'est pas au format gzip.
Thomas Weller
@Thomas Oh, je pensais que l'OP voulait stocker leurs sauvegardes sur une autre carte SD pour une raison quelconque, plutôt que de les restaurer.
user253751