VirusCamp 发表于 2006-8-28 00:56:02

【原创】用crossmeta在Win无缝访问Linux分区

VirusCamp 原创,转载请注明作者,原始出处。

在 Linux 下访问 Win 分区,不管是 fat 还是 ntfs 已经比较完善了,而且方法统一,文档丰富,驱动也很容易找。

但在 Win 下访问 Linux 各种分区就很不容易,只读然后导出文件的工具还好,无缝访问工具更难找。

所谓“无缝访问”,seamless access ,就是挂载到本地文件系统,不需要导出后才能读或写。以 iso 为例,比较用 winiso 导出文件再读,用 daemon 挂载成虚拟光驱就能直接读了,这就是“无缝访问”。

Win 实现无缝访问本地 ext2/3 xfs reiserfs 分区,一般是通过 win 的 IFS KIT 对各种文件系统分别实现驱动来实现的。一般是把一个分区映射成一个比如 J: K: 等的盘符。
这有一个很严重的问题,许可证问题,MS 的 IFS KIT 是商业软件,不能和 Linux 下 GPL 的 ext2/3 reiserfs xfs jfs 驱动代码编译到一起的。要法律上没有瑕疵,只有两种方案,重新发明和 IFS 同功能的接口,或者重新发明 linux 文件驱动。法律上,只能用“净室方法”在完全没有接触过替代代码的情况下,通过反向工程作出。
开源的同志们已经作出了 a free version ntifs.h 。许多开源驱动都是用这个的,所以不叫 IFS 叫 FSD 。只要用 GPL,就可以直接用 Linux kernel 里的文件驱动代码。
但许多不开源的,不管是商业还是免费,我觉得里面用的文件系统驱动代码很可疑。
还有一些驱动,不合法的用了 MS 的东西。

各种文件系统的支持程度大不一样,ext2/3 只读访问比较完善,驱动较多,reiserfs 较少,xfs 只有一个不能工作的雏形,ufs 有两个驱动,jfs 根本就没听说过有。

ext2 的驱动有 Ext2IFS , FSDExt2 , Ext2FSD , ext2fsnt 等等。
ext2/3 可以用 ltools , explorer2fs 导出 ext2/3 中的文件,不能无缝访问。
paragon-software.com 就是 partition manager 的公司,有个 Partition Explorer 可以导入,我记得以前好像有驱动的。

reiserfs 驱动只有 rfsd ,导入工具可以用 ltools + GUI 和 rfstool + GUI 。
Total Commander Plugins 支持 ext2/3 和 reiserfs ,据说就是两个开源驱动的组合,所以还是 GPL 的。

xfs 在 win 下有个 xfs32 ,只是雏形,连导入都不能工作。

usf 驱动有 ffsdrv 和 ufs2tools 。

这些软件肯定是要能独得,至于能不能写,我认为任何宣称可写的都值得怀疑,我是不会测试写的,就像 Linux 下我也不会写 ntfs 。至于 fat ,那不是现代的文件系统,结构很简单,我相信 linux 里的实现。

而 crossmeta 虽然用了 MS IFS 和 GPL 文件系统代码,却用一种巧妙的方式避开了法律问题,而且更具扩展性。

首先, crossmeta 用 MS IFS 实现了一个商业的核心程序,挂载了一个 V: 盘符的核心文件系统,布局类似 *nix 系统。在这个系统之上,提供另一个文件系统接口,把其他文件系统挂载到 V:\mnt\xxx 里。
支持 NTFS, FAT and CDFS ,还有 Win 不支持的 NFS version 2 and 3 over UDP 。
而 BSD License 的 UFS/FFS 代码也已经集成。
这个核心是不开源,但免费的。

然后,用自己的文件系统接口,加上 Linux kernel 里的文件驱动代码,作出 EXT2, XFS 和 Reiserfs 的驱动,这是 GPL 的。

Win 的文件系统接口跟 Linux 的是大不一样的,而 crossmeta 的文件系统接口可以更接近 Linux ,移植 Linux 文件系统会比较方便。加上 jfs 支持也不会太难。

但是,crossmeta 这样比较接近 *nix ,配置比较复杂。下面说一下:


http://www.crossmeta.com/crossmeta.html
下载
http://www.crossmeta.com/downloads/crossmeta-nfs-1_0_1.zip
http://www.crossmeta.com/downloads/crossmeta-add-1_0.zip
http://www.crossmeta.com/downloads/crossmeta_jumpstart.pdf
前两个是安装程序,都有 setup.exe ,按顺序安装,没有什么难处,后一个是文档,不读文档,你根本没法挂上任何一个文件系统。

