Immagine di una scheda da 16 GB contenente spazio non partizionato alla fine: troncamento possibile?


18

Volevo preparare una distro per alcuni amici.
Dato che non avevo nient'altro in giro, ho usato una scheda SD da 16 GB.

Ho iniziato con l'immagine Debian Weezy 2Gb predefinita e non ho fatto alcun ridimensionamento.
Ora, come ho fatto, volevo creare un'immagine di quello che ho fatto, ma ottengo un file da 16 GB, contenente 14 GB di spazio non partizionato (non partizionato e libero) alla fine.

[Ho usato Windows // Win32DiskImager in quanto non ho nulla di libero da attaccare all'RPI in questo momento]

Posso semplicemente troncare il file di immagine proprio dietro lo spazio partizionato e trasferire la parte iniziale su una scheda più piccola, quindi?


2
Se hai accesso a un computer Linux, esegui dd if=/dev/path/to/SD/card of=~/SpecialImage.img, quindi installa GParted ed esegui gparted ~/SpecialImage.img. Una volta che GParted apre il tuo .imgfile, ridimensiona semplicemente le partizioni a tuo piacimento! (Entrambi i comandi devono essere eseguiti come root, sudo sudovrebbero darti ciò di cui hai bisogno. Quando si $passa a a #, sei root. Fai attenzione, questo è l'equivalente Linux di Dio.) GParted è fondamentalmente un frontend GUI per la gestione arcana del partiton strumenti di cui avrai bisogno. L'uso di GParted rende tutto molto più semplice e più probabile per avere successo.
JamesTheAwesomeDude,

Per favore, leggi attentamente la mia domanda.
Nippey,

Sì, ho letto la tua domanda e posso dirti che troncare un'immagine del disco è pericoloso. Certo, puoi semplicemente tagliare gli ultimi byte di un'immagine, ma non c'è garanzia che non eliminerai accidentalmente alcun file, specialmente perché Linux distanzia intenzionalmente i suoi file . Inoltre, potrebbero esserci alcuni metadati importanti alla fine del filesystem o qualcosa del genere. Nel complesso, è una scommessa più sicura usare le utilità di ridimensionamento del filesystem piuttosto che provare a tagliare da soli la fine di un file.
JamesTheAwesomeDude,

1
Bene, ma sto parlando di spazio non partizionato. Anche Linux non inserirà alcun dato nello Spazio su disco contrassegnato come non partizionato ma rimarrà all'interno del blocco come scritto nella Tabella delle partizioni. La mia preoccupazione era causata dal formato del file di immagine: è possibile che il file di immagine contenga metadati alla fine del file, quindi ero preoccupato di tagliare le informazioni sul file. (Spero che il mio commento precedente non sia
sembrato

Ohh, ho capito cosa stai dicendo ora. Se sei preoccupato per lo spazio libero finale danneggiato, esegui GParted sull'immagine dopo averlo troncato. Probabilmente elencherà l'ultima area come "non allocata" o "corrotta" - crea una nuova partizione "non formattata" in quello spazio. Quindi, non avrai problemi. :)
JamesTheAwesomeDude,

Risposte:


33

Alla fine ho trovato una risorsa che sta spiegando la mia domanda.

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

Corto:

Sì, il troncamento è possibile!

Riepilogo del processo:

Estrarre le informazioni sulla partizione dall'immagine usando 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

Vediamo che la partizione ha una dimensione di circa 2,8 Gb (5872026 * 512), il resto non è partizionato .

Quindi, tutto dopo la fine della partizione può essere rimosso.
Questo sarà fatto con lo strumento truncate. Non dimenticare di aggiungere 1 al numero di settori, poiché i numeri di blocco iniziano da 0.

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


Modificare:

Per quelli che sono troppo pigro per passare a Linux:
funziona anche su Windows con Cygwin s' fdisk.exee truncate.exe!

Che cos'è Cygwin?

Potrei citare: "Cygwin: prova quella sensazione di Linux - su Windows" ( https://www.cygwin.com/ ).
È un insieme di eseguibili che possono essere eseguiti su Windows, ma forniscono tutti i programmi da riga di comando che di solito conosci da Linux. L'installazione di Cygwin può richiedere molto tempo se si seleziona ogni pacchetto durante l'installazione, ma per seguire questo esempio, assicurarsi semplicemente che, oltre alla configurazione predefinita, siano selezionati anche i pacchetti util-linux(fdisk) e coreutils(troncato).
A seconda del tuo ambiente, devi aggiungere /usr/bine /usr/sbinal tuo uomo $PATH.


1
Quale pacchetto devo installare per ottenere fdisk.exee truncate.exe?
PythonNut,

1
Ciao @PythonNut, ho aggiornato la mia risposta sopra e ho aggiunto i pacchetti richiesti: o)
Nippey

Cosa succede se la partizione ha le dimensioni del disco, anche se viene utilizzata meno?
piegames

5

So che questa è una vecchia domanda, ma vorrei mostrare come eseguire questo processo su Mac, perché non è così semplice: fdisknon ha l' -lopzione e truncatenon è installato di default:

1. Passaggio 1: installare troncare su Mac OS X:

Hai bisogno di MacPorts o Homebrew per questo. Uso i MacPorts. Se non ne possiedi uno, vai avanti e installalo prima. Collegamento a MacPorts

Ora, possiamo installare troncato . Apri il tuo Terminale e digita:

sudo port install truncate

Per l'installazione di Brew:

brew install truncate

Questo dovrebbe farlo.

2. Usa Utility Disco per montare il nostro IMG in modo che sia visibile al comando del terminale diskutil .

Tra un momento vedrai perché abbiamo bisogno di questo passaggio. Apri l'app Utility Disco. Fai clic su File (nella barra in alto) -> Apri immagine disco e seleziona il tuo file IMG.

3. Controllare le dimensioni della partizione dell'IMG e dove è montato.

Su un terminale, digitare:

diskutil list

E dovrebbe mostrare qualcosa del genere, da qualche parte alla fine:

/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

Quindi, vediamo che circa 12 GB non sono partizionati. Dobbiamo troncare quelli.

Il motivo per cui abbiamo bisogno di questo comando è verificare dove è montata l'immagine del disco. Nel mio caso, è sotto: / dev / disk3

4. Scopri le dimensioni effettive della partizione.

3,9 GB e 62,9 MB sono valori che non funzionano con troncato. Dobbiamo trovare le dimensioni della partizione in byte.

5. Esegui fdisk .

Nel tuo Terminale, esegui questo comando:

   fdisk /dev/diskX

Dove X è il numero che hai scoperto nel passaggio precedente. Ciò dovrebbe comportare qualcosa del genere:

         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. È tempo di troncare !

Sul tuo terminale, cdnella directory in cui si trova la tua immagine. Allora scrivi:

truncate FILE SIZE

FILE è il tuo file ovviamente.

SIZE è la dimensione in byte. Quello che ho fatto è stato aggiungere alla colonna delle dimensioni del fdiskcomando, la colonna iniziale e moltiplicare per 512. Quindi, nel mio caso, DIMENSIONE sarà: 512 * (7553024 + 131072) = 3934257152 , che è di circa 3,9 GB.

Sarà necessario l' inizio e la dimensione della dell'ultima partizione che viene indicato da fdisk. (Non necessariamente il più grande, ma quello alla fine del file IMG)

Ho sperimentato un po 'e ogni volta che ho inserito 7553024 * 512 o (7553024 + 1) * 512 byte, il file IMG era corrotto. Quindi, per essere sicuro, fallo come indico sopra. Potrebbe aggiungere più di quanto effettivamente necessario, ma è un'opzione sicura.

7. (Facoltativo) Verifica facilmente se l'IMG non è danneggiato.

Vai ancora una volta in Utility Disco e prova ad aprire il nuovo file IMG come prima. Se monta, puoi anche vedere la nuova dimensione (più piccola) . Se non monta, qualcosa è andato storto. (Forse prova ad aumentare le dimensioni nel truncatecomando)

Questo non è il test migliore, ma è un modo sicuro per verificare se la nuova IMG è corrotta o meno. Quindi, non ci contare, ma vale la pena provare ...

Spero che qualcuno lo trovi utile!


1
Ben fatto! Grazie per l'espansione della conoscenza :) Bene, hai sottolineato che 512*(Size+1)non funziona. Come puoi vedere, ho usato Ende non Size, poiché devi mantenere entrambe le partizioni se ce ne sono più di una. Quindi, usando 7553024 + 131072( +1) è corretto al 100%!
Nippey,

1

Win32DiskImager recente ha effettivamente un'opzione per includere solo le partizioni allocate nell'immagine del disco. Questo farà il taglio con un clic.

inserisci qui la descrizione dell'immagine


Eccellente, lo rende molto più facile su Windows!
Nippey,

0

Proprio qualcosa che ho notato di recente mentre faccio molte di queste operazioni Win32diskimg per il backup delle mie immagini RPI per la distribuzione. Di recente ho iniziato a testare "rifilare" fstrim SD per pulire parti della scheda SD non utilizzate per il livellamento teorico dell'usura. Non sono sicuro dell'effetto che avrà, ma un effetto collaterale è stato quando ho immaginato la partizione SD da 16 GB e quindi ho usato 7zip per comprimerlo. Sono passato dai soliti 16 GB a 9,5 GB a un file da 2,5 GB. Sto testando ora per assicurarmi che nulla sia sbagliato, ma sembra che l'uso di TRIM per contrassegnare lo spazio inutilizzato come 0 rende la compressione dell'immagine molto più efficiente (il che ha senso). Volevo solo riferire a questo è stato super facile da realizzare e non ci sono più passaggi.


Sebbene non sia sbagliato, in realtà non affronta la domanda.
RalfFriedl,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.