È sicuro acquisire l'immagine dell'unità corrente che funziona?


12

Devo eseguire il backup del mio disco rigido. Voglio usare dde mettere l'immagine su un hdd esterno.

  • Posso farlo utilizzando dddal sistema operativo che risiede sul disco fisso stesso o devo avviare da un altro dispositivo, ad esempio un LiveCD?
  • È sicuro, in generale, acquisire l'immagine di un dispositivo, se il dispositivo è montato e funziona?
  • Cosa succede se il dispositivo è montato, ma sono sicuro che non ci siano altre operazioni di I / O mentre ddè in esecuzione?

Sono sicuro che rsyncsia lo strumento migliore da utilizzare per i backup, specialmente quelli incrementali.

Ma mi interessa dd, perché voglio fare il backup anche di altri dispositivi di archiviazione, e copia anche i dati memorizzati su spazio non partizionato. Ad esempio, il mio lettore di e-book usa uno spazio non partizionato per archiviare uboot, kernel e altri dati.


È importante quale file system stai utilizzando, a cui sei interessato? Alcuni hanno funzionalità specifiche per questa attività.
Valità,

Risposte:


11

In generale non è sicuro. L'FS presuppone che le operazioni siano scritte in un certo ordine in modo da poter scrivere nuovi dati del file e quindi fare un puntatore ad esso da altri dati, i dettagli esatti dipendono dal filesystem. Immagina se si verifica quanto segue:

  1. dd legge dalla posizione X che contiene immondizia o alcuni dati
  2. Il filesystem scrive nella posizione X
  3. Il filesystem scrive nella posizione X + 1 puntatore nella posizione X
  4. dd legge dalla posizione X + 1 collegamento alla posizione X

Dal punto di vista del backup si ottengono dati inutili. Tuttavia, ci sono diversi modi per aggirare il problema:

  • Congela il filesystem con un comando specifico del filesystem (credo xfs_freezesia uno e non ne conosco altri, ma tale opzione esiste almeno in teoria)
  • Crea un'istantanea lvm e copia da essa. La copia sarà come se avessi riavviato il computer (meno il riordino dell'HDD), quindi sarà un filesystem sporco ma la copia sarà atomica. Nota che alcuni filesystem come XFS devono prima essere bloccati.
  • Usa rsync come suggerito da altri. Ora la copia è sicura e non è necessario LVM ma la copia non è atomica. Quindi, mentre evita il problema di cui sopra a livello di filesystem, potrebbe comunque incorrere in problemi con i file (piuttosto improbabile, ma si può immaginare file mancanti mentre ad esempio mv viene eseguito in background)
  • Usa il filesystem con snapshot come btrfs , tux3 , zfs , nilfs ... Quindi eviti entrambi i problemi: puoi semplicemente creare uno snapshot e copiarlo da rsync con atomicità completa. Si noti tuttavia che tale filesystem tende spesso ad essere sperimentale.

Come ultima nota, ddpotrebbe non essere il modo migliore per eseguire il backup. Copia un disco completo che spesso è dispendioso quando copi anche la "spazzatura". Se hai bisogno di avere un disco immagini qualcosa di simile al partimage potrebbe essere migliore. Se non hai un'opzione migliore, usa rsync, tar in modalità differenziale / incrementale, ecc. O un sistema di backup completo come bacula , tarsnap o uno di molti altri. La deduplicazione dei dati può fare miracoli per le dimensioni dei backup.


1
+1 Questa è l'unica risposta che tenta effettivamente di rispondere a questa domanda, fatta in modo eccellente per la lettura effettiva di ciò che l'op sta chiedendo e per non infastidire su quanto male sia.
Valità,

+1 per una buona risposta. Ma non sono d'accordo con il ranting. Dd non è male. È inappropriato per questo e spiegare perché è così è una buona cosa.
Hennes,

Il punto 4 del proiettile ha le stesse limitazioni del n. 2, giusto? Un'applicazione potrebbe essere nel mezzo dell'emissione di scritture e lo snapshot non è a conoscenza della transazione a livello di applicazione.
Ben Voigt,

Grazie, risponde alla domanda. Anche la risposta di goldilocks è buona, ma sono interessato a eseguire il backup non solo del mio hdd ma anche di altri dispositivi di archiviazione, e forse dovevo scriverlo prima.
Marco Sulla

@BenVoigt - per certi versi - elimina un livello (filesystem) e AFAIK è il 'più fragile'. Ancora in alcuni casi è possibile trovare file scritti a metà, ma se l'applicazione non li gestisce, i file possono essere danneggiati anche in molte altre circostanze (OOM, crash, ecc.), Quindi l'applicazione scritta correttamente dovrebbe gestirli.
Maciej Piechotka,

7

