我希望能够通过 Windows 上的 cygwin 访问 Linux 分区。我的目的是将数据从 Linux 服务器备份到运行 Windows 7 的家用电脑上。目前它基本上可以正常工作,除非有包含无效字符的文件或有多个包含相同字母但大小写不同的文件。
答案1
答案2
据我了解,您需要通过将完整的目录树逐个文件复制到另一台计算机来进行备份。这无疑是一种备份方法,但我建议采用不同的方法,尤其是因为这种方法似乎对您来说效果不佳。
我自己做的(原则上)是将我想在 Linux 服务器上本地备份的文件创建为 tarball,然后通过 ssh(实际上是通过 sshfs,但没关系)将它们保存到其他地方。只要 Linux 服务器上的 tar 实现能够处理文件名问题,这应该可以消除文件名问题。
您可以通过设置 cygwin 和 ssh 服务器来实现这一点,以便 Linux 服务器可以连接到该服务器,或者使用以下命令
ssh $server "tar c -C /var/important ./" > backup.tar
在您想要保留备份的计算机上从 cygwin 运行。您也可以将 tarball 保存在 Linux 服务器上,然后再传输它们。
如果你想减少带宽和磁盘空间的消耗,我建议使用星星而不是 gnu tar,它是增量模式,只允许您包含上次备份后修改的文件。但它仍然不会进行 rsync 的增量传输,而且多个版本的文件会占用磁盘空间。另一方面,tarball 比目录树更容易压缩(使用 xz 或其他工具)。
答案3
有一个注册表设置决定 Windows 内核是否将文件名视为不区分大小写:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive
将其设置为0
并重新启动以允许文件仅在大小写上有所不同。另请参阅http://cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-casesensitive。
Cygwin 1.7 会自动将 Windows 文件名中不允许的字符映射:
到“Unicode 私有使用区域”。唯一的例外是反斜杠,为了与 Windows 互操作,它将其视为目录分隔符,因此您唯一能做的就是在 Linux 文件名中避免使用它们,或者当然使用完全不同的方法。