Comment décompresser et dd une image disque sur une carte SD avec une seule commande?

15

Je suis soumis aux restrictions suivantes:

  • J'ai un .zipfichier de 1,0 Go sur mon ordinateur qui contient un fichier, une image disque de raspbian. Lorsqu'il n'est pas compressé, ce fichier fait 3,2 Go et est nommé 2015-11-21-raspbian-jessie.img.
  • Après avoir téléchargé le fichier zip, j'ai un peu moins de 1,0 Go d'espace de stockage sur mon ordinateur, pas assez d'espace pour extraire l'image sur mon ordinateur.
  • Ce fichier doit être décompressé et écrit sur une carte SD en utilisant du vieux pur dd.

Est-il possible pour moi d'écrire l'image sur la carte SD sous ces restrictions?

Je sais qu'il est possible de transférer des données tarpuis de transférer ces données ailleurs.Cela fonctionnera-t-il toujours pour le zipformat de fichier ou l'archive entière doit-elle être décompressée avant que tous les fichiers ne soient accessibles?

IQAndreas
la source
Je me rends compte que je pouvais simplement extraire le fichier zip sur un lecteur flash externe, mais c'est plus amusant. Je veux retirer cela pour le défi (et l'expérience d'apprentissage) de celui-ci!
IQAndreas
3
Si votre carte SD est un périphérique /dev/sdh, lancez-le unzip -p file.zip >/dev/sdh. (Je sais que l'utilisation de ddest traditionnelle mais ce n'est pas nécessaire.)
John1024
Huh. Cela fonctionnerait-il sans dd? J'ai pensé que le paramètre Block Size serait nécessaire.
CRThaze
2
Oui, ça marche sans dd. Dans le passé, la taille des blocs était très importante lors de l'écriture sur bandes. Pour les disques, cela n'a pas d'importance.
John1024
1
@TheCzar Mis à part les bandes, le paramètre de taille de bloc ddne peut que perdre des données ou ralentir les choses (ou, dans de rares cas, accélérer les choses un peu, si elles sont suffisamment grandes). Oubliez dd, c'est très rarement utile.
Gilles 'SO- arrête d'être méchant'

Réponses:

24

Utilisation unzip -p:

unzip -p 2015-11-21-raspbian-jessie.zip 2015-11-21-raspbian-jessie.img | dd of=/dev/sdb bs=1M
yaegashi
la source
Le code est en cours d'exécution, et ni mon espace disque dur ni ma mémoire RAM ne s'épuisent. Tout va bien jusqu'à présent.
IQAndreas
5
Ou tout simplement unzip -p … >/dev/sdb.
Gilles 'SO- arrête d'être méchant'
1
@Gilles en plus de l'inconvénient, ddest parfois utile avec sudo:unzip -p ... | sudo dd of=/dev/sdb bs=1M
yaegashi
5
@yaegashi unzip -p … | sudo 'cat >/dev/sdb'Mais je préfère sudo chown $USER /dev/sdbce qui me donne une opportunité supplémentaire de vérifier que j'écris sur le bon appareil.
Gilles 'SO- arrête d'être méchant'
Cela a fonctionné à merveille! Cela vous dérange si je modifie le nom de fichier exact au cas où quelqu'un voudrait simplement copier et coller la commande?
IQAndreas du
0

Après un peu de mal avec l'ancienne solution:

 unzip -p ~/Downloads/2020-02-05-raspbian-buster-lite.zip | sudo dd of=/dev/disk2 bs=1m

ou, si vous voulez voir la progression et que vous avez installé pv:

 unzip -p ~/Downloads/2020-02-05-raspbian-buster-lite.zip | pv | sudo dd of=/dev/disk2 bs=1m
Efrat Levitan
la source