come dire a rsync di conservare il timestamp sui file quando l'albero dei sorgenti ha un punto montato


42

In relazione a questa domanda

Breve descrizione del problema:

Quando l'albero di origine ha un punto montato al suo interno, i timestamp sui file all'interno di quel punto montato quando copiati nell'albero di destinazione non vengono conservati anche quando si utilizza l' -aopzione

Descrizione dettagliata:

Supponiamo che questo sia l'albero dei sorgenti:

                       /home/                           /home/
                         |                                |
                        me/                             BACKUP/
                         |                                |
                    +----+----------+                +----+-------+
                    |    |          |                |    |       |
                 data/  foo.txt    boo.txt         data/ foo.txt boo.txt
                    |                                |
                   a.txt                           a.txt

dove data/sopra è montato un disco USB esterno. Tutto è un ext4file system. Tutto nella fonte è mio me.

BACKUP inoltre è capitato di essere un punto di montaggio, il disco USB di backup.

Dopo aver emesso questo comando rsync -av --delete /home/me/ /home/BACKUP/, ho scoperto che /home/BACKUP/data/e tutto sotto ha il timestamp corrente, come se questi file fossero stati creati ora e non il timestamp sui file in /home/me/data/. Altri file e cartelle all'esterno dataavevano il timestamp mantenuto OK.

La domanda è: come utilizzare rsyncnell'impostazione precedente per indicare di preservare i timestamp su tutti i file e le cartelle anche su file e cartelle su un punto montato?

Sto usando:

>uname -a
Linux 3.5.0-17-generic #28-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux

>rsync -v
rsync  version 3.0.9  protocol version 30

Risposte:


46

da man rsync:

   -t, --times                 preserve modification times

MODIFICA - per migliorare questa risposta poiché non è immediatamente ovvio il motivo per cui ciò non ha aiutato l'OP:

OP sta copiando i file da un filesystem a un altro e vuole preservarlo c-time. Molte persone capiscono c-timeche significa "tempo di creazione" che non è corretto sulla maggior parte dei sistemi UNIX / Linux (i filesystem di Windows tengono traccia dei tempi di "creazione" o "nascita").

Per la maggior parte, in UNIX e Linux, c-timeè il timestamp utilizzato per registrare l'ultimo hange ' C ' dell'inode. Un inode cambia se uno dei suoi attributi viene aggiornato:

OP non può conservare i c-timefile quando vengono portati in un nuovo file system. La creazione di questi file nei nuovi filesystem è una delle condizioni sopra elencate (creazione di inode / file).

/MODIFICARE


9
Grazie. Lo so. Per favore, leggi di nuovo attentamente la domanda. Ho usato -ache dice: archive mode; equals -rlptgoD quindi -tè già incluso.
Nasser,

1
stai cercando di preservare il tempo di cambiamento? ctime NON è per "creato" ma per (stato) modifica
h3rrmiller

1
Voglio che funzioni esattamente come sui file che non si trovano sul disco montato. cioè mantenere lo stesso timestamp che si vede quando si fa ls -lsul file. Funziona su file che non si trovano all'interno del punto di montaggio. Ma tutti i file che si trovano all'interno del punto di montaggio hanno un timestamp su di essi a indicare che sono stati appena creati. Qualunque cosa chiami questa volta. Volevo solo che usasse lo stesso timestamp sui file nel sorgente. Adesso no. Voglio che gli aspetti di tutti i tempi vengano copiati. vale a dire che viene creato un clone del file. tempo di creazione, tempo di cambio, ecc ...
Nasser

4
il tempo di modifica (ctime) viene aggiornato in seguito a una modifica all'inode (ad es. creazione / modifica delle autorizzazioni / spostamento / ecc.). perché stai creando un nuovo inode (perché stai copiando il file attraverso un filesystem (tabelle di inode separate) il ctime viene aggiornato. non c'è modo di farlo perché è la modifica dell'inode, non del file. en.wikipedia.org/wiki/Stat_(system_call)#ctime
h3rrmiller

3
ls -lmostra mtime (modifica) non ctime
h3rrmiller

6

come già detto hr3miller, -a (o --archive) è uguale a -rlptgoD e include già il tempo di sincronizzazione.

Tuttavia, quando rsync copia i dati in, ad es. un mount NFS / FAT32 / NTFS in cui la conservazione dell'utente e del proprietario fallisce, rsync non tenterà di impostare l'ora. Rsync avviserà con qualcosa del genere

rsync: chown "/mnt/backup/postgres/hourly.0/primary/var" failed: Operation not permitted (1)

Pertanto, tralasciare la protezione di utenti e gruppi mediante

-rlptD

invece di

-rlptgoD

Utilizzalo solo quando non preservi il proprietario e il gruppo è un'opzione per te. Tieni presente che anche la conservazione dei link simbolici e di altre funzionalità potrebbe innescare quel comportamento. Dovrai passare attraverso la pagina man per ogni funzione rsync (-r -l -p -t -g -o -D) di cui vuoi eseguire il backup.


-2

Uso rsync -aze sicuramente mi preserva il tempo di modifica. L'ho ricontrollato adesso.


2
Questo perché -a( --archive) include -t.
Hememl

Tuttavia no, non è possibile ripristinare arbitrariamente ctime. (In origine ho frainteso il quesiton, scusa.)
Mik
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.