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
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/
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
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
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.
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.
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.
fonte
ext4
sistema 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 apenasext4
mas tambémudf
como alternativas aos sistemas de arquivos proprietários da Microsoft.Respostas:
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=UTC
para usar carimbos de data / hora baseados em UTC nos sistemas de arquivos VFAT outime_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
udisks
serviço auxiliar de mídia removível, resultando na diferença de duas horas que você vê.fonte
mount | grep CORSAIR
meu 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).udisks
deve respeitar as opções de montagem especificadas em/etc/fstab
, se você escrever uma entrada para a sua unidade USB.Embora eu tenha escrito na minha pergunta que "gostaria de manter o
vfat
sistema de arquivos em minhas unidades USB", finalmente os re-formatei nontfs
sistema de arquivos. Tanto o Linux quanto o Windows podem lidarntfs
e parece não mostrar o fenômeno estranho com os carimbos de data e hora, descritos acima.fonte