J'ai essayé:
sudo dd bs=4k if=/dev/mmcblk0 of=/media/1BAB47551C66A42B/raspbian_migs2.gz
Il crée un fichier .img avec 7,6 Go (taille de la carte, MAIS ce qui est sur la carte a 700 Mo).
Et:
sudo dd bs=4k if=/dev/mmcblk0 | gzip > /media/1BAB47551C66A42B/raspbian_migs2.gz
crée un fichier .gz de 2,7 Go.
Le Raspbian original ( Debian 7 (Wheezy)) de http://www.raspberrypi.org/downloads a 494,44 MiB.
À partir de ce qui se trouve sur la carte SD, comment puis-je créer une image de taille similaire?
(Je suis sur Ubuntu.)
Réponses:
Vous mentionnez dans un commentaire à RooTer que A) vous avez réduit la taille de partition initiale avec
gparted
, maisdd
copie toujours la carte entière, et B) que vous souhaitez inclure les deux partitions dans l'image.Le problème "A" est facile à expliquer: vous copiez toujours la carte entière parce que c'est ce
/dev/mmcblk0
à quoi il fait référence. Les partitions individuelles sont bien sûr/dev/mmcblk0p1
et/dev/mmcblk0p2
. Il s'agit de la complication du problème "B", mais vous ne pouvez pas simplementdd
chaque partition et concaténer les deux fichiers ensemble, en raison de la table de partition au début/dev/mmcblk0
qui indexe le début et la longueur de chaque partition. Sans cela, l'image sera inutilisable.Cependant, vous pouvez obtenir la longueur de chaque partition
fdisk -l
et l'utiliser pour déterminer certains paramètres pourdd
. Par exemple:Les unités "Début" et "Fin" sont des secteurs, et notez que la taille du secteur est donnée, 512 octets. Pour
/dev/mmcblk0p2
, 26746879 (le dernier secteur) - 122880 (le premier secteur) = 26623999/2 (pour 2 secteurs par Ko) / 1024 (Ko par Mo) / 1024 (Mo par Go) = 12,69, dont j'ai augmenté la partition en utilisant gparted à 12 Go, donc cela semble correct (vraiment, je devrais utiliser 1000 et non 1024 comme diviseur avec stockage, ce qui équivaut à 13,31 Go, mais je soupçonne gparted et certains autres outils utilisent également 1024).Donc, la première chose que vous voulez vérifier est que votre deuxième partition est vraiment la taille la plus petite à laquelle vous la définissez. Ensuite, utilisez simplement ces chiffres avec
dd
; pour moi ce serait:J'ai un secteur supplémentaire là-bas pour éviter toute sorte de coupure par un malentendu sur le
dd
fonctionnement. Il existe un moyen simple de vérifier si cela a fonctionné:Notez qu'il y a un peu de différence ici: les secteurs "Début" et "Fin" correspondent à la table de partition d'origine, mais la taille totale dans les statistiques en haut n'est que de 102 Mo! C'est parce que je l'ai utilisé
count=200000
comme paramètredd
parce que je ne voulais pas vraiment me soucier d'une copie de 12 Go (notez également "200000 secteurs au total"). La raison pour laquelle le tableau en bas ne reflète pas cela est que fdisk obtient ses informations des données de partition copiées textuellement au début de l'image depuis le début de la carte SD, ce qui, comme je l'ai mentionné dans le deuxième paragraphe, est vital Maintenir. Si j'avais (correctement) copié le reste, les chiffres seraient copacétiques et l'image serait viable.Essayez ça. :)
la source
fdisk -l <device>
et cela devrait imprimer le tableau sans passer en mode interactif.Je suppose que le problème réside dans des secteurs autrefois utilisés qui contiennent encore de la saleté. Une fois le fichier supprimé, seules les métadonnées sont supprimées du système de fichiers, pas les données elles-mêmes, laissant ainsi des zéros aléatoires au lieu de compresser facilement des blocs contenant uniquement des zéros.
Solution facile, mais nécessite de réécrire tout l'espace libre sur la carte. N'oubliez pas que la durée de vie de la carte SD est limitée par le nombre de réécritures, ce n'est donc pas la méthode préférée.
Solution plus impliquée, car vous devez installer zerofree sur un autre ordinateur qui n'utilisera pas cette carte SD à l'époque.
Pour plus d'informations sur http://intgat.tigress.co.uk/rmy/uml/index.html
Ce que vous devez vous rappeler, c'est qu'en faisant dd de / dev / mmcblk0 vous copiez le périphérique entier, même si les partitions sont plus petites. Si vous avez utilisé raspi-config pour étendre la partition principale avant de faire l'une des méthodes ci-dessus, tout ira bien.
PS Si cela ne vous dérange pas de changer le fichier d'image au format, vous pouvez utiliser partimage qui, pour les systèmes de fichiers connus, omet les blocs libérés même s'ils contiennent encore de la saleté. Encore une fois, il est préférable d'utiliser partimage lorsque le système de fichiers n'est pas monté pour éviter la corruption de la sauvegarde. Vous pourriez probablement vous en sortir en le remontant en lecture seule, mais je le laisserai à votre discrétion.
la source
dd bs=4M if=/dev/zero of=/root/junk
Réponse courte - utilisez une carte SD de 2 Go.
Réponse longue,
dd
n'a aucune idée où se terminent les "bonnes" données, vous devez le dire en quelque sorte.Il existe deux façons, la plus simple est d'utiliser une carte SD de 2 Go, qui arrêtera automatiquement la copie au-delà de 2 Go et générera un fichier compressé de 500 Mo comme vous le souhaitez.
L'autre façon, plus compliquée que celle impliquée, consiste à calculer la taille de données correcte à partir de votre table de partition et à spécifier cette taille correcte en tant que paramètres à
dd
commander. Vous pouvez utiliser les paramètresbs=XXX
(taille de bloc) etcount=XXX
(nombre de blocs) à cette fin. Par exemple, vous pouvez spécifierbs=10M
une taille de bloc de 10 Mo (ce qui rendrait certainement la copie beaucoup plus rapide par rapport à la taille de bloc de 4 Ko que vous utilisez dans vos commandes) etcount=200
copier 10 Mo * 200 = 2000 Mo (2 Go). Vous devrez peut-être ajuster la taille et le nombre de blocs en fonction du schéma de partition de votre carte SD .la source
dd
une taille spécifique ne fonctionnera JAMAIS . Cela suppose que toutes les données réelles du système de fichiers sont soigneusement organisées au début de l'appareil, donc si vous avez 2 Go sur une partition de 8 Go, il vous suffit de copier les 2 premiers Go. C'est faux. Ces 2 Go de données seront dispersés dans tout l'espace, en particulier sur les cartes SD modernes qui ne réutilisent pas les blocs deux fois jusqu'à ce que tous les blocs disponibles aient été utilisés au moins une fois (cela s'appelle le niveau d'usure et prolonge la durée de vie de la carte).dd - copy and convert
n'est pas le bon outil pour faire le travail que vous avez demandé. Il s'agit d'un outil de copie (et de conversion) de bas niveau, secteur par secteur, idéal pour copier des secteurs de démarrage, formater des périphériques et toutes sortes de tâches de bas niveau. Lorsque vous utilisez,dd
vous copiez secteur par secteur sur l'image, même si elle n'est pas incluse dans la structure du système de fichiers.Les images fournies par la fondation Raspberry Pi sont des images spécialement compilées avec des scripts d'installation, la décompression des binaires et la configuration initiale, après quoi vous devez obtenir des mises à jour sur Internet de toute façon - ce qui est délibéré mais tout de même une tâche pour le faire fonctionner comme ceci.
Une solution populaire pour éviter de copier des secteurs vides consiste à utiliser un système de copie de niveau fichier - et CloneZilla est autonome, amorçable à partir d'un CD, similaire
ye olde Norton Ghost
mais clonezilla prend en charge les systèmes de fichiers Linux (et plus). Ainsi, il ne copiera que les fichiers en cours d'utilisation et créera un conteneur à partir de ces fichiers uniquement. Réduit considérablement la taille!la source
J'avais cette même question exacte et je voulais un outil facile à utiliser. Après avoir recherché et non trouvé un, j'ai écrit mkimg.sh . Je décris le processus que j'ai utilisé sur: /raspberrypi//a/37899/32585
la source