免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 975 | 回复: 0
打印 上一主题 下一主题

编译内核来支持linux下ntfs文件系统的挂载 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-23 10:50 |只看该作者 |倒序浏览
 Windows中分区格式一般为FAT16、FAT32、NTFS。移动硬盘作为共享式硬盘,所以格式一般也为上面的三种,这样才可以保证在Windows和Linux系统下共享一块移动硬盘。LinuxRedHat8.0支持fat16和fat32格式分区的访问,但并不支持NTFS格式分区的访问,所以需要对内核进行重新编译才可以支持对NTFS格式的访问。下面介绍NTFS和NTFS-3G的安装和编译的方法,实现在Linux下对NTFS磁盘格式的访问。
2.1   
NTFS安装编译
   
首先使用下面的命令查询目前所使用的Linux的内核版本。
     # uname-r
     
本机得到的信息是“2.4.18-14”,下面的步骤都是选择本机版本相对应的RPM组件和文件夹,从http://www.linux-ntfs.org/网站下载系统所需的kernel-ntfs-2.4.18-14.i686.rpm组件。下载完成使用下面的命令安装该组件:
     # rpm
ivh kernel-ntfs-2.4.18-14.i686.rpm
   
以root身份登陆Linux,将Linux的第二张安装盘放入光驱,找到/redhat/RPMS目录下的kernel-source-2.4.18-14.i386.rpm文件,输入下面的命令:
     # rpm
ivh kernel-2.4.18-14.i386.rpm
   
安装好NTFS软件包后,开始编译:进入/usr/src/linux-2.4.18-14/config目录,将kernel-2.4.18-14.i686.config文件复制到/
usr/src/linux-2.4.18-14目录下,接着#vikernel-2.4.18-14.i686.config打开该文件,把#CONFIG-NTFS-FS
is not set 这一行改为CONFIG-NTFS-FS=m。然后到/
usr/src/linux-2.4.18-14目录下,对NTFS模块进行编译,输入以下命令:
     #make  
modules
     
编译完成后,到/ usr/src/linux-2.4.18-14/fs/ntf
目录下找到一个ntfs.o文件,将其文件复制到/lib/modules/2.4.18-14/kernel/fs目录下。最后回到/
usr/src/linux-2.4.18-14目录,输入以下命令:
     #depmod
     #modprobe
ntfs
   
当安装和编译完成后,便可以自行建立一个目录当作挂载点。然后使用mount命令对NTFS移动硬盘进行挂载,读取和运行硬盘里的文件和程序。
2.2   
NTFS-3G安装编译
    以上编译内核可以使Linux
RedHat 8.0挂载NTFS格式的移动硬盘,但只能实现对NTFS格式的读取,如果在Linux下要实现对NTFS格式的读写,则需要安装NTFS-3G。NTFS-3G是在ntfsmount基础上改进而成的,是利用FUSE内核模拟实现的。首先下载相关的源码包:fuse-2.5.2.tar.gz和ntfs-3g-20070714-BETA.tgz,下载fuse的网站是
     
Http://fuse.sourceforge.net/
     
可根据本机的版本选择相应的包,下载NTFS-3G的网站是http://linux-fans.com/wp-content/blogs//1/uploads//ntfs-3g-20070714-BEFA.tgz.tar.gz或者http://www.ntfs-3g.org。安装FUSE和NTFS-3G前,先要确定你的LINUX系统是否已经安装有GUU、make的编译环境,如果没有,可以使用以下命令将开发工具安装上:#redhat-config-packages,接下来下载上面的两个软件包并对其进行解压,使用命令#tar
xvzf file.tar.gz 对以.tgz/.tar.gz为扩展名的文件进行解压,其中x是解压,v是复杂输出,f是指定文件,z是gz格式。然后是FUSE的安装,进入fuse-2.5.2/目录,在终端输入:
     
./configure
     make
     make
install
   
成功安装了fuse-2.5.2后是对ntfs-3g软件包的安装,进入ntfs-3g-20070714-BETA/目录下,在终端中输入:
     
./configure
     make
     make
install
   
安装好fuse-2.5.2和ntfs-3g两个软件包后,在终端控制台下输入以下命令对FUSE进行加载:
     
#modprobe fuse
加载成功后就可以使用mount命令对移动硬盘进行挂载,并能对移动硬盘进行读写。
3   mount
挂载命令

   
首先简单介绍mount命令的使用方法,命令格式为:
   
mount[-t vfstype][-o options]device dir
    其中,-t
vfstype 是指定文件系统的类型,一般不用指定,mount会自动选择正确的类型,常用类型有:
     
