rsync non funziona tra NTFS / FAT ed EXT


13

Ho della musica che suono nella mia macchina, da una chiavetta USB FAT32. La cartella che utilizzo per mettere le canzoni è memorizzata sul mio disco rigido EXT4. Aggiungo / rimuovo / riassagio canzoni regolarmente e ogni tanto desidero rsyncle modifiche alla chiavetta USB. Ma per qualche ragione sconosciuta (forse permessi?), rsyncCopia tutti i file ogni volta anziché solo quelli modificati. Sto chiamando rsynccome:

rsync -vrlptgD source dest

Come posso farlo funzionare come voglio (cioè sapere quando un file non è stato modificato e non copiarlo)?

Risposte:


17

La risposta di Javier Rivera funziona, ma ci vuole abbastanza tempo perché rsync controlli e confronti tutti i checksum dei file. Ho scoperto che l'utilizzo della seguente opzione ha funzionato meglio per me:

rsync -rtv --modify-window=1 /source /dest

L' --modify-window=1interruttore consente una variazione di ± 1 s sui timestamp. Con questa opzione abilitata, il confronto del timestamp sarà più indulgente e esaminerà le minuscole differenze temporali tra i file system NTFS / FAT e Unix.

Fonte (ger): http://www.kai-hildebrandt.de/tutorials/rsync.html

PS: Tieni presente che l'ora legale causerà trasferimenti di file completi due volte all'anno. Vedi qui per ulteriori dettagli e possibili soluzioni.


Questo è fantastico Ho trovato --iconvutile anche l'opzione passando da Linux di origine a MacOS dest
wim

2
Per qualche motivo devo usarlo modify-window=2perché =1copia ancora tutti i file. Copia da NTFS a FAT32. Dopodiché va bene.
Luc,

Ho aggiunto la --size-onlybandiera per saltare i file di dimensioni corrispondenti
alexandre1985,

1
@ alexandre1985: questo ometterà i file che cambiano il loro contenuto ma non le loro dimensioni. Dovresti usarlo solo quando desideri eseguire il backup dei file che cambiano sempre dimensione quando cambiano contenuto, ad esempio perché i dati vengono aggiunti solo a loro ma mai sovrascritti.
David Foerster,

11

I timestamp in FAT32 sono troppo diversi da quelli unix per fare affidamento su di essi per verificare la presenza di modifiche ai file, è necessario utilizzare anche l'opzione -c, costringerà rsync a confrontare tutti i file per rilevare le modifiche anziché fare affidamento sui timestamp. Funzionerà, ma è più lento.

Infine, ci sono un paio di opzioni nel tuo comando che non possono funzionare con i file system FAT32.

  • -l conserverà i collegamenti, FAT32 non ha alcun concetto di collegamenti
  • -p proverà a conservare le autorizzazioni, ancora nessuna autorizzazione su FAT32
  • -t proverà a conservare i timestamp di modifica, c'è solo un timestamp su FAT32
  • -g tenterà di preservare la proprietà del gruppo, di nuovo non supportato da FAT32
  • MrGreen proverò a conservare file e dispositivi speciali, ora cosa viene qui.

Come commentano Htorque, le opzioni non valide non ti faranno del male, semplicemente non faranno nulla. Ma devi aggiungere l'opzione -c.

Questo:

rsync -vrc source dest

dovrebbe funzionare (almeno funziona sul mio computer).


3

Stavo riscontrando un problema simile sotto OSX e la risposta di Glutanamate non ha aiutato. Alcuni file differiscono di un'ora; questo potrebbe essere perché tendo ad attraversare i fusi orari relativamente spesso. Altri file vengono disattivati ​​entro un giorno o anche un mese. Non sono sicuro del perché. Il checksum su alcuni dei file con timestamp molto diversi mostra che sono, in effetti, identici.

In ogni caso, sembra che l' --size-onlyopzione, che dice rsyncdi ignorare i timestamp, funzionerà per i miei scopi. -c/ --checksum(come menzionato da Javier) funziona, ma richiede un po 'più di tempo. L'ho cronometrato e ci sono voluti circa un minuto per confrontare i checksum per il GB nella sottodirectory con cui sto lavorando. Naturalmente la velocità con cui ciò accade dipenderà dall'azionamento più lento del sistema; nel mio caso, questa è la scheda SD nel mio telefono. Tuttavia, ciò avveniva dopo che avevo già effettuato alcune manipolazioni dei file (incluso il checksum), quindi molti dei file potrebbero essere già stati copiati nella cache RAM.


1

Dovresti anche evitare di usare la popolare opzione -a. La mia raccomandazione su FAT32 è

 rsync -vrc --delete --progress --no-p source  destination

--no-p: nessun permesso

--delete: elimina i file e la cartella senza pari nella destinazione (se lo vuoi davvero)

--progress: mostra i progressi durante il trasferimento. È buono per file di grandi dimensioni.


1
Avere un voto da parte mia anche se in aggiunta -vrc, lo faccio anche io-vrcz
Antony,

0

Sono troppi flag (-vrlptgD) che stai usando. Ricorda, rsync è un'utilità Linux e non funziona in modo efficace con Fat32 e NTFS.

Dovresti cercare i trucchi per poterlo usare.

Provare:

rsync -rvh --size-only --progress --delete /path/to/ext4/ /path/to/fat32/

Maggiori informazioni qui

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.