我常常遇到这样的情况:服务器上已经有文件系统的管理员想要从兼容Linux的文件系统(一般是ext2/3/4)变为兼容Windows的文件系统(NTFS或甚至是FAT32)。他们真正的想法是就地情况下执行变更——这就类似于通过改变命令将FAT32卷改变成NTFS的Windows功能。
可悲的是,这样的转换几乎是不可能的,而且我认为这在将来也不会成为可能。很多原因导致该功能在最初不会是一个好想法,而且它会变得越来越不必要。下面就是原因。
一开始,磁盘格式的就地转换本身就很危险。当你在给定系统唯一可用的副本上工作时,这是颇具风险的行为。你相信该程序可以立刻操控整个卷,不会有多大失误。如果转换期间某部分出错了,该数据的唯一副本就破坏了。此外,如果该数据对你有任何一点价值,它就值得备份。如果你做了备份,你***是在备份副本上工作而不是在原始版本上以任何形式工作。这是你选择迁移的***选择:不妨碍现有卷,以某种形式备份它,不管是通过备份工具、磁盘镜像程序还是一个简单的归档工具,然后使用备份来在所需文件系统中的其它地方重建数据。
再者,每个文件都有一些功能不能精确地映射到另一个文件系统。一个非常明显的例子就是Linux系统中的ext3和ext4(以及一般的Unix文件系统)拥有的功能就完全不能在NTFS中复制。这里举两个例子。***个就是Linux文件系统区分大小写:例如,你在同一个目录中可以有两个文件分别命名为RASTER和raster。NTFS会只允许一个文件用这个名字,不管他用的是大写还是小写。另一个例子就是分隔符(|)。如果你想将ext3/4文件系统转换成NTFS,必须修改文件名字来确保兼容性,否则它可能反过来破坏其它的事情。
第三,几乎没有什么情况是你必须要执行就地修改的。在过去的十年中,存储的价格轮番减少且更加灵活了,这意味着安装第二个硬盘并复制硬盘内容到第二硬盘比尝试着就地转换要更便宜、更简单,也更安全。在我遇到的几乎每一种情况下,相比于所谈系统方面的任一实际的技术限制来说,都与错误的观念或管理员方面的创造性更能导致就地升级某些东西的需要无法满足。如果你发现你自己处于必须迁移数据的情形中,你有很多种选择,但不包括就地分区操作。
1.备份数据并在别处存储
如上所示,该方法是最简单、最受支持且最不复杂的。你需要的是一个某类别的目标设备,它能被目标系统读取。大多数种类的Linux现在已经内置了某些形式的读/写NTFS兼容性,或者如果其它所有都失败了,你可以写入到一个FAT32卷(Linux广泛支持它)或一个网络共享。记住,如果你把FAT32用作目标,所有写入到该卷的文件大小都必须小于4GB,不管它们是原硬盘上文件的副本还是备份归档,所在在这样的卷上备份一个完整的文件是个问题,如果可能的话,你会需要把文件分成若干个块。
2.增加Windows的Linux文件系统兼容性并在Windows中迁移文件
Windows不是与身俱来就能支持ext3/4或其它Linux文件系统,但是你可以添加这项功能。例如,Ext2Fsd项目让你通过ext4安装和读取ext2(尽管ext4还是只读的),虽然它不支持LVM或Linux RAID卷。其它相似的项目也存在,EXT2IFS和fs-driver.org就是,但是Ext2Fsd在它们中似乎是更新最规律的,而且它有的功能其它项目没有。
3.增加Linux的Windows文件系统兼容性并在Linux中迁移文件
虽然大部分Linux版本现在已经把NTFS作为一个常见功能来支持了,但你还是有可能要进行Linux系统中的Windows迁移,你***还是把Windows用作第二选择,这么做有两个原因。***个是文件许可:如果你正在使用Windows来检索文件并将它们放置在NTFS部分,你无须做额外的检查来保证用户许可和其它NTFS元属性都正确设置和维护了。