把下面的存为 startvfs.cmd ,在系统启动后运行。
crossmeta 的服务有 bug ,千万不要让这些服务“自动”,一定要“手动”,然后用此文件启动。
还有,关机之前不要忘了先 stopvfs.cmd ,同样是因为这个 bug 。
否则,蓝屏 BSOD 的几率极大。
手工启动停止,一般不会出错。
请按你的需要修改下面两个脚本,挂某类型分区之前,先启动对应的服务 xfs ext2fs reiserfs 。
不要忘了先 mkdir V:\mnt\hda9 这样。还有,它的分区设备名称不是 Linux 样式的,da0 到 da<n> 是物理硬盘,分区从 da0s1 到 da0s<n> 直接对应逻辑分区的顺序,不管扩展分区。就像我下面挂载的。
net start cxvfs
net start cxnfs
net start cxvfsmgr
V:\bin\mount -a
net start xfs
V:\bin\mount -t xfs /dev/da0s6 /mnt/hda9
V:\bin\mount -t xfs /dev/da0s7 /mnt/hda10

有问题,可以用 vfsadmin 图形界面或 V:\bin\dmesg 查看。

很可能你正确启动后,explorer 里看不见 V: ,也不能在 explorer 里输入 V: 进入。
但此时,确实已经挂载,其他程序都能正常浏览,打开 V: , cmd 可以 V: 进入, notepad 可以打开 V: 里的文件。
重启 explorer 就能在 explorer 里看见了。Ctrl-alt-del 杀掉 explorer ,等他自动重启或你手动启动后,就能正常看见 V: 了。

停止,存为 stopvfs.cmd 一定要在关机前手动执行。
net stop cxvfsmgr
D:\Program\crossmeta\umountall
net stop cxnfs
net stop cxvfs

附录,提到的网址

收集此类程序和文档的网址
http://ext2fsd.sourceforge.net/resources/resources.htm
http://www.acc.umu.se/~bosse/
http://www.sjhf.net/Article/sjhfdoc/200608/164.html
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=76764
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=6779

WinNT 的文件系统接口 SDK
IFS Kit 商业的微软的 http://www.microsoft.com/whdc/devtools/ifskit/default.mspx
Ntifs.h 自由的 http://www.acc.umu.se/~bosse/

ext2/3 不能无缝访问的
explore2fs http://www.chrysocome.net/explore2fs
ltools http://www.it.fht-esslingen.de/~zimmerma/software/ltools.html
    命令行,有 Java 和 .net 的 GUI。
Partition Explorer http://www.paragon-software.com/hdm/index.htm
Total Commander Plugins http://www.ghisler.com/plugins.htm

ext2/3 可以挂为盘符,无缝访问的
Ext2IFS http://www.fs-driver.org/
fsdext2 http://www.yipton.demon.co.uk/
ext2fsd http://ext2fsd.sourceforge.net
ext2IFS http://uranus.it.swin.edu.au/~jn/
ext2fsnt http://ashedel.chat.ru/ext2fsnt/
winext2fsd http://winext2fsd.sourceforge.net

reiserfs 不能无缝访问的
ltools http://www.it.fht-esslingen.de/~zimmerma/software/ltools.html
    命令行,有 Java 和 .net 的 GUI。
rfstool http://p-nand-q.com/download/rfstool.html
    rfsgui 好像 native 的 GUI http://www.wolfsheep.com/map/rfsgui/
    YAReG .net 的 GUI http://yareg.akucom.de/
Total Commander Plugins http://www.ghisler.com/plugins.htm

reiserfs 只有这个驱动
rfsd http://rfsd.sf.net

xfs 的
xfs32 根本不能用 http://blitz.phpwebhosting.com/content/XFS32
crossmeta http://www.crossmeta.com/crossmeta.html

ffs/ufs 的
ffsdrv 驱动http://ffsdrv.sourceforge.net/
ufs2tools 命令行不好用 http://ufs2tools.sourceforge.net/

VirusCamp 发表于 2006-8-28 19:46:04

重要补充

crossmeta 的下列有 bug ,千万不要让这些服务“自动”,一定要“手动”,然后用此文件启动。
还有,关机之前不要忘了先 stopvfs.cmd ,同样是因为这个 bug 。
否则,蓝屏 BSOD 的几率极大。
手工启动停止,一般不会出错。
请按你的需要修改下面两个脚本,挂某类型分区之前,先启动对应的服务 xfs ext2fs reiserfs 。


很可能你正确启动后,explorer 里看不见 V: ,也不能在 explorer 里输入 V: 进入。
但此时,确实已经挂载,其他程序都能正常浏览,打开 V: , cmd 可以 V: 进入, notepad 可以打开 V: 里的文件。
重启 explorer 就能在 explorer 里看见了。Ctrl-alt-del 杀掉 explorer ,等他自动重启或你手动启动后,就能正常看见 V: 了。

月下刀客 发表于 2006-8-29 16:19:51

有点麻烦哈 :mrgreen:

VirusCamp 发表于 2006-8-29 20:26:04

有点麻烦哈 :mrgreen:

是有点麻烦,不过在 win 下用 xfs 就只有这个了。
页: [1]
查看完整版本: 【原创】用crossmeta在Win无缝访问Linux分区