Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64117
  • 博文数量: 17
  • 博客积分: 640
  • 博客等级: 上士
  • 技术积分: 180
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-08 15:00
文章分类

全部博文(17)

文章存档

2011年(1)

2009年(16)

我的朋友
最近访客

分类: LINUX

2009-10-31 11:27:11

fstab’的用处

‘/etc/fstab’是‘mount’命令重要的配置文件。您可以‘root’身份通过‘diskdrake’(Mandrake Linux 控制中心 - 载入点),或用编辑器修改这个文件。
 
‘/etc/fstab’有几个用处:
       决定开机时自动挂载哪些介质;
       指定每个介质挂载时的可选项、载入点;
       系统用来挂载几个虚拟文件系统。
开机时挂载介质

默认下,开机时‘fstab’中列出的所有介质都将被挂载。如果其中某个介质出了问题,‘mount’会显示出错信息,然后继续下一条目。请注意,这对于网络介质,比如 NFS 或 SMB 共享,也有效。如果想取消开机时的自动挂载,您得在‘/etc/fstab’给相应条目提供‘noauto’可选项。
指定挂载的可选项和载入点

如果阅读了上一篇,您就已经知道‘mount’命令有两种可选项:常规可选项、文件系统的特殊可选项。

特殊可选项针对特定的文件系统。如果您在‘fstab’中给某个条目提供了特殊可选项(比如用于 Windows FAT 文件系统的 umask=0),只有相应文件系统的介质才可以通过该条目被挂载。如果您想挂载其他文件系统的介质,要么再设置那个可选项,要么创建单独的条目。

指定载入点有个好处,以后可以省略挂载/卸载时的设备文件名。
 
mount mount_point

就将在‘/etc/fstab’寻找相应载入点的条目,并按照预先设定完成挂载。
虚拟文件系统

根据系统配置,‘fstab’含有一些虚拟文件系统的条目,这些条目没有列出相应的设备文件。不管如何,请不要动这些条目!
‘proc’挂载的是“进程树”(process tree) ,提供一些系统的信息;
       ‘pts’启用“伪终端支持”(pseudo terminal support),这是 Unix 的兼容功能;
       ‘shm’开启“POSIX shared memory”,仅有一小部分程序会用到,不会有负面影响。

* section index * top
* ‘fstab’中条目的介绍
本地的固定系统分区

您看到,‘/etc/fstab’中已有几个系统分区(如‘/’)的条目。 就拿这个为例:
/dev/hda3 / ext2 defaults 1 1

语法为:
/dev/hda3 / ext2 defaults 1 1
device_name mount_point file_system options 'dumpe2fs' 'fsck'

这儿有介质(硬盘的分区)的设备名、载入点(/)、文件系统(ext2)。
defaults 包括若干‘mount’的可选项:rw 可读写、 suid 允许设置用户标识符(set-user-identifier)、exec 允许运行程序、auto 开机时自动挂载、nouser 只有‘root’有权卸载、async 允许磁盘延迟存取(caching) 。

最后两个可选项是文件系统工具‘dumpe2fs’、‘fsck’用到的标志。
‘dump’域可设成‘1’(启用)和‘0’(禁用)。由于备份 ext2/ext3 文件系统的程序要用到‘dump’,因此文件系统为 ext2/ext3 的条目要设成‘1’,所有其他条目都为‘0’。
‘fsck’域可设成‘0’(不检查文件系统)、‘1’(先检查)、‘2’(检查)。所有非 Linux 文件系统、可移动的和网络介质、虚拟文件系统都要设成‘0’;由于根分区要先被挂载(接着检查),‘/’条目要设成‘1’;而所有其他不可移动的及 Linux 文件系统的本地介质都要设成‘2’。
可移动介质

可移动的数据存储体,比如光盘,需要不同的可选项(如果您没有用‘supermount’):

/dev/cdrom /mnt/cdrom auto user,noauto,exec,ro 0 0

user 允许用户进行挂载、卸载,否则只有‘root’有此权利。请注意,这个可选项会关闭 exec ,您得在 user 可选项后指定 exec ,以使在用户可在挂载的介质中运行程序,这些和上例是一致的。noauto 指开机时不挂载该介质,一些可移动介质就需要这个可选项。 ro 挂载的介质“只读”(read-only) 。‘dump’、‘fsck’都被关闭了。

虽然光盘没有设成自动挂载,但由于‘/etc/fstab’中的这一条目,使得接下来的挂载变得很简单:放入光盘,然后输入:

mount /mnt/cdrom

‘mount’将在‘/etc/fstab’查找和这个载入点联系的那个条目,并采用列出的可选项,因此,这样您就可以省些输入。在 KDE 中,放入光盘后,您只要用鼠标点击那个光盘图标,就能自动运行‘mount’命令。
挂载后的光盘将锁住光驱,要弹出光盘的话,您得先卸载:umount /mnt/cdrom 。