Dipende dall'esatta funzione della partizione e dallo scopo della copia. Tuttavia, dirò che in generale ddè uno strumento inappropriato per il backup dei filesystem . Non è nemmeno quello a cui era destinato.

  • Perderà molto tempo a copiare sezioni vuote della partizione.

  • Può portare a incongruenze se il filesystem è attualmente montato, in parte perché è un'entità a livello di sistema operativo e potrebbe non essere sincronizzata con il dispositivo a blocchi sottostante. Chiamare syncinizialmente non aiuterà molto in questo, poiché il processo non è istantaneo.

Usa cp -ao rsyncinvece. È quindi necessario creare la partizione di destinazione, ovviamente, quindi non è così facile da eliminare, ma è molto più sicura e flessibile. Se devi creare un'immagine del filesystem , vedi sotto.

Se hai intenzione di copiare il filesystem di root, non usarlo assolutamente dd. Devi usare qualcosa come rsync -ax(o cp -axsu singole directory di livello superiore), perché ci sono un sacco di cose che NON devono essere nella copia . Su Linux, questo include:

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

Alcune di queste sono in realtà interfacce del kernel e non directory reali su disco. Se li copi, stai copiando un mucchio di informazioni che non verranno applicate nella copia; se provi a far funzionare un sistema con esso, ciò comporterà solo uno spazio sprecato poiché l'interfaccia reale verrà montata in cima. Altri contengono informazioni temporanee in uso durante l'esecuzione dei processi e questi sono più un problema, poiché il sistema non sarà in grado di risolvere i rifiuti se li copi.

Se vuoi creare un file di immagine del filesystem di root (o di qualsiasi filesystem), crea un file di immagine vuoto - questo è un uso appropriato per dd:

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

È un'immagine da 1024 MB (1000000 * 1024). Regola countse lo desideri di altre dimensioni. Creare, ad esempio, un extfilesystem nel file :

mke2fs whatever.img

Ti avvertirà che questo non è un vero dispositivo a blocchi. Procedere. Ora monta il file immagine:

mount whatever.img /mnt/img

/mnt/imgdeve esistere ma potrebbe tutto. Ora puoi rsync(o cp -a) entrare /mnt/img. Il contenuto rimarrà all'interno whatever.imgquando lo smonti.

Tuttavia...

Per essere chiari, usa il metodo di immagine del filesystem appena descritto se hai assolutamente bisogno di un file di immagine per qualsiasi motivo. Se il tuo obiettivo è copiare la partizione su un altro disco rigido, non hai bisogno di un'immagine : crea una nuova partizione con un filesystem vuoto su quell'unità, montala e copia lì. Potresti invece semplicemente mettere il contenuto del filesystem in una directory vuota e archiviarlo:

tar -czf myarchive.tar.gz [the directory path]

È quindi possibile distribuire questo in una partizione esistente (vuota o di altro tipo) posizionandolo nel livello superiore e usando:

tar -xzf myarchive.tar.gz

Attenzione che sovrascriverà i file esistenti se i loro percorsi corrispondono a qualcosa nell'archivio. Altrimenti lascerà la stessa gerarchia di directory esistente.


La scrittura +1 in un file di immagine vuoto è molto semplice, ma quali vantaggi ha rispetto al salvataggio in un archivio .tar o .tgz?
Creek,

@Creek Non ha alcun vantaggio tranne l'immagine è montabile. Ho aggiunto che nel caso in cui l'obiettivo del PO sia quello di produrre un'immagine che possa essere utilizzata grezza. Altrimenti, è meglio usare un archivio poiché un archivio non ha dimensioni fisse. Aggiungerò un avvertimento più chiaro a riguardo.
Riccioli d'oro,

Gotcha, non la pensavo così. È ancora un metodo interessante per archiviare i file.
Creek,

2
@mpy Sia GNU coreutils cpche rsync hanno la possibilità -xdi evitare la ricorsione in altri filesystem. La risposta di Maciej spiega meglio perché ddqui è assolutamente inappropriato (è quasi garantito produrre una copia inutilizzabile se non si prendono le precauzioni elencate da Mark , a causa delle scritture che altrimenti si verificano durante la copia).
Gilles 'SO- smetti di essere malvagio' il

2
ddnon copierò cose che non sono vere directory su disco, quindi non sono sicuro da dove provenga il tuo primo punto. Ad esempio, i dispositivi montati /mnt, i nodi /proc, ecc. Non farebbero parte dei dati ddacquisiti in quanto non presenti sul disco. Per i filesystem non montati ddè perfettamente valido; si finisce con un duplicato esatto. L'unica ragione per cui è inappropriato per i filesystem montati è che i dati sul sistema potrebbero cambiare / essere parzialmente scritti durante il lungo periodo di tempo necessario ddper funzionare.
Jason C

1

rsync è lo strumento preferito per il backup di un filesystem e può fare un backup avviabile del sistema operativo in esecuzione.

Alcuni avvertimenti:

  • è necessario aggiungere le opzioni di minestra alfabetica appropriate
  • i percorsi sono piuttosto critici
  • è richiesto un elenco di esclusione, che sarà diverso per ciascun sistema operativo e possibilmente per ciascuna configurazione

