Timestamps de arquivos copiados para a unidade USB

13

Eu tenho um problema com os timestamps de arquivos copiados do meu PC ou laptop para drives USB: a hora da última modificação do arquivo original e do arquivo copiado é diferente. Portanto, sincronizar arquivos entre meu PC e meu drive USB é bastante complicado.

Uma descrição passo a passo

  1. Eu copio um arquivo arbitrário do meu PC / laptop para uma unidade USB usando a GUI ou com o comando

    cp -a file.txt /media/gabor/CORSAIR/
    
  2. Eu verifico a hora da última modificação do arquivo original:

    $ ls -l --time-style=full-iso file.txt
    -rw-rw-r-- 1 gabor gabor 0 2018-09-22 15:09:23.317098281 +0200 file.txt
    
  3. Eu verifico a hora da última modificação do arquivo copiado:

    $ ls -l --time-style=full-iso /media/gabor/CORSAIR/file.txt
    -rw-r--r-- 1 gabor gabor 0 2018-09-22 15:09:23.000000000 +0200 /media/gabor/CORSAIR/file.txt
    
  4. Como você pode ver, os segundos no horário da última modificação do arquivo copiado são truncados para zero dígitos decimais. No entanto, se eu digitar o comando

    if ! [ file.txt -nt /media/gabor/CORSAIR/file.txt ] && ! [ file.txt -ot /media/gabor/CORSAIR/file.txt ]; then echo "The last modification times are equal."; fi
    

Eu recebo a saída The last modification times are equal.

  1. A situação muda se eu desmontar e remontar a unidade USB e executar novamente os dois últimos comandos:

    $ ls -l --time-style=full-iso /media/gabor/CORSAIR/file.txt
    -rw-r--r-- 1 gabor gabor 0 2018-09-22 15:09:22.000000000 +0200 /media/gabor/CORSAIR/file.txt
    $ if [ file.txt -nt /media/gabor/CORSAIR/file.txt ]; then echo "The file is newer on the PC."; fi
    The file is newer on the PC.
    
  2. Portanto, após a remontagem, a hora da última modificação do arquivo copiado é reduzida em um segundo. Desmontagem e remontagem adicionais, no entanto, não afetam mais o tempo da última modificação. Além disso, o teste nos arquivos agora mostra que o arquivo no PC é mais recente (embora não seja).

A situação é ainda mais complicada pelo fato de a hora da última modificação dos arquivos ser mostrada diferentemente no meu PC e no meu laptop , sendo a diferença exatamente 2 horas, embora a configuração de data e hora seja o mesmo no meu PC e no meu laptop!

Mais informações

Meu computador e meu laptop mostram o comportamento descrito acima. Eu tenho o Ubuntu 14.04.5 (confiável) no meu PC e o Ubuntu 16.04.2 (xenial) no meu laptop.

As minhas unidades USB têm sistema de arquivos vfat. A saída de mount | grep CORSAIR no meu PC é

/dev/sdb1 on /media/gabor/CORSAIR type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)

A saída de mount | grep CORSAIR no meu laptop é

/dev/sdb1 on /media/gabor/CORSAIR type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)

Meus outros drives USB mostram o mesmo comportamento.

Pergunta

A diferença nos últimos tempos de modificação pode ser eliminada de alguma forma? Por exemplo, usando outros parâmetros na montagem / desmontagem? Ou é um bug no Ubuntu?

Gostaria de concluir que os registros de data e hora dos arquivos originais e copiados são exatamente os mesmos, para que a sincronização possa ser feita de maneira mais eficiente. Além disso, gostaria de manter o sistema de arquivos vfat em meus drives USB, para que eu possa usá-los no Windows também.

    
por K. Gabor 23.09.2018 / 13:35

2 respostas

16

O problema com a mudança de hora do timestamp vem do fato de que um sistema de arquivos VFAT (sim, até mesmo FAT32) armazena o tempo de modificação com resolução de apenas 2 segundos.

Aparentemente, desde que o sistema de arquivos esteja montado, o driver do sistema de arquivos armazena timestamps com precisão de 1 segundo (provavelmente para satisfazer os requisitos POSIX), mas quando o sistema de arquivos é desmontado, os caches são limpos e você verá o que é realmente gravado no diretório do sistema de arquivos.

A diferença de duas horas entre o PC e o laptop provavelmente é causada por diferentes configurações de fuso horário e / ou diferentes opções de montagem padrão para o sistema de arquivos VFAT. (Eu estou supondo que você está localizado em um fuso horário cujo deslocamento UTC é atualmente de 2 horas, seja positivo ou negativo.)

Internamente, o Linux usa timestamps UTC em sistemas de arquivos no estilo Unix; mas nos sistemas de arquivos VFAT, o padrão (atual) é usar a hora local nos registros de data e hora do sistema de arquivos VFAT, porque é isso que o MS-DOS fez e o Windows ainda faz. Mas há duas opções de montagem que podem afetar isso: você pode especificar a opção de montagem tz=UTC para usar registros de data e hora baseados em UTC em sistemas de arquivos VFAT ou usar time_offset=<minutes> para especificar explicitamente o deslocamento de fuso horário a ser usado com esse sistema de arquivos específico .

Pode ser que as opções de montagem padrão para o VFAT tenham mudado entre o Ubuntu 14.04 e o 16.04, seja no kernel ou no serviço de ajuda% media removível udisks , resultando na diferença de duas horas que você vê.

    
por 23.09.2018 / 15:00
0

Embora eu tenha escrito na minha pergunta que "gostaria de manter o sistema de arquivos vfat em minhas unidades USB", finalmente eu os re-formatou no sistema de arquivos ntfs . Tanto o Linux quanto o Windows podem manipular ntfs e parece não mostrar o fenômeno estranho com os timestamps, descritos acima.

    
por 03.10.2018 / 21:00