我尝试将所有文件从 NTFS 复制到外部驱动器,并希望保留所有权限和属性。外部驱动器已经是 NTFS 并包含其他文件。
我考虑过使用以下工具:
ntfsclone
不起作用,因为它在扇区级别操作,会克隆整个 FS,从而破坏旧数据。如果用于创建映像文件,我无法从 Windows 计算机访问内容。rsync
不保留所有元数据。
另一种方法是在正在运行的 Windows 中使用robocopy
,但我更愿意不使用。(源分区用作系统的C:\
。)
我怎样才能复制文件?
答案1
没有办法通过 Linux 精确复制 NTFS 文件。即使葡萄酒,Linux 上的 Windows 兼容层,通过在 Linux 和 Windows 之间来回转换权限来工作,因此仅限于它们(相当小的)最小公分母。
我能看到的唯一解决方案是在虚拟机(或物理机)中的 Linux 上运行 Windows。
我相信您在帖子中提到过这种可能性,并且希望避免这种情况,但我没有看到其他可能性。只有 Windows 才能准确复制 NTFS 文件;Linux 只能复制 NTFS 分区。
这篇文章可能会有所帮助: 如何在 Linux 上免费安装和运行 Microsoft Windows,使用免费虚拟机由微软下载。
答案2
首先,您需要决定是否要复制文件......
或者您想要对 NTFS 分区进行逐扇区的完整复制,包括“旧数据”、“其他文件”以及您上面非常广泛提到的“所有元数据”。
对于后者,使用 dd:
dd if=/dev/sda2 of=/mnt/usbdisk/my-ntfs-partition-D.img bs=1M
玩得开心。
答案3
Linux 可以复制 NTFS 文件内容很好,只是不是所有的修改/创建/访问的日期和属性(我假设这是你想要保留的)。
那么,为什么不直接记下当前日期和属性(dir
应该能够显示它们),然后复制 Linux 中的文件,一旦您再次运行 Windows,就将日期和属性改回原始状态呢?
使用 Windows 中可以更改文件的工具,例如这些:
显然Windows 自己的文件资源管理器甚至不能正确保存所有文件的日期都一样。但 zip &cygwin 的 tar 命令应该保存文件日期,因此首先使用 Windows 中的其中一个创建存档也应该可行,然后以任何旧方式复制存档。
如果属性非常重要,并且即使在 Windows 中也很难复制,则可能应该将它们备份在文本文件或数据库中,或将其作为文件名的一部分……
答案4
更新 2023.08.08:cp 和 rsync 仍然无法开箱即用。但 tar 仍然可以,而且 tar 可以通过管道传输。这将保留时间戳。(也许 ctime 除外。)