文件在不同文件系统间拷贝文件时间改变的问题

标签: 文件 文件系统 拷贝 | 发表时间:2012-10-12 12:55 | 作者:eaglet
出处:http://www.cnblogs.com/

作者:eaglet

转载请注明出处

我所做的系统需要比较文件时间和大小来确定两个文件是否相同,但在运行过程中,经常会发现文件时间被莫名其妙的修改了1-2秒。这个问题我一直没有仔细去研究,一直以为是微软的一个bug,直到最近发现这个问题不搞清楚实在是不行了,系统经常会从服务器下载相同的文件。今天仔细研究了一下这个问题,发现并不是微软操作系统的问题,而是文件系统设计的问题。

直接切入正题

FAT32 文件系统采用FAT表(文件分配表)来存储文件的索引信息,为了尽量减少FAT表中每个文件占用的空间数量, FAT32 文件系统将文件大小限制为小于4GB, 文件时间精度限制为2秒,以偶数对齐。而NTFS文件系统采用的是MFT表(主文件表)来存储文件的元数据,这个主文件表相当于一个小的数据库,它可以存储更多的元数据。所以NTFS文件系统无论是文件大小还是文件时间精度都远远高于FAT32. NTFS的文件精度是100ns。

由于两种文件系统的文件精度不一样,如果我们把文件从NTFS文件系统拷贝到FAT32文件,由于时间精度不同,文件时间将被强制以偶数对齐。

 

NTFS 时间: 7 hours 31 min 0 sec 000ms.
FAT 时间为: 7 hours 31 min 0 sec 000ms.

 
NTFS 时间: 7 hours 31 min 0 sec 001ms.
FAT32 时间为:7 hours 31 min 2 sec 000ms.


NTFS 时间: 7 hours 31 min 1 sec 000ms.
FAT32 时间为:7 hours 31 min 2 sec 000ms.

 
NTFS 时间:7 hours 31 min 1 sec 999ms.
FAT32 时间为:7 hours 31 min 2 sec 000ms.

 

从上面的例子我们可以看出NTFS 到 FAT32 ,文件时间最多会相差2秒。

我们在程序中如果要通过文件时间来判断文件是否相同,一定要考虑到两种文件系统的时间误差的问题,否则会导致系统出现错误。另外用MD5 来判断文件是否相同会更好一些,不过对于大文件,MD5的计算时间会比较长。

 

参考:

http://support.microsoft.com/kb/127830

本文链接

相关 [文件 文件系统 拷贝] 推荐:

文件在不同文件系统间拷贝文件时间改变的问题

- - 博客园_首页
我所做的系统需要比较文件时间和大小来确定两个文件是否相同,但在运行过程中,经常会发现文件时间被莫名其妙的修改了1-2秒. 这个问题我一直没有仔细去研究,一直以为是微软的一个bug,直到最近发现这个问题不搞清楚实在是不行了,系统经常会从服务器下载相同的文件. 今天仔细研究了一下这个问题,发现并不是微软操作系统的问题,而是文件系统设计的问题.

Ext文件系统

- Haides - 博客园-首页原创精华区
  虽然从Ext2到Ext4,找数据的方式发生了变化,但是,磁盘的布局还是非常相似的. 其实这个东西也不需要变化,因为现在也没什么特别巧妙的方式,而且磁盘的吞吐量、效率的瓶颈也不在这里. 当然,这里排除那些根据自身文件特点设计的数据库,毕竟还是为了支持通用文件.   Boot在第一个块,放的应该是引导程序,超级块就放在了第二个块上,如果不是可以在mount的时候通过参数sb来设置.

你的下一个文件系统——Btrfs

- frocket - K.I.S.S. - 简单哲学
提起 Btrfs ,相信广大折腾帝们都不会陌生,被誉为“下一代 Linux 文件系统”的它,具有扩展性好、支持数据校验、支持多设备管理等等强大特性,使得 Ext4 也只能成为悲剧的过渡产品,还不赶快找一个 Ubuntu 10.10、Fedora 15、Meego 什么的试一下. 支持什么多设备、什么数据校验跟你有一毛钱关系啊.

NFS 文件系统源代码剖析

- wuyan - IBM developerWorks 中国 : 文档库
NFS 文件系统是目前最为成功的网络文件系统,在文件共享领域有着出色的表现,特别是 pNFS 的出现,使得 NFS 文件系统在性能和规模上有了大幅提升,为其带了更为广阔的应用空间. 同时,NFS 之所以备受关注,还在于它在 NAS 存储领域的关键作用. 本文剖析了 NFSv3 文件系统源代码,使开发工程师,技术支持人员,特别是存储领域从业人员对 NFS 有更为深刻的认识.

文件系统文献推荐

- Lianhui Wang - 刘爱贵的专栏
非常好的文件系统阅读文献,研究存储和文件系统的不能不读的,其中的每一个文件系统都非常经典的,代表存储或者文件系统发展过程的里程碑.

Fedora 16默认文件系统为Btrfs

- rIPPER - Solidot
51开源社区 写道 "在6月8日举行的Fedora工程指导委员会会议上,委员会决定Fedora 16 将以Btrfs作为默认文件系统. Btrfs,是Oracle于2007年宣布并进行中的copy-on-write文件系统. 目标是取代Linux目前各大发行版的ext4文件系统,改善ext4的限制,特别是单个文件的大小,总文件系统大小或文件检查.

linux下的文件系统选型

- Michael - shell's home
    贝壳原来一直认为文件系统可以随便选,结果最近吃了两次苦头. 一个是btrfs对虚拟机支持不良,另一个是特定情况下xfs性能比ext3高20倍. 痛定思痛,打算列一下文件系统选型的方法和依据,欢迎拍砖.     下面我列一下纳入参考的文件系统,当然,ntfs就不要出来搞基了,玩嵌入式/光盘live之类的朋友也不要来凑热闹了阿.

Linux 下的文件系统选型

- 桔子 - python.cn(jobs, news)
贝壳原来一直认为文件系统可以随便选,结果最近吃了两次苦头. 一个是btrfs对虚拟机支持不良,另一个是特定情况下xfs性能比ext3高20倍. 痛定思痛,打算列一下文件系统选型的方法和依据,欢迎拍砖. 下面我列一下纳入参考的文件系统,当然,ntfs就不要出来搞基了,玩嵌入式/光盘live之类的朋友也不要来凑热闹了阿.

Linux的proc文件系统详解

- - 博客园_iTech's Blog
Linux系统上的/proc目录是一种文件系统,即proc文件系统. 与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态.

分布式内存文件系统:Tachyon

- - 杨尚川的个人页面
Tachyon是一个分布式内存文件系统,可以在集群里以访问内存的速度来访问存储在Tachyon里的文件. Tachyon是架构在最底层的分布式文件系统和上层的各种计算框架之间的一种中间件,其主要职责是将那些不需要落地到DFS里的文件,落地到分布式内存文件系统中,来达到共享内存,从而提高效率,减少内存冗余,减少GC时间等.