光盘或者光盘镜像:iso9660 iso
     DOS
fat16文件系统:msdos
     Windows
9x fat32文件系统:vfat
     Windows
NT ntfs文件系统:ntfs
     mount
Windows 文件网络共享:smbfs
     UNIX
(LINUX) 文件网络共享:nfs
    -o
options 主要用来描述设备或档案的挂载方式,常用参数为:
    loop:
用来把一个文件当成硬盘分区挂接上系统
     ro:
采用只读方式挂接设备
     rw:
采用读写方式挂接设备
     
iocharset: 指定访问文件系统所用字符集
   
codepage=XXX 代码页
   
iocharset=XXX 字符集
     nouser
使一般用户无法挂载
     user
可以让一般用户挂载设备
    device
指要挂接(mount)的设备,dir
指设备在系统上的挂接点(mount
point),首先建立一个挂载点,如#mkdir/mnt/usb,然后使用mount命令进行挂载,对于fat
格式,命令格式如#mount -t
msdos/dev/hda1/mnt/usb,对于fat32格式,命令格式如#mount-t
vfat/dev/hdal/mnt/usb,对于NTFS格式,命令格式如#
mount -t ntfs/dev/sda1/mnt/usb或#
mount -t ntfs-3g/dev/sdal/mnt/usb,其中had、sda是根据自己移动硬盘的性质和机器分区而定的,可以使用#
fdisk -1来查看机器的分区情况。
   
由于挂载的权限只有root
用户才能执行,默认的挂载后的分区拥有者和拥有群组都是root
,所以如果让一般用户使用挂载后的文件,则需要重新设置。首先,root
在运行mount
命令前,须先考滤有几位用户将使用NTFS
分区内的文件,例如hbmc用户需要使用,就可以输入下面的命令:
     #mount
-t ntfs -o uid=hbmc/dev/sda1/mnt/usb
   
挂载完成后,可以看到usb
的拥有者已经变为hbmc。此时,hbmc这位用户便可以使用usb目录下的任何文件了,从而实现了利用NTFS磁盘空间的目的。另外如果目录里有中文文件名,使用上面的命令挂载后,显示是一堆乱码。这就要用到-o参数里的codepage
iocharset选项。codepage指定文件系统的代码页,简体中文代码是936;iocharset指定字符集,简体中文一般用cp936或gb2312。
    当设备不用时可以使用umount命令卸除文件系统,使用方法是:
     #umount/dev/sda1/mnt/usb

4   
Linux下自动挂载方法

   
在使用移动硬盘时,有时想让它开机时自动挂载,可以采取以下方法。在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。例如:
     ……
     
/dev/hda2/ext3 defaults 1 1
   
  /dev/hda5/mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0
     
/dev/sda1/mnt/usb ntfs defaults,codepage=936,iocharset=cp936 0  0
     ……
   
在/etc/fstab文件里,其中每一行为一个分区记录,每一行又可分为六个部份,下面以“/dev/hda2/ext3
defaults 1 1”为例逐个说明:第一项是您想要的mount储存装置的实体位置,如hdb或/dev/hda2;第二项就是您想要将其加入至哪个目录位置,如/home或/,这其实就是在安装时提示的挂入点;第三项就是所谓的local
filesystem,其包含了以下格式:如ext、ext2、msdos、iso9660、nfs、swap等;第四项就是mount时所要设定的状态,如ro(只读)或defaults(包括了其它参数如rw、suid、exec、auto、nouser、async);第五项是提供DUMP功能,在系统DUMP时是否需要BACKUP的标志位,其内定值是0;第六项是设定此filesystem是否要在开机时做check的动作,除了root的filesystem其必要的check为1之外,其它都可认为需要设定,内定值是0。上例中最后一行为自动挂载移动硬盘而加上去的。
   
此外,也可以采取下面的方法实现自动加载,新建mymount文件,然后输入以下代码:
   
#!/bin/bash
     case$1
in
     m)
   mount -t
ntfs -o iocharset=cp936/dev/sda1/mnt/usb
     ;;
     u)
   
   umount-t ntfs-o iocharset=cp936/dev/sdal/mnt
/usb
     ;;
     
ease            
   
上面第一行#!/bin/bash指定以bash
shell执行此文件。case$1
in为取的命令行参数,若为m则开始挂载,若为u则卸载。接下来输入下面命令使它有执行权限:#chmod
u+x mymount,这时只要输入./
mymount m就可以挂载了,如果要做到开机时自动挂载则在/etc/rc.d/rc.local文件中输入sh./root/mymount
m就可以了。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/51827/showart_1333085.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP