riprendere la copia del file linux


9

Come posso riprendere una copia di un file di grandi dimensioni in Linux? Ho un enorme file (gigabyes serveral) parzialmente copiato su un'unità di rete, e ci è voluto molto tempo, ed è stato fatto principalmente prima che l'operazione di copia si fermasse a causa di un problema di rete che ora è stato risolto. Come posso riprendere la copia del file. Non voglio uno script inefficiente ed ecp non ha funzionato (non sembra funzionare per file di grandi dimensioni).

Risposte:


4

Vorrei provare rsync -a /from/file /dest/file.


1
e mentre stiamo parlando di rsync, nota che puoi copiare direttamente su qualsiasi macchina remota [supportando SSH] usando rsync -az -e ssh / da / file user@dest.ation: / full / dest / path
Mikeage

2
Wow. l'esecuzione di rsync in questo modo senza alcuna opzione eliminerà / dest / file e ritrasmetterà l'intera cosa. Come è stato votato?
Giustino,

1
In che modo preservare gli attributi di file (-a) aiuta? Dovrebbe essere questo?
Malvineous,

3

Se sai che devi semplicemente aggiungere al file locale e non vuoi usare rsync (che potrebbe richiedere molto tempo per calcolare i checksum), puoi usare curl. Ad esempio, se si dispone di un file di grandi dimensioni su una chiavetta USB rimovibile lenta montata su /media/CORSAIR/somefile.date solo metà di esso si trova nella directory corrente, per riprendere:

curl -C - -O "file:///media/CORSAIR/somefile.dat"


Grazie per il suggerimento, ho dovuto usare questo suggerimento perché stavo copiando da un server SMB di Windows (quindi nessuna rsync) quando si è persa la connessione lenta e non volevo scaricare i 500 MB dall'inizio.
MiKy,

2

Sì, rsync è la strada da percorrere. Per me, abbiamo trasferito oltre 100 GB di dati su rsync + ssh. Se stai cercando una vera copia di backup, assicurati di utilizzare l' -aopzione (archivio) per conservare gli attributi del file (tempi, proprietari, permanenti, ecc.)

host1> rsync -aP file user@host2:/path/to/new/dir/

È anche utile per copiare file di grandi dimensioni che possono cambiare nel corso di una migrazione. È possibile precaricare i dati nella destinazione e, una volta pronti per la copia finale, farlo di nuovo, ma solo per una frazione del tempo. Puoi risparmiare sui tempi di inattività effettivi utilizzando rsync al massimo delle sue potenzialità.

PS L'utilizzo v(dettagliato) può rallentare il trasferimento di molti file.


2

Il comando che vuoi sarà qualcosa di simile

rsync -v --append /path/to/afile /mnt/server/dest/afile

a meno che non sia possibile accedere al server tramite ssh ed eseguire rsync in quel modo, in quel caso il comando FlyingFish fornito è il migliore.


0

rsync è valido solo se hai rsync sul server di destinazione. In tal caso, è davvero la soluzione migliore.

Ma non diversamente. Poiché il punto di rsync è copiare solo le parti modificate in file di grandi dimensioni, si presume che queste parti modificate possano trovarsi ovunque nel file. Ciò significa che eseguirà il checksum di tutti i blocchi che sono già stati copiati. Se non hai rsync sull'estremità remota, il tuo rsync locale inizierà quindi rileggendo tutto ciò che è già stato trasferito.

Se il tuo computer di origine ha un server web o ftp, puoi usare wget dal server di destinazione con l'opzione "--continue". (o arricciare con l'opzione "--continue-at [- | size]").

Se la tua macchina di destinazione ha un server FTP, puoi usare l'arricciatura sulla macchina di origine con l'opzione --append.

Come ultima risorsa, puoi usare dd con gli argomenti "bs =" (dimensione blocco), "skip =" e "seek =". Per esempio:

Supponiamo che sarai in grado di utilizzare blocchi da 2048 byte. Se il tuo file di destinazione è attualmente 2'048'000'000 byte (2 GB), vale a dire 1'000'000 blocchi di 2048 byte. Per aggiungere il resto del file sorgente alla destinazione, è possibile

dd if = sorgente_file di = destinazione_file bs = 2048 skip = 1000000 seek = 1000000

Potrebbe essere possibile utilizzare blocchi di dimensioni maggiori per migliorare la velocità di trasferimento. Ricorda solo di specificare la dimensione del blocco con bs = e che il valore dato per saltare e cercare è in blocchi, non in byte.


Quello che hai detto su rsync è falso. man rsync, leggi cosa fa l'opzione --append.
Giustino,
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.