您的位置:首页 > 其它

fuse-convmvfs 0.2.6介绍及使用

2011-11-10 09:13 204 查看

1、 摘要

fuse-convmvfs是一个基于FUSE(Filesystem in USErspace)的用户态文件系统, 用于

将文件系统树中的一个分支的文件名的编码映射为另一种编码,并且将其装载在

一个其他装载点下。

2、 动机

Convmv(http://osx.freshmeat.net/projects/convmv/)是一个现有的用于转换

文件名编码的小工具。 受这个软件的启发,开发出了convmvfs,一个用于转换

文件名编码的文件系统。

一个实用的例子:在中国,计算机系统中广泛使用一种国家标准GB2312来存储中

文,这种习惯导致了很多中文软件的ftp客户端只识别远端服务器上的GB2312编

码的文件名。然而现在用于架设ftp服务器的*nix系统越来越倾向于使用UTF-8编

码来存储文件名。为了解决这个问题,使用本软件,可以达到这样的效果:假设

一个FTP服务器将/ftp/目录设置为匿名用户登录的ftp根目录,并且其下的文

件名是UTF-8编码的,为了让windows上的只能识别GB2312编码的客户端能够正常

访问ftp,可以用convmvfs软件将/ftp/pub_gbk映射/ftp/pub目录,任何访问

/ftp/pub_gbk目录的都将得到GB2312编码的文件名,但是文件内容将保持无变化。

3、 安装

本软件需要你的系统安装有FUSE 2.5或者更高的版本,FUSE可以从这里得到:
http://fuse.sourceforge.net
成功安装和配置FUSE后,在convmvfs的目录下执行下列命令:

./configure

make

make install (as root)

这样就安装完毕了。你可以执行convmvfs --help得到帮助信息。

如果你是从cvs中得到最新软件, 你需要首先执行'autoreconf -iv'。

注:在./configure的时候,出现了一个BUG,大致过程是这样的:

……

checking for pkg-config... /usr/bin/pkg-config

checking pkg-config is at least version 0.9.0... yes

checking for CONVMVFS... configure: error: Package requirements (fuse >= 2.5) were not met:

No package 'fuse' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you

installed software in a non-standard prefix.

……

在网上查找相关的解决方法,未果。只有按照提示和给出的log解决。经查询,fuse在安装的时候会生成一个fuse.pc的文件,里面记录了fuse的版本、路径等相关信息,fuse-convmvfs 需要根据该文件来查看fuse的版本,如果找不到该文件,就会出现上述错误报告。所以在安装fuse-convmvfs 的时候,需要一个环境变量来指定该文件的路径。该文件默认安装fuse的时候会被安装到/usr/local/lib/pkgconfig/目录下面,所以在执行./configure之前需要先提供该环境变量:export
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig,然后再执行./configure就可以了。

4、 如何使用

一旦convmvfs被安装,运行是相当简单的:

usage: convmvfs mountpoint [options]

general options:

-o opt,[opt...] mount options

-h --help print help

-V --version print version

FUSE options:

-d -o debug enable debug output (implies -f)

-f foreground operation

-s disable multi-threaded operation

-o allow_other allow access to other users

-o allow_root allow access to root

-o nonempty allow mounts over non-empty file/dir

-o default_permissions enable permission checking by kernel

-o fsname=NAME set filesystem name

-o large_read issue large read requests (2.4 only)

-o max_read=N set maximum size of read requests

-o hard_remove immediate removal (don't hide files)

-o use_ino let filesystem set inode numbers

-o readdir_ino try to fill in d_ino in readdir

-o direct_io use direct I/O

-o kernel_cache cache files in kernel

-o umask=M set file permissions (octal)

-o uid=N set file owner

-o gid=N set file group

-o entry_timeout=T cache timeout for names (1.0s)

-o negative_timeout=T cache timeout for deleted names (0.0s)

-o attr_timeout=T cache timeout for attributes (1.0s)

CONVMVFS options:

-o srcdir=PATH which directory to convert

-o icharset=CHARSET charset used in srcdir

-o ocharset=CHARSET charset used in mounted filesystem

注意:

* 如果你使用普通用户运行软件,首先需要确定是否有读写权限于/dev/fuse文

件。

* 使用'iconv --list'可以看到软件支持哪些编码。

* 使用allow_other选项可以让其他用户访问文件系统。

* 重要:srcdir和文件系统挂载点不能是同一个文件夹,否则文件操作将陷入

不可中断的死循环。一定要避免这种情形。

运行实例:

* 挂载文件系统

$convmvfs /ftp/pub_gbk -o srcdir=/ftp/pub, icharset=utf8,ocharset=gbk

* 卸载文件系统

$fusermount -u /ftp/pub_gbk

注: 在使用过程中,可能会出现找不到libfuse.so的错误,那是因为没有把libfuse.so的链接库添加到环境变量中,所以,你需要手动的添加这个环境变量,方法是:在

$Home/.bashrc中的末行添加

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib

然后,执行. ~/.bashrc即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: