Windows 与 Linux 上的文件创建时间

Windows 与 Linux 上的文件创建时间

我们有以下设置:

  1. 挂载服务器 - Debian Linux
  2. fileserver1-Windows 2008 R2 存储服务器
  3. fileserver2 - Celerra NS20 导出 CIFS 共享
  4. 工作站 - Windows 7,带有映射驱动器以在 fileserver2 上共享

我们正在做的事情:

  • 在挂载服务器上挂载来自 fileserver1 的共享,例如 /shared/fileserver1
  • 在挂载服务器上挂载来自 fileserver2 的共享,例如 /shared/fileserver2
  • 在挂载服务器上运行 rsync,将数据从文件服务器 1 同步到文件服务器 2。使用 atime 作为参数来同步不早于 X 的数据
  • 过了一会儿,尝试删除 /shared/fileserver2 上早于 Y 的数据。

据我所知,mountserver 上的 linux stat 命令在查询 /shared/fileserver2 上的文件时返回以下内容:

Linux 文件时间戳

同时,当我使用连接到 fileserver2 的映射驱动器打开同一个文件的属性时,我看到同一个文件的以下内容:

Windows 文件时间戳

如你所见,Windows 资源管理器中显示的创建日期为 8 月 12 日,但使用 stat 命令却看不到它

我这里遗漏了什么吗?

答案1

Linux 不存储文件创建时间。因此,您将无法在 Linux 机器上查看此类信息。

这是一条链接显示了 inode 数据结构。您可以找到:

time_t                       i_atime;
time_t                       i_mtime;
time_t                       i_ctime;

这些都不是创作时间。

答案2

文件创建时间未存储在 Linux 分区的任何地方,因此统计信息仅显示如下:

atime (access time)
mtime (last modification time)
ctime (last status change)

答案3

一些较新的 Linux 文件系统支持(在它们的 inode 内)有关文件创建时间的信息,例如 JFS、ext4 或 btrfs。但传统的 Unix 和 Linux 文件系统不支持它,因此整个工具链尚未意识到这一功能

因此,尽管 smbfs/cifs 可以访问这些信息,但在统计结构中还没有地方报告此信息

struct stat {
  dev_t     st_dev;     /* ID of device containing file */
  ino_t     st_ino;     /* inode number */
  mode_t    st_mode;    /* protection */
  nlink_t   st_nlink;   /* number of hard links */
  uid_t     st_uid;     /* user ID of owner */
  gid_t     st_gid;     /* group ID of owner */
  dev_t     st_rdev;    /* device ID (if special file) */
  off_t     st_size;    /* total size, in bytes */
  blksize_t st_blksize; /* blocksize for file system I/O */
  blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
  time_t    st_atime;   /* time of last access */
  time_t    st_mtime;   /* time of last modification */
  time_t    st_ctime;   /* time of last status change */
};

相关内容