跨两个不同的文件系统复制文件时会发生什么

跨两个不同的文件系统复制文件时会发生什么

在学习了Linux内核中的文件系统之后有一个问题,当在两个不同的文件系统之间复制文件时会发生什么。

由于我们可以mount -t ntfs DEV_BLK MOUNT_POINT在Linux上挂载NTFS,内核必须知道数据在磁盘中的组织方式,因此如果我们尝试将文件从NTFS复制到ext4,内核应该处理数据、属性、权限等。

但是NTFS和ext4使用不同的权限控制,Linux内核在创建dentry、inode等时是否默认为从NTFS复制的文件授予777权限?

答案1

只是 Linux 内核源代码 4.19 的摘录:

/* We do not support NTFS ACLs yet. */

然后,大多数权限都是根据这段经过注释的代码进行设置的:

        /* Everyone gets all permissions. */
        vi->i_mode |= S_IRWXUGO;
        /* If read-only, no one gets write permissions. */
        if (IS_RDONLY(vi))
                vi->i_mode &= ~S_IWUGO;
        if (m->flags & MFT_RECORD_IS_DIRECTORY) {
                vi->i_mode |= S_IFDIR;
                /*
                 * Apply the directory permissions mask set in the mount
                 * options.
                 */
                vi->i_mode &= ~vol->dmask;
                /* Things break without this kludge! */
                if (vi->i_nlink > 1)
                        set_nlink(vi, 1);
        } else {
                vi->i_mode |= S_IFREG;
                /* Apply the file permissions mask set in the mount options. */
                vi->i_mode &= ~vol->fmask;
        }

换句话说,主要是挂载选项的权限,而不是 ACL 从文件系统继承的权限。

答案2

由于我们可以使用 mount -t ntfs DEV_BLK MOUNT_POINT 在 Linux 上挂载 NTFS,内核必须知道数据在磁盘中的组织方式,因此如果我们尝试将文件从 NTFS 复制到 ext4,内核应该处理数据、属性、权限、 ETC。

确切地。情况是这样的任何文件系统:需要文件系统驱动程序以便操作系统知道如何读取和存储数据。

但是NTFS和ext4使用不同的权限控制,Linux内核在创建dentry、inode等时是否默认为从NTFS复制的文件授予777权限?

不同的文件系统支持不同的访问控制语义是一个很常见的现象;这就是为什么大多数文件系统驱动程序(和安装助手)允许您在安装时设置映射!

因此:您可以在安装时为 ntfs / ntfs3g 驱动程序进行配置。man mount.ntfs-3g会告诉你它知道哪些选项,用户和权限如何映射等等。

相关内容