要配置其他可移动介质,您要知道他们的设备文件名,可以看一下 devices.txt 或阅读 有关可移动存储设备的文章 。
本地的固定非系统分区

MS-Windows 分区的条目看起来是什么样呢?假设是在第一块 IDE 硬盘的第二个分区,而且您想要自动挂载:

/dev/hda2 /mnt/win_d vfat umask=0,quiet 0 0

如果是 Windows NT 的 NTFS 分区,就要把‘vfat’换成‘ntfs’。请注意,目前在 Linux 下,只能对 NTFS 的文件系统读,而不能写。

‘umask’可选项将关闭权限监查,没有这项的话,就只有‘root’能存取该设备上的文件。当向这个介质移动文件时,由于无法设置权限,会显示恼人的出错信息,用‘quiet’就可以不显示这些无关紧要的信息。

如果 Windows 分区中的文件名看起来很奇怪,那您就得再添两个可选项:‘iocharset’和‘codepage’。默认下,‘mount’用‘iso8859-1’字符集和 codepage 437 。修改后,可以实现字符转换。man charsets 列出了可用的字符集,将 codepage 设成 850 (codepage=850)就可以解决一些问题。

(注:要显示简体中文的话,得添上 charsets=gb2312,codepage=936)


一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。
对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux使用的文件系统格式是不一样的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、 NTFS。挂载前要了解linux是否支持所要挂载的文件系统格式。

挂载时使用mount命令:
格式:mount [-参数] [设备名称] [挂载点]

其中常用的参数有
-t<文件系统类型> 指定设备的文件系统类型,常见的有:
minix linux最早使用的文件系统
ext2 linux目前常用的文件系统
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 网络文件系统
iso9660 CD-ROM光盘标准文件系统
ntfs windows NT 2000的文件系统
hpfs OS/2文件系统
auto 自动检测文件系统
-o<选项> 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有
codepage=XXX 代码页
iocharset=XXX 字符集
ro 以只读方式挂载
rw 以读写方式挂载
nouser 使一般用户无法挂载
user 可以让一般用户挂载设备

提醒一下,mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。这样OK?)

例子:windows98装在hda1分区,同时计算机上还有软盘和光盘需要挂载。
# mk /mnt/winc
# mk /mnt/floppy
# mk /mnt/cdrom
# mount -t vfat /dev/hda1 /mnt/winc
# mount -t msdos /dev/fd0 /mnt/floppy
# mount -t iso9660 /dev/cdrom /mnt/cdrom
现在就可以进入/mnt/winc等目录读写这些文件系统了。
要保证最后两行的命令不出错,要确保软驱和光驱里有盘。(要是硬盘的磁盘片也可以经常随时更换的话,我想就不会犯这样的错误了 :-> )
如果你的windows98目录里有中文文件名,使用上面的命令挂载后,显示的是一堆乱码。这就要用到 -o 参数里的codepage iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文一般用cp936或 gb2312。

当挂载的文件系统linux不支持时,mount一定报错,如windows2000的ntfs文件系统。可以重新编译linux内核以获得对该文件系统的支持。关于重新编译linux内核,就不在这里说了。

自动挂载

每次开机访问windows分区都要运行mount命令显然太烦琐,为什么访问其他的linux分区不用使用mount命令呢?
其实,每次开机时,linux自动将需要挂载的linux分区挂载上了。那么我们是不是可以设定让linux在启动的时候也挂载我们希望挂载的分区,如windows分区,以实现文件系统的自动挂载呢?
这是完全可以的。在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。我的/etc/fstab文件如下:

/dev/hda2 / ext3 defaults 1 1
/dev/hda1 /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda3 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0
/dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0

在/etc/fstab文件里,第一列是挂载的文件系统的设备名,第二列是挂载点,第三列是挂载的文件系统类型,第四列是挂载的选项,选项间用逗号分隔。第五六列不知道是什么意思,还望高手指点。

在最后两行是我手工添加的windows下的C;D盘,加了codepage=936和iocharset=cp936参数以支持中文文件名。参数defaults实际上包含了一组默认参数:
rw 以可读写模式挂载
suid 开启用户ID和群组ID设置位
dev 可解读文件系统上的字符或区块设备
exec 可执行二进制文件
auto 自动挂载
nouser 使一般用户无法挂载
async 以非同步方式执行文件系统的输入输出操作

大家可以看到在这个列表里,光驱和软驱是不自动挂载的,参数设置为noauto。(如果你非要设成自动挂载,你要确保每次开机时你的光驱和软驱里都要有盘,呵呵。)

linux下挂载(mount)光盘镜像文件、移动硬盘、U盘、Windows和NFS网络共享

