Carimbos de data e hora de arquivos copiados para a unidade USB

13

Estou com um problema com os carimbos de data e hora dos arquivos copiados do meu PC ou laptop para unidades USB: a hora da última modificação do arquivo original e a do arquivo copiado são diferentes. Portanto, a sincronização de arquivos entre meu PC e minha unidade USB é bastante complicada.

Uma descrição passo a passo

  1. 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. 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. 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 inserir 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 os dois últimos comandos novamente:

    $ 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 mais um segundo. Desmontagens e remontagens adicionais, no entanto, não afetam mais a hora da última modificação. Além disso, o teste dos 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 de maneira diferente no meu PC e no meu laptop , a diferença sendo exatamente 2 horas, embora a configuração de data e hora seja a mesma no meu PC e no meu laptop!

Outras informações

Tanto o meu PC quanto o 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.

Minhas unidades USB possuem sistema de arquivos vfat. A saída do mount | grep CORSAIR 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 do mount | grep CORSAIR 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)

Minhas outras unidades USB mostram o mesmo comportamento.

Questão

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 conseguir que os carimbos de data e hora dos arquivos originais e copiados sejam exatamente os mesmos, para que a sincronização possa ser feita com mais eficiência. Além disso, gostaria de manter o sistema de arquivos vfat em minhas unidades USB, para que eu possa usá-los também no Windows.

K. Gabor
fonte
Você deseja criar outro sistema de arquivos na unidade USB, por exemplo, um ext4sistema de arquivos Linux ? (O suporte no linux para sistemas de arquivos proprietários da Microsoft, FAT32, exFAT, NTFS, tem alguns limites.) Veja este link que sugere não apenas ext4mas também udfcomo alternativas aos sistemas de arquivos proprietários da Microsoft.
sudodus 23/09/18

Respostas:

17

O problema com a mudança dos segundos do carimbo de data e hora vem do fato de um sistema de arquivos VFAT (sim, até FAT32) armazenar o tempo de modificação com apenas 2 segundos de resolução.

Aparentemente, enquanto o sistema de arquivos estiver montado, o driver do sistema de arquivos armazena em cache os registros de data e hora com precisão de resolução de 1 segundo (provavelmente para atender aos requisitos do POSIX), mas depois que o sistema de arquivos é desmontado, os caches são limpos e você verá o que é realmente registrado em o 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. (Suponho que você esteja localizado em um fuso horário cujo deslocamento UTC atualmente seja de 2 horas, positivo ou negativo.)

Internamente, o Linux usa registros de data e hora 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 foi o que o MS-DOS fez e o Windows ainda faz. Porém, existem duas opções de montagem que podem afetar isso: você pode especificar a opção de montagem tz=UTCpara usar carimbos de data / hora baseados em UTC nos sistemas de arquivos VFAT ou time_offset=<minutes>especificar explicitamente o deslocamento do fuso horário a ser usado com esse sistema de arquivos específico.

Pode ser que as opções de montagem padrão do VFAT tenham mudado entre o Ubuntu 14.04 e 16.04, dentro do kernel ou no udisksserviço auxiliar de mídia removível, resultando na diferença de duas horas que você vê.

telcoM
fonte
Obrigado pela sua resposta. Eu completei minha pergunta com a saída do mount | grep CORSAIRmeu laptop, que é realmente diferente da saída do meu PC. Além disso, você está certo, estou localizado na Europa central no fuso horário CEST (= UTC + 2).
K. Gabor
Nenhuma dessas saídas de montagem parece incluir opções de montagem que afetariam os carimbos de data / hora, então acho que o tratamento padrão para carimbos de data / hora VFAT deve ter sido alterado no nível do kernel em algum lugar entre essas versões do Ubuntu. Aparentemente, o moderno udisksdeve respeitar as opções de montagem especificadas em /etc/fstab, se você escrever uma entrada para a sua unidade USB.
telcoM 23/09/18
0

Embora eu tenha escrito na minha pergunta que "gostaria de manter o vfatsistema de arquivos em minhas unidades USB", finalmente os re-formatei no ntfssistema de arquivos. Tanto o Linux quanto o Windows podem lidar ntfse parece não mostrar o fenômeno estranho com os carimbos de data e hora, descritos acima.

K. Gabor
fonte
Sim, o NTFS armazena todos os registros de data e hora de arquivos como números de 64 bits, com base na hora UTC, para que eles tenham uma resolução de 100 nanossegundos e o período seja de 1 de janeiro de 1601 a 28 de maio de 60056. Isso deve ser mais do que suficiente. Mais importante, não há lugar para o tipo de ambiguidade de fuso horário que os sistemas de arquivos VFAT possuem.
TelcoM 03/10