Alcuni vantaggi di rsync rispetto ad altri metodi come tar:

  • è possibile interrompere e avviare il backup in qualsiasi momento
  • molte opzioni per la gestione di file sostituiti come elimina su richiesta, elimina prima, sposta .....
  • i backup ripresi (o ripetuti) sono molto più veloci rispetto ad altri metodi, poiché i file precedentemente copiati vengono saltati. (L'aumento di velocità 20x è comune)
  • l'opzione --link-dest è in grado di creare backup con versione copiando solo i nuovi file

I backup delle immagini hanno il loro posto, ma copiano l'unità esattamente come sono, compresi eventuali problemi che potresti avere. Un backup di file crea una nuova directory e ha l'effetto collaterale di linearizzare (deframmentare) l'unità nel processo. Se vuoi fare 10 copie identiche del tuo attuale sistema operativo, userei rsync per il master delle copie e poi dd (o simili) per il resto.


1

Dipende da cosa intendi per "sistema di lavoro attuale". Se vuoi semplicemente evitare di utilizzare un disco di avvio e non ti interessa interrompere i servizi in esecuzione sul computer, è possibile:

  1. Chiudi tutti i programmi non essenziali (in pratica, tutto tranne la shell di root in cui stai lavorando - non provarlo da un terminale X, usa una vera shell di console). La modalità utente singolo può essere d'aiuto.
  2. Se hai dischi montati diversi dalla radice del sistema, smontali. Non smontare i filesystem virtuali come / proc, / sys o / dev.
  3. Svuota i dati memorizzati nella cache sul disco rimanente: sync
  4. Rimontare il filesystem di root in sola lettura: mount -o ro /.
  5. Installa il tuo disco rigido esterno (probabilmente riceverai un avviso sull'impossibilità di scrivere /etc/mtab; ignoralo).
  6. Fai il tuo backup.
  7. Smonta il tuo disco rigido esterno.
  8. Reboot. Hai fatto un casino piuttosto del tuo sistema per arrivare qui, e il riavvio è il modo più veloce per riportarlo alla normalità.

Uso questo metodo per creare un archivio di un computer dal quale sono appena stato aggiornato e non mi aspetto di usarlo molto di più. Non è un ottimo metodo per un sistema in uso attivo: è lento (impiega ore o giorni), i backup sono enormi (quindi non ne puoi tenere più di alcuni) ed è incredibilmente dirompente nell'uso del sistema di cui è stato eseguito il backup su. Per i backup quotidiani, consiglio qualcosa che funzioni a livello di filesystem, come ad esempio rsnapshot.


Si noti che il passaggio 4 può essere pericoloso su alcuni filesystem poiché scrivono anche in modalità di sola lettura. Anche su sistemi più moderni (Linux 3.something I belive) si può solo creare un collegamento /etc/mtaba /proc/self/mount- che funzionerà anche quando si hanno cose come chroot o fs spazi dei nomi.
Maciej Piechotka,

1
@MaciejPiechotka Non sono a conoscenza di alcun filesystem che scriva mentre è montato in modalità di sola lettura e lo troverei molto strano. Alcuni filesystem scrivono al momento del montaggio in modalità di sola lettura se il filesystem non è stato precedentemente smontato in modo pulito, quindi il passaggio mount -o remount,ro /potrebbe essere scritto. Ma una volta restituito questo comando, in quale situazione si verificherebbero le successive scritture?
Gilles 'SO- smetti di essere malvagio' il

I "programmi non essenziali" da chiudere dovranno includere in modo critico il sottosistema di registrazione, che non considererei non essenziale.
Gilles 'SO- smetti di essere malvagio' il

@Gilles, ai fini della creazione di un'immagine disco del disco di avvio, qualsiasi programma non direttamente coinvolto nella creazione dell'immagine non è essenziale.
Segna il

Potrebbe valere la pena ricordare che la modalità utente singolo potrebbe essere utile qui.
Valità,

1

Usa Clonezilla , sul serio. È la migliore utility open-source basata su Linux simile a Norton Ghost. Farà sia la clonazione della partizione che quella del disco completo, da disco a disco o da disco a file system (salva come file). Supporta la maggior parte dei file system Linux, NTFS, FAT32 e altro. Può salvare su un disco interno, un'unità esterna o persino sulla rete su condivisioni SMB o NFS.

È molto facile da usare e ti farà risparmiare un sacco di tempo.

Modifica: per rispondere alla domanda, no, non è possibile la ddmaggior parte dei file system mentre sono montati perché si rischia di finire con una copia incoerente del proprio file system poiché la lettura da un dispositivo a blocchi non è atomica. Ad esempio, se stai copiando 100 blocchi, il sistema potrebbe aver aggiornato il primo e l'ultimo blocco mentre eri solo a metà strada, il che significa che la tua copia includerà l'ultimo blocco modificato ma non il primo.


+1: non risponde alla domanda ma sembra essere un buon suggerimento per il backup di hdd.
Marco Sulla
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.