linux是一个优秀的开放源码的操作系统,可以运行在大到巨型小到掌上型各类计算机系统上,随着 linux系统的日渐成熟和稳定以及它开放源代码特有的优越性,linux在全世界得到了越来越广泛的应用。现在许多企业的计算机系统都是由UNIX系统、Linux系统和Windows系统组成的混合系统,不同系统之间经常需要进行数据交换。下面我根据自己的实际工作经验介绍一下如何在linux系统下挂接(mount)光盘镜像文件、移动硬盘、U盘以及Windows网络共享和UNIX NFS网络共享。   
  挂接命令(mount)
  首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。
  命令格式:
  mount [-t vfstype] [-o options] device dir
  其中:
  1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
  光盘或光盘镜像:iso9660
  DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
  Windows NT ntfs文件系统:ntfs
  Mount Windows文件网络共享:smbfs
  UNIX(LINUX) 文件网络共享:nfs
  2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
  loop:用来把一个文件当成硬盘分区挂接上系统
  ro:采用只读方式挂接设备
  rw:采用读写方式挂接设备
  iocharset:指定访问文件系统所用字符集
  3.device 要挂接(mount)的设备。
  4.dir设备在系统上的挂接点(mount point)。
  挂接光盘镜像文件
  由于近年来磁盘技术的巨大进步,新的电脑系统都配备了大容量的磁盘系统,在Windows下许多人都习惯把软件和资料做成光盘镜像文件通过虚拟光驱来使用。这样做有许多好处:一、减轻了光驱的磨损;二、现在硬盘容量巨大存放几十个光盘镜像文件不成问题,随用随调十分方便;三、硬盘的读取速度要远远高于光盘的读取速度,CPU占用率大大降低。其实linux系统下制作和使用光盘镜像比Windows系统更方便,不必借用任何第三方软件包。
1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。
   #cp /dev/cdrom /home/sunky/mydisk.iso 或
   #dd if=/dev/cdrom of=/home/sunky/mydisk.iso
   注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso
  2、将文件和目录制作成光盘镜像文件,执行下面的命令。
   #mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir
   注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk
  3、光盘镜像文件的挂接(mount)
   #mkdir /mnt/vcdrom
   注:建立一个目录用来作挂接点(mount point)
   #mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom
   注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了。

挂接移动硬盘
  对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
  [root at pldyrouter /]# fdisk -l
  Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
  255 heads, 63 sectors/track, 8924 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot Start End Blocks Id System
  /dev/sda1 1 4 32098+ de Dell Utility
  /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
  /dev/sda3 2555 7904 42973875 83 Linux
  /dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
  /dev/sda5 7905 8924 8193118+ 82 Linux swap
  在这里可以清楚地看到系统有一块SCSI硬盘/dev/sda和它的四个磁盘分区/dev/sda1 -- /dev/sda4, /dev/sda5是分区/dev/sda4的逻辑分区。接好移动硬盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况
[root at pldyrouter /]# fdisk -l
  Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
  255 heads, 63 sectors/track, 8924 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot Start End Blocks Id System
  /dev/sda1 1 4 32098+ de Dell Utility
  /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
  /dev/sda3 2555 7904 42973875 83 Linux
  /dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
  /dev/sda5 7905 8924 8193118+ 82 Linux swap
  Disk /dev/sdc: 40.0 GB, 40007761920 bytes
  255 heads, 63 sectors/track, 4864 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot Start End Blocks Id System
  /dev/sdc1 1 510 4096543+ 7 HPFS/NTFS
  /dev/sdc2 511 4864 34973505 f Win95 Ext'd (LBA)
  /dev/sdc5 511 4864 34973473+ b Win95 FAT32
大家应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev/sdc1?、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区。我们可以使用下面的命令挂接/dev/sdc1和/dev/sdc5。
   #mkdir -p /mnt/usbhd1
   #mkdir -p /mnt/usbhd2
   注:建立目录用来作挂接点(mount point)
   #mount -t ntfs /dev/sdc1 /mnt/usbhd1
   #mount -t vfat /dev/sdc5 /mnt/usbhd2
   注:对ntfs格式的磁盘分区应使用-t ntfs 参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。
   #mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1
   #mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2
  linux系统下使用fdisk分区命令和mkfs文件系统创建命令可以将移动硬盘的分区制作成linux系统所特有的ext2、ext3格式。这样,在linux下使用就更方便了。使用下面的命令直接挂接即可。
   #mount /dev/sdc1 /mnt/usbhd1

挂接U盘
  和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的。使用方法和移动硬盘完全一样。插入U盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
  [root at pldyrouter root]# fdisk -l
  Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
  255 heads, 63 sectors/track, 8924 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot Start End Blocks Id System
  /dev/sda1 1 4 32098+ de Dell Utility
  /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
  /dev/sda3 2555 7904 42973875 83 Linux
  /dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
  /dev/sda5 7905 8924 8193118+ 82 Linux swap
  插入U盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
  Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
  255 heads, 63 sectors/track, 8924 cylinders
  Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot Start End Blocks Id System
  /dev/sda1 1 4 32098+ de Dell Utility
  /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
  /dev/sda3 2555 7904 42973875 83 Linux
  /dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
  /dev/sda5 7905 8924 8193118+ 82 Linux swap
  Disk /dev/sdd: 131 MB, 131072000 bytes
  9 heads, 32 sectors/track, 888 cylinders
  Units = cylinders of 288 * 512 = 147456 bytes
  Device Boot Start End Blocks Id System
  /dev/sdd1 * 1 889 127983+ b Win95 FAT32
  Partition 1 has different physical/logical endings:
  phys=(1000, 8, 32) logical=(888, 7, 31)
  系统多了一个SCSI硬盘/dev/sdd和一个磁盘分区/dev/sdd1,/dev/sdd1就是我们要挂接的U盘。
#mkdir -p /mnt/usb
  注:建立一个目录用来作挂接点(mount point)
  #mount -t vfat /dev/sdd1 /mnt/usb
  注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。
  #mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb
  挂接Windows文件共享
  Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba 软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。当然也可以到 网站下载......新的版本是3.0.10版。
  当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下:
  # mkdir –p /mnt/samba
  注:建立一个目录用来作挂接点(mount point)
  # mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba
  注:administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享
  如此就可以在linux系统上通过/mnt/samba来访问windows系统磁盘上的文件了。以上操作在redhat as server 3、redflag server 4.1、suse server 9以及windows NT 4.0、windows 2000、windows xp、windows 2003环境下测试通过。
  挂接UNIX系统NFS文件共享
  类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍一下在linux下如何mount nfs网络共享。
  在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。
1、Solaris系统NFS服务端配置方法如下:
   (1)修改 /etc/dfs/dfstab, 增加共享目录
      share -F nfs -o rw /export/home/sunky
   (2)启动nfs服务
      # /etc/init.d/nfs.server start
   (3)NFS服务启动以后,也可以使用下面的命令增加新的共享
      # share /export/home/sunky1
      # share /export/home/sunky2
   注:/export/home/sunky和/export/home/sunky1是准备共享的目录
  2、linux系统NFS服务端配置方法如下:
   (1)修改 /etc/exports,增加共享目录
  /export/home/sunky 10.140.133.23(rw)
  /export/home/sunky1 *(rw)
  /export/home/sunky2 linux-client(rw)
注:/export/home/目录下的sunky、sunky1、sunky2是准备共享的目录,10.140.133.23、*、 linux-client是被允许挂接此共享linux客户机的IP地址或主机名。如果要使用主机名linux-client必须在服务端主机 /etc/hosts文件里增加linux-client主机ip定义。格式如下:
   10.140.133.23 linux-client
   (2)启动与停止NFS服务
   /etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)
   /etc/rc.d/init.d/nfs start 启动NFS服务
   /etc/rc.d/init.d/nfs stop 停止NFS服务
   注:若修改/etc/export文件增加新的共享,应先停止NFS服务,再启动NFS服务方能使新增加的共享起作用。使用命令exportfs -rv也可以达到同样的效果。
  3、linux客户端挂接(mount)其他linux系统或UNIX系统的NFS共享
   # mkdir –p /mnt/nfs
   注:建立一个目录用来作挂接点(mount point)
   #mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs
   注:这里我们假设10.140.133.9是NFS服务端的主机IP地址,当然这里也可以使用主机名,但必须在本机/etc/hosts文件里增加服务端ip定义。/export/home/sunky为服务端共享的目录。
  如此就可以在linux客户端通过/mnt/nfs来访问其它linux系统或UNIX系统以NFS方式共享出来的文件了。以上操作在 redhat as server 3、redflag server4.1、suse server 9以及Solaris 7、Solaris 8、Solaris 9 for x86&sparc环境下测试通过。
权限问题:
假設 server 端的使用者 jack, user id 為 1818, gid 為 1818, client 端也有一個使用者 jack,但是 uid 及 gid 是 1818。client 端的 jack    希望能完全讀寫 server 端的 /home/jack 這個目錄。server 端的 /etc/exports 是
   這樣寫的:
      /home/jack *(rw,all_squash,anonuid=1818,anongid=1818)
   這個的設定檔的意思是,所有 client 端的使用者存取 server 端 /home/jack 這
   目錄時,都會 map 成 server 端的 jack (uid,gid=1818)。我 mount 的結果是
   1. client 端的 root 可以完全存取該目錄, 包括讀、寫、殺……等
   2. client 端的 jack (uid,gid=1818) 我可以做:
    rm -rf server_jack/*
    cp something server_jack/
    mkdir server_jack/a


 

 


阅读(1530) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~