Come si può copiare un filesystem esattamente com'è?


10

Ho un file system per un dispositivo che sto programmando di cui vorrei fare una copia esatta. Idealmente, vorrei che questa copia fosse identica alla cartella da cui era stata copiata. Ho provato a usare cp -r cp -ae rsync -azvPper provare a raggiungere questo obiettivo. Ognuno però genera una cartella con dimensioni diverse (utilizzo du -s) e, alla fine, anche se il mio dispositivo si esaurisce dalla cartella originale, non scapperà da quella che ho copiato.

  • Cosa viene lasciato fuori dal fatto che i comandi che ho usato non tengono conto?
  • È possibile mantenere tutto identico quando si copia un file system / cartella? Se sì, come potrei fare per farlo?

PS Ho pubblicato una domanda simile su StackOverflow ma ho capito subito che l'avevo fatto nello scambio sbagliato


Modifica: questo potrebbe non essere utile, ma non importa quale metodo io usi la directory copiata causa sempre la macchina in questione a Kernel Panic con il seguente output.

VFS: impossibile montare root fs tramite NFS, provando floppy. VFS: Impossibile aprire il dispositivo root "nfs" o unknown-block (2,0) Aggiungere un'opzione di avvio "root =" corretta; ecco le partizioni disponibili: 1f00
64 mtdblock0 (driver?) 1f02 64 mtdblock2 (driver?) 1f04 2432 mtdblock4 (driver?) 1f05 128 mtdblock5 (driver?) 1f06 4352 mtdblock6 (driver?) 1f07 204928 mtdblock7 (driver?) 1f08 50304 mtdblock8 (driver?) 0800
8388608 driver sda: sd Kernel panic - non sincronizzato: VFS: impossibile montare root fs su unknown-block (2,0)


5
Una differenza dunell'output non è un indicatore del fatto che i contenuti non sono gli stessi.
Ignacio Vazquez-Abrams,

Il mio dispositivo non si avvia utilizzando la directory copiata. Lo sto prendendo come un indicatore e mi chiedo cosa sto facendo esattamente di sbagliato nel fatto che il file system copiato non sia trattato allo stesso modo
TopGunCoder

Devi specificare esattamente cosa stai cercando di fare. rsync -ao cp -afai copie esatte di directory, ma stai cercando di copiare un disco di avvio, ci sono un paio di cose che devi fare per completarlo.
forcefsck,

1
Che tipo di dispositivo? Che tipo di file system? Che tipo di supporto di archiviazione?
Michas,

1
Per me sembra che tu voglia usare qualcosa come dd if=/some/location of=/some/other/location bs=4Mleggere e scrivere i dati così come sono.

Risposte:


12

In genere utilizzo una delle seguenti alternative:

  • rsync -aHAX(aggiungi v per la verbosità) assicurati di preservare qualsiasi struttura di collegamento e x-attrs nella cartella di destinazione durante la copia. Non dimenticare asignifica archiviare e conservare già tempo, proprietà e permessi.
  • Semplice tar cvf(non comprimere per risparmiare tempo, basta caricarli) è quello che uso se il primo non soddisfa ciò di cui ho bisogno per qualsiasi motivo e non ho tempo, ma provo sempre il primo.

Per verificare che tutto sia andato come dovrebbe, puoi correre in diff -r <folder1> <folder2>seguito, se lo desideri.


1
Questo ha funzionato! Avevo anche solo bisogno di assicurarmi che il dispositivo su cui stavo avviando (tramite NFS) fosse spento e non fosse in grado di accedere al file system mentre la copia era in corso.
TopGunCoder

1
Ah, i client NFS con accesso in lettura e scrittura a volte possono rendere le cose più piccanti!
Bayindirh,

3
Questo non verrà copiato su file sparsi senza -S. Ciò potrebbe far parte della du -sdifferenza. Ho usato rsync -axXSAHper copiare tutto finito. -X verrà copiato solo all'interno del filesystem e non file montati da un altro filesystem.
Victor Roetman,

Che dire di --numeric-ids?
0x2207

@ 0x2207 È utile solo quando un utente ha ID numerici diversi su sistemi diversi (ad es. L'utente hbayindir si trova su entrambi i sistemi e ha UID 1000 sull'origine e 1536 sulla destinazione). Non ho mai dovuto usare quell'opzione, poiché ho bisogno di preservare il vero proprietario, non UID e GID. Se un utente non è presente né di origine né di destinazione, l'ID numerico viene utilizzato come fallback.
Bayindirh,

4

Leggendo la tua risposta nei commenti sembra che tu stia probabilmente tentando di copiare la cartella principale ("Il mio dispositivo non si avvia usando la directory copiata"). In tal caso, ci sono diverse cose che dovresti fare.

$ cd /
$ mkdir backups

$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys \
     --exclude=dev/pts --exclude=backups .

Dopo aver copiato la cartella principale sul nuovo sistema, dovrai aggiornare grub prima che si avvii.

$ grub-install --recheck /dev/sdX (Where X is the partition number)
$ update-grub

+1 Penso che l'indizio si trovi nel messaggio di avvio non riuscito nell'OP e questo lo risolve.
msw,

A quanto pare qualcosa di molto simile a questo ha funzionato. Avevo a che fare con un filesystem (FS) sulla mia macchina che dovevo copiare. Bastava per me tar c, allora tar xesso. Il kicker però era assicurarsi che la mia macchina fosse spenta da quando la stavo avviando usando la FS che era locale sulla mia macchina, ma lontana dal dispositivo che stavo avviando (stavo avviando il dispositivo tramite NFS)
TopGunCoder

grub-install: error: embedding is not possible, but this is required for cross-disk install.
Vitaly Zdanevich,

2

Puoi provare FSArchiver . È il successore del partimage simile, che ora non è mantenuto. Ho usato sia partimage che FSArchiver in passato, ed entrambi hanno funzionato bene. Per quanto ne so, entrambi fanno copie di un filesystem il più vicino possibile all'originale. Penso che FSArchiver sia un po 'più potente del partimage. Ad esempio, funziona con ext4, mentre il partimage no. Vedi la tabella di confronto di FSArchiver / partimage .


2

L'uso duper confrontare le cartelle è intrinsecamente problematico. Se vuoi davvero confrontare 2 directory basate esclusivamente sulle loro dimensioni, usa in duquesto modo:

$ du -sh --apparent-size <dir>

Questa opzione riporterà le dimensioni effettive delle directory rispetto alla quantità di spazio su disco che consuma quando viene memorizzata sul supporto di unità fisica. I dischi sono organizzati in blocchi e i file vengono scritti su questi blocchi. Se un file necessita solo di BLOCCO + 1 di spazio, consumerà 2 BLOCCHI di spazio e questo è ciò che dunormalmente viene riportato. Ricorda che il nome dello strumento è l'utilizzo del disco!

Dato che hai a che fare con quello che sembra un intero filesystem, sarei propenso a usare ddper fare una copia esatta della partizione in cui si trova la directory

$ dd if=/dev/sda1 of=/srv/boot.img

È quindi possibile utilizzare questo boot.imgper ripristinare la partizione dove vuoi.

$ dd if=/srv/boot.img of=/dev/sdb1

du riporterà anche le dimensioni sul disco (quindi i file sparsi e gli hard link occupano meno spazio). Ad esempio, du -sh /varfornisce 21G ma du -sh --apparent-size /varfornisce 209G sul mio sistema.
Victor Roetman,

0

Dipende un po 'da cosa intendi per "identico".

  • Fare semplicemente rsyncandrebbe bene per la maggior parte del tempo. A volte vuoi usare tarper comprimere tutto in un file ed estrarlo dall'altra parte.
  • Se si desidera un clone del file system completo, è possibile utilizzare ddper copiare l'intero file system stesso.

Se hai qualche mezzo per eseguire il debug del tuo dispositivo, prova a scoprire qual è esattamente il problema perché attualmente non si esaurisce.

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.