como dizer ao rsync para preservar o carimbo de data / hora nos arquivos quando a árvore de origem tem um ponto montado

42

Relacionado a esta pergunta

Breve descrição do problema:

Quando a árvore de origem possui um ponto montado dentro dela, os carimbos de data e hora nos arquivos dentro desse ponto de montagem, quando copiados para a árvore de destino, não são preservados, mesmo ao usar a -aopção

Descrição detalhada:

Suponha que esta seja a árvore de origem:

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

onde data/acima está montado um disco USB externo. Tudo é ext4sistema de arquivos. Tudo na fonte é de minha propriedade me.

BACKUP também passou a ser um ponto de montagem, o disco USB de backup.

Depois de emitir esse comando rsync -av --delete /home/me/ /home/BACKUP/, descobri que /home/BACKUP/data/tudo o que está abaixo dele tem o carimbo de data / hora atual, como se esses arquivos tivessem sido criados agora, e não o carimbo de hora nos arquivos em /home/me/data/. Outros arquivos e pastas externos datamantiveram o carimbo de data e hora OK.

A pergunta é: como usar rsyncna configuração acima para dizer para preservar os carimbos de hora em todos os arquivos e pastas, mesmo em arquivos e pastas em um ponto montado?

Estou 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
Nasser
fonte

Respostas:

46

de man rsync:

   -t, --times                 preserve modification times

EDIT - para melhorar esta resposta, pois não é imediatamente óbvio por que isso não ajudou o OP:

O OP está copiando arquivos de um sistema de arquivos para outro e deseja preservar c-time. A maioria das pessoas entende c-time"tempo de criação" incorreto na maioria dos sistemas UNIX / Linux (os sistemas de arquivos do Windows controlam os tempos de "criação" ou "nascimento").

Na maioria das vezes, no UNIX e Linux, c-timeé o carimbo de data / hora usado para gravar o último inode ' C ' hange. Um inode muda se algum de seus atributos for atualizado:

O OP não pode preservar o c-timearquivo deles quando eles são trazidos para um novo sistema de arquivos. A criação desses arquivos nos novos sistemas de arquivos é uma das condições listadas acima (criação de inode / arquivo).

/EDITAR

h3rrmiller
fonte
9
Obrigado. Eu sei disso. Mas leia a pergunta novamente com atenção. Eu usei o -aque diz: archive mode; equals -rlptgoD portanto -tjá está incluído.
Nasser
1
você está tentando preservar o tempo de mudança? ctime não é para "criado" a sua para (status) mudança
h3rrmiller
1
Quero que ele funcione exatamente como nos arquivos que não estão no disco montado. ou seja, mantenha o mesmo carimbo de hora que se vê ao fazer ls -lno arquivo. Isso funciona em arquivos que não estão dentro do ponto de montagem. Mas todos os arquivos que estão dentro do ponto de montagem possuem carimbo de data / hora indicando que eles foram criados. Como você chama dessa vez. Eu só queria que ele usasse o mesmo carimbo de data e hora nos arquivos na fonte. Agora não. Quero que todos os aspectos do tempo sejam copiados. ou seja, um clone do arquivo seja feito. tempo de criação, o tempo de mudança, etc ...
Nasser
4
o tempo de mudança (ctime) é atualizado após uma alteração no inode (por exemplo, criação / alteração de permissão / mudança / etc). porque você está criando um novo inode (porque você está copiando o arquivo em um sistema de arquivos (tabelas de inode separadas), o ctime é atualizado, não há como contornar isso porque é a alteração do inode, não o arquivo. pt.wikipedia.org/wiki/Stat_(system_call)#ctime
h3rrmiller
3
ls -lmostra mtime (modificar) não ctime
h3rrmiller 17/01
6

como o hr3miller já disse, -a (ou --archive) é igual a -rlptgoD e já inclui tempo de sincronização.

No entanto, quando o rsync copia dados para, por exemplo. uma montagem NFS / FAT32 / NTFS em que a preservação do usuário e do proprietário falha, o rsync não tenta definir o horário. Rsync avisará com algo como

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

Portanto, deixe de fora a preservação de usuário e grupo usando

-rlptD

ao invés de

-rlptgoD

Use-o somente quando não preservar o proprietário e o grupo é uma opção para você. Observe que preservar links simbólicos e outros recursos também pode desencadear esse comportamento. Você terá que percorrer a página de manual para todos os recursos rsync (-r -l -p -t -g -o) que deseja fazer backup.

user1283043
fonte
-2

Eu uso rsync -aze com certeza isso me preserva o tempo de modificação. Eu verifiquei duas vezes agora.

Mik
fonte
2
Isso porque -a( --archive) inclui -t.
heemayl
No entanto, não, o ctime não pode ser redefinido arbitrariamente. (Eu não entendi o quesiton originalmente, desculpe.)
Mik