From 7668c090690bd142c2c67087e1cc023a11ac186f Mon Sep 17 00:00:00 2001 From: piccihud Date: Sat, 18 Mar 2023 17:33:25 +0100 Subject: [PATCH] fix git.md and add dd.md --- dd.md | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ git.md | 2 +- 2 files changed, 135 insertions(+), 1 deletion(-) diff --git a/dd.md b/dd.md index e69de29..805a392 100644 --- a/dd.md +++ b/dd.md @@ -0,0 +1,134 @@ +# dd + +`dd` è un comando che serve a copiare `blocchi di dati` grezzi da una sorgente verso una destinazione. +Il concetto è molto differente dalla semplice copia, infatti agisce direttamente a basso livello, cioé bit per bit. + +Normalmente questo strumento è utilizzato per le seguenti motivazioni: + +- formattazione a basso livello; +- backup di intere partizioni; +- creazione di dischi di avvio. + +## Sintassi + + +La sintassi base di dd è la seguente: + +```bash +dd if=FILEINPUT of=FILEOUTPUT +``` + +È doverosa qui una precisazione: su un sistema UNIX `qualunque cosa è un file`, anche un drive esterno. + +## Specificare la dimensione dei blocchi + +Quando si scrive a basso livello è bene ricordarsi che i byte scritti vengono sempre inviati nel file di uscita a blocchi. + +Per specificare la dimensione di questi blocchi vi sono essenzialmente tre possibili parametri: + +- `ibs`= numero di byte per la dimensione del blocco in ingresso; +- `obs`= numero di byte per la dimensione del blocco in uscita; +- `bs`= numero di byte per la dimensione di entrambi i blocchi + +Il valore default di questi parametri è 512. + +Si possono specificare delle unità di misura, come Kilo (K), Mega (M), Giga (G) e così via… + +Ad esempio per trasferire 8 Mega alla volta: + +```bash +dd if=nomefile of=nomefile bs=8M +``` + +### Numero blocchi trasferiti + +Si può inserire il numero di blocchi che devono essere trasferiti con il parametro `count`. Ad esempio per trasferire 4MB bisogna scrivere: + +```bash +dd if=nomefile of=nomefile count=8000 iflag=fullblock +``` + +> Ad esempio, per trasferire 2GiB in blocchi da 8M, sono necessari $2048/8 = 256$ blocchi + +Il flag `iflag=fullblock` assicura che vengano trasferiti i blocchi nella dimensione intera. + +## Visualizzare lo stato del comando + +Il flag `status=progress` consente di visualizzare lo stato di avanzamento del comando: + +```bash +dd if=FILEINPUT of=FILEOUTPUT status=progress +``` + +## Esempi d’uso + +Per individuare una periferica di archiviazione attaccata utilizziare il comando: + +```bash +blkid +``` + +Un output tipo potrebbe essere: + +```bash +/dev/sda1: UUID="b4c1041e-7027-4619-aaa5-900e24c1fdee" BLOCK_SIZE="4096" TYPE="ext4" +/dev/sda2: UUID="dc1014fd-6c84-4dcd-acc3-13e914685136" TYPE="swap" +/dev/sdb1: UUID="3255683f-53a2-4fdf-91cf-b4c1041e2a62" BLOCK_SIZE="4096" TYPE="ext4" +``` + +Quello sull’estrema sinistra è un identificativo che rappresenta una particolare partizione del disco, nel primo caso è /dev/sda1 e nell’ultimo /dev/sdb1. +La lettera rappresenta univocamente il disco, mentre il numero la partizione. + +Nel caso di nvme e di supporti sd potrebbe cambiare la nomenclatura, ma il concetto è sempre simile. + +### Scrittura di un immagine iso + +L’utilizzo più famoso è forse quello di scrittura di un immagine iso in una pen-drive. + +Scaricato e individuato il file iso (ad esempio /percorso/file/immagine.iso) bisogna prima individuare il supporto d’uscita, utilizzando il comando `blkid`. + +Quindi nel comando dd utilizzare come file di INPUT l’immagine iso e come file di OUTPUT il disco. +Il block size dovrebbe essere allineato alla capacità di scrittura della pen-drive e della porta usb del pc, affinché sia possibile sfruttare più buffer: + +```bash +dd if=/percorso/file/immagine.iso of=/dev/sda status=progress bs=8M +``` + +### Formattare un dispositivo + +Per azzerare un dispositivo viene utilizzato un file virtuale creato da GNU/Linux contenente tutti e soli zeri che si trova nel percorso `/dev/zero`. + +Quindi scrivere il comando dd utilizzando come file di INPUT /dev/null, mentre come file di OUTPUT il disco. + +```bash +dd if=/dev/zero of=/dev/sda status=progress bs=8M +``` + +### Backup + +Con dd si può effettuare il backup di interi dischi. + +Quindi utilizzare il disco come parametro di INPUT e un file come parametro di OUTPUT. Il file sarà necessariamente un file IMG (immagine disco). + +```bash +dd if=/dev/sda of=/percorso/backup.img status=progress bs=8M +``` + +Si può poi ripristinare invertendo gli operandi. Si può applicare il concetto anche alle partizioni: + +```bash +dd if=/dev/sda1 of=/percorso/backupp1.img status=progress bs=8M +``` + +#### Backup e compressione + +Se non viene specificato alcun file di output, viene utilizzato lo standard output del sistema. +Questo permette di concatenare `dd` con altri comandi, ad esempio gzip, in modo da poter fare un backup che viene compresso al volo: + +```bash +dd if=/dev/sda | gzip > /percorso/backup.gz +``` + +## Collegamenti + +- [https://linuxhub.it/articles/howto-usare-dd/](https://linuxhub.it/articles/howto-usare-dd/) diff --git a/git.md b/git.md index 8367deb..31174f5 100644 --- a/git.md +++ b/git.md @@ -88,7 +88,7 @@ Si può utilizzare l'asterisco `*` per aggiungere tutti i file. Se si vuole escl git commit -m "Messaggio del commit" ``` -Annullamento dei commit: +Annullamento dell'ultimo commit: ```txt git commit --amend