Image d'une carte 16 Go contenant à la fin de l'espace non partitionné: Troncature possible?

18

Je voulais préparer une distribution pour quelques amis.
Comme je n'avais rien d'autre à traîner, j'ai utilisé une carte SD de 16 Go.

J'ai commencé avec l'image Debian Weezy 2 Go par défaut et je n'ai fait aucun redimensionnement.
Maintenant, comme j'ai terminé, je voulais créer une image de ce que j'ai fait, mais j'obtiens un fichier de 16 Go, contenant à la fin 14 Go d'espace non partitionné (non partitionné et libre) .

[J'ai utilisé Windows // Win32DiskImager car je n'ai rien de gratuit à coller dans le rPI en ce moment]

Puis-je simplement tronquer le fichier image juste derrière l'espace partitionné et transférer la partie principale sur une carte plus petite, alors?

Nippey
la source
2
Si vous avez accès à un ordinateur Linux, exécutez dd if=/dev/path/to/SD/card of=~/SpecialImage.img, puis installez GParted et exécutez gparted ~/SpecialImage.img. Une fois que GParted ouvre votre .imgfichier, redimensionnez simplement les partitions à votre guise! (Les deux commandes doivent être exécutées en tant que root, elles sudo sudevraient vous fournir ce dont vous avez besoin. Lorsque vous passez $à un #, vous êtes Root. Attention, il s'agit de l'équivalent Linux de Dieu.) les outils dont vous aurez besoin. L'utilisation de GParted rend tout plus simple et plus facile à réussir.
JamesTheAwesomeDude
Veuillez lire attentivement ma question.
Nippey
Oui, j'ai lu votre question et je peux vous dire que tronquer une image disque est dangereux. Bien sûr, vous pouvez simplement couper les derniers octets d'une image, mais il n'y a aucune garantie que vous ne couperez pas accidentellement des fichiers, d'autant plus que Linux espère intentionnellement ses fichiers . De plus, il peut y avoir des métadonnées importantes à la fin du système de fichiers ou quelque chose comme ça. Il est globalement plus sûr d'utiliser les utilitaires de redimensionnement du système de fichiers appropriés que d'essayer de couper vous-même la fin d'un fichier.
JamesTheAwesomeDude
1
Eh bien, mais je parle d'espace non partitionné. Même Linux ne mettra aucune donnée sur l'espace disque marqué comme non partitionné mais restera dans le bloc comme écrit dans la table de partition. Ma préoccupation était causée par le format du fichier image: Il se peut que le fichier image ait des métadonnées à la fin du fichier, donc j'étais inquiet de couper les informations du fichier. (J'espère que mon commentaire précédent n'a pas semblé trop dur, sry;)
Nippey
Ohh, je comprends ce que tu dis maintenant. Si vous vous inquiétez de tout espace libre de fin corrompu, exécutez GParted sur l'image après l'avoir tronquée. Il listera probablement la dernière zone comme "non allouée" ou "corrompue" - créez une nouvelle partition "non formatée" dans cet espace. Ensuite, vous n'aurez aucun problème. :)
JamesTheAwesomeDude

Réponses:

33

J'ai finalement trouvé une ressource qui explique ma question.

http://softwarebakery.com/shrinking-images-on-linux

Court:

Oui, la troncature est possible!

Résumé du processus:

Extraire les informations de partition de l'image en utilisant fdisk:

$ fdisk -lu image.img
Disk image.img: 4096 MB, 4096000000 bytes, 8000000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000a1bc7

      Device Boot      Start         End      Blocks   Id  System
image.img1              2048     5872026     5869978    b  W95 FAT32

Nous voyons que la partition a une taille d'environ 2,8 Go (5872026 * 512), le reste n'est pas partitionné .

Ainsi, tout ce qui se trouve après la fin de la partition peut être supprimé.
Cela se fera avec l'outil truncate. N'oubliez pas d'ajouter 1 au nombre de secteurs, car les numéros de bloc commencent à 0.

$ truncate --size=$[(5872026+1)*512] image.img


Éditer:

Pour ceux -ci étant trop paresseux pour passer à Linux:
Fonctionne également sous Windows avec Cygwin de fdisk.exeet truncate.exe!

Qu'est-ce que Cygwin?

Je peux citer: "Cygwin: Obtenez ce sentiment Linux - sur Windows" ( https://www.cygwin.com/ ).
Il s'agit d'un ensemble d'exécutables qui peuvent s'exécuter sous Windows, mais fournissent tous les programmes en ligne de commande que vous connaissez habituellement sous Linux. Cygwin peut prendre beaucoup de temps à installer si vous sélectionnez chaque package lors de l'installation, mais pour suivre cet exemple, assurez-vous simplement qu'en plus de la configuration par défaut, les packages util-linux(fdisk) et coreutils(truncate) sont également sélectionnés.
En fonction de votre environnement, vous avez besoin de l' homme à ajouter /usr/binet /usr/sbinà votre $PATH.

Nippey
la source
1
Quel package dois-je installer pour obtenir fdisk.exeet truncate.exe?
PythonNut
1
Salut @PythonNut, j'ai mis à jour ma réponse ci-dessus et ajouté les packages requis: o)
Nippey
Que faire si la partition a la taille du disque, même si moins est utilisée?
piegames
5

Je sais que c'est une vieille question, mais je voudrais montrer comment faire ce processus sur Mac, car ce n'est pas aussi simple: fdiskn'a pas l' -loption, et truncaten'est pas installé par défaut:

1. Étape 1: installez tronquer sur Mac OS X:

Vous avez besoin de MacPorts ou Homebrew pour cela. J'utilise MacPorts. Si vous n'en avez pas, allez-y et installez-les d'abord. Lien vers MacPorts

Maintenant, nous pouvons installer tronquer . Ouvrez votre terminal et saisissez:

sudo port install truncate

Pour l'installation de Brew:

brew install truncate

Cela devrait le faire.

2. Utilisez Disk Utilities pour monter notre IMG afin qu'il soit visible par la commande diskutil terminal.

Vous verrez dans un instant pourquoi nous avons besoin de cette étape. Ouvrez l'application Utilitaire de disque. Cliquez sur Fichier (dans la barre supérieure) -> Ouvrir l'image disque et sélectionnez votre fichier IMG.

3. Vérifiez la taille de la partition de l'IMG et son emplacement de montage.

Sur un terminal, saisissez:

diskutil list

Et cela devrait montrer quelque chose comme ça, quelque part à la fin:

/dev/disk3 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        +16.0 GB    disk3
   1:             Windows_FAT_32 boot                    62.9 MB    disk3s1
   2:                      Linux                         3.9 GB     disk3s2

Donc, nous voyons qu'environ 12 Go ne sont pas partitionnés. Nous devons les tronquer.

La raison pour laquelle nous avons besoin de cette commande est de vérifier où l'image disque est montée. Dans mon cas, c'est sous: / dev / disk3

4. Découvrez la taille réelle de la partition.

3,9 Go et 62,9 Mo sont des valeurs qui ne fonctionneront pas avec tronquer. Nous devons trouver les tailles de partition en octets.

5. Exécutez fdisk .

Dans votre terminal, exécutez cette commande:

   fdisk /dev/diskX

X est le nombre que vous avez découvert à l'étape précédente. Cela devrait aboutir à quelque chose comme ceci:

         Starting       Ending
 #: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
 1: 0C    0 130   3 -    8  40  32 [      8192 -     122880] Win95 FAT32L
 2: 83    8  40  33 -  478  79  49 [    131072 -    7553024] Linux files*
 3: 00    0   0   0 -    0   0   0 [         0 -          0] unused      
 4: 00    0   0   0 -    0   0   0 [         0 -          0] unused      

6. Il est temps de tronquer !

Sur votre terminal, cddans le répertoire où se trouve votre image. Puis écrire:

truncate FILE SIZE

FILE est bien sûr votre fichier.

SIZE est la taille en octets. Ce que j'ai fait, c'est d'ajouter à la colonne de taille de la fdiskcommande, la colonne de départ et de multiplier par 512. Donc, dans mon cas, SIZE sera: 512 * (7553024 + 131072) = 3934257152 , ce qui fait environ 3,9 Go.

Vous aurez besoin du début et de la taille de la dernière partition indiquée par fdisk. (Pas nécessairement le plus grand, mais celui à la fin du fichier IMG)

J'ai expérimenté un peu et chaque fois que je saisissais 7553024 * 512 ou (7553024 + 1) * 512 octets, le fichier IMG était corrompu. Donc, juste pour être sûr, faites-le comme je l'indique ci-dessus. Cela pourrait ajouter plus que ce qui est réellement nécessaire, mais c'est une option sûre.

7. (Facultatif) Testez facilement si l'IMG n'est pas corrompu.

Allez à nouveau dans l'Utilitaire de disque et essayez d'ouvrir le nouveau fichier IMG comme précédemment. S'il monte, vous pouvez également voir la nouvelle taille (plus petite) . S'il ne monte pas, quelque chose s'est mal passé. (Essayez peut-être d'augmenter la taille dans la truncatecommande)

Ce n'est pas le meilleur test, mais c'est un moyen sûr de vérifier si le nouvel IMG est corrompu ou non. Alors, ne comptez pas vraiment dessus, mais ça vaut le coup d'essayer ...

J'espère que quelqu'un trouve cela utile!

ant0nisk
la source
1
Joli! Merci d'avoir élargi les connaissances :) C'est bien que vous ayez souligné que 512*(Size+1)cela ne fonctionne pas. Comme vous pouvez le voir, j'ai utilisé Endet non Size, car vous devez conserver les deux partitions s'il y en a plusieurs. Donc, utiliser 7553024 + 131072( +1) est 100% correct!
Nippey
1

Win32DiskImager récent a en fait une option pour inclure uniquement les partitions allouées dans l'image disque. Cela fera le découpage en un seul clic.

entrez la description de l'image ici

Dmitry Grigoryev
la source
Excellent, rend beaucoup plus facile sous Windows!
Nippey
0

Juste quelque chose que j'ai récemment remarqué car je fais beaucoup de ces opérations Win32diskimg pour sauvegarder mes images RPI pour le déploiement. J'ai récemment commencé à tester le fstrim de "découpage" SD pour nettoyer les parties de la carte SD non utilisées pour le nivellement d'usure théorique. Je ne suis pas sûr de l'effet que cela aura, mais un effet secondaire a été lorsque j'ai imaginé la partition SD de 16 Go, puis utilisé 7zip pour la compresser. Je suis passé des 16 Go habituels à 9,5 Go pour maintenant un fichier de 2,5 Go. Je teste maintenant pour m'assurer que rien ne va mal, mais il semble que l'utilisation de TRIM pour marquer l'espace inutilisé comme 0 rend la compression d'image beaucoup plus efficace (ce qui est logique). Je voulais juste signaler à ce sujet était super facile à réaliser et sans étapes multiples.

jctghost
la source
Bien qu'il ne se soit pas trompé, il ne répond pas vraiment à la question.
RalfFriedl