一天一点学习Linux之文件系统的手动挂载

2011年05月27日 Linux基础 评论 1 条 阅读 20,675 views 次

我们通过上一节已经对磁盘进行了分区与格式化了,如果说在windows系统下,我们就能正常使用了,而在Linux系统上则不行,他需要挂载后才能正常的使用。那么,挂载就是我们今天学习的内容。

挂载点

要学习挂载,先来看看什么是挂载点,他的作用是什么?
我们知道,在Linux的文件系统结构是一个倒树状的。如果我们要增加新的东西到这个树上,我们就需想办法系一个什么东西,那么我们就可以把这个东西叫做挂载点。这个挂载点就是让其他的文件系统进入我们的目录树。所以挂载点有一个特点,那就是必需是个目录。

下面我们来看个例子

[root@yufei ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   6928372   7422356  49% /
tmpfs                   255784         0    255784   0% /dev/shm

从上面的信息可以看到,我的磁盘sda的第一个分区sda1,他的挂载点是/。如果说你是接着上一节进行的实验的话,那么我们的第二块磁盘的信息并没有显示在这里,原因就是:我们还没有对其进行挂载,所以我们的目录树上还没有。

挂载


除了上面我们讲到的挂载点的特点外,一般情况下,应该是个空目录。当然,如果不是空目录也没有什么大的影响,因为挂载时,这个目录里面原来的内容全部被隐藏起来了,当我们卸载后,里面的原有内容就出来了。但我们不建议你用非空目录来做挂载点。因为你如果挂载点错误的话,可能会对系统产生影响的哦,比如挂载到用户的家目录。由此延伸出来,一个挂载点也不要重复挂载多个文件系统。

如何挂载文件系统


如果要挂载文件系统的话,那么就要请出我们今天的主角mount,这个命令在Linux系统上使用的机率是很高的。简单的来介绍一个这个命令的用法。

mount命令格式

mount 参数 -t 文件系统 -o 选项 设备 挂载点

mount 后面什么也不加的话,会显示目前挂载的信息
mount -a 会根据/etc/fstab文件中的信息,将没有挂载全部挂载上
mount -t 文件系统
		文件系统包括的内容主要包括:ext3 ext4 vfat ntfs iso nfs smbfs
      -o 后面的选项内容很多,主要是一些挂载时候的权限限制类的。
		ro/rw: 挂载文件系统时成为只读(ro)或可读写(rw)
		exec/noexec: 是否允许此文件系统上拥有可执行的文件
		suid/nosuid: 是否允许此文件系统上含有suid的文件
		dev/nodev: 是否允许此文件系统上建立设备文件
		auto/noauto: 允许此文件系统用mount -a自动挂载
		async/sync: 此文件系统是否使用同步(sync)或异步(async)写入硬盘的内存机制
		user/nouser: 是否允许此文件系统让任何用户执行mount命令
		defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async
		remount: 重新挂载。这个选项在系统修复,或重新更新参数时经常用到
设备:系统中有哪些存储设备,主要通过fdisk -l或者查看/etc/fstab或dmesg。一般的情况下光驱设备是/dev/cdrom,软驱设备是/dev/fd0(好像现在没有软驱了),硬盘及移动硬盘以 fdisk -l 的输出为准。
挂载点:这个就不用说了,自己建立一个空目录就OK了。

当然还有其他的一些参数和选项,这里大家可以通过MAN来查看更多的帮助信息。关键是要实践。那么下面我们就来通过例子熟悉此命令的使用。

我们还是以昨天分区的硬盘为例来给大家演示,我们只演示EXT4文件系统的挂载,其他的文件系统也是一样,只是-t 文件系统类型这里不一样而已。当然,我们注明一些其他的注意事项的。

[root@yufei ~]# fdisk -l

查看系统中的磁盘及分区信息


我只截取部份内容如下

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd6737273

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  83  Linux
/dev/sdb2             133         183      409657+  83  Linux
/dev/sdb3             184        2610    19494877+   5  Extended
/dev/sdb5             184         445     2104483+  83  Linux
/dev/sdb6             446         511      530113+  82  Linux swap / Solaris

因为上一节课程中只对sdb1进行了格式化了,而其他的分区我们没有进行格式化。所以这里我们会给大家演示没有格式化挂载时候的情况。

挂载ext4文件系统

先创建挂载点,我比较喜欢用系统的/mnt目录,所以这里我就不创建目录了。

然后进行挂载

[root@yufei ~]# mount /dev/sdb1 /mnt

这里我没有指定文件系统的类型,为什么不指定也能被正确识别呢?主要是因为我们的系统中已经有了这些默认的类型驱动,那么我是怎么知道系统中到底有多少是默认的呢?你可以通过查看下面两个文件来得知。

/etc/filesystems:系统指定的默认挂载文件系统类型

/proc/filesystems:Linux系统已经加载的文件系统类型

这里面虽然是有了,但我怎么知道我的Linux系统有没有相关文件系统类型的驱动呢?我们可能通过 /lib/modules/$(uname -r)/kernel/fs/这个目录里面的信息来查看支持的文件系统驱动程序。

如果是在这之外的文件系统,就必需加上-t和相应的文件系统类型了。

我们用df来查看挂载情况,这个和一开始查看的结果进行对比

[root@yufei ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   6928404   7422324  49% /
tmpfs                   255784         0    255784   0% /dev/shm
/dev/sdb1              1033560     40980    939568   5% /mnt

我们看到最后一行得到了我们刚才挂载的分区了,现在可以在/mnt里面写东西了。

[root@yufei ~]# touch /mnt/testfile
[root@yufei ~]# ls -l /mnt/
total 16
drwx------. 2 root root 16384 May 26 16:19 lost+found
-rw-r--r--. 1 root root     0 May 26 23:15 testfile

ok,文件已经写入。接下来,我们来把挂载的选项来改一下,让他是只读的。

[root@yufei ~]# mount -o ro,remount /dev/sdb1
[root@yufei ~]# touch /mnt/testfile2
touch: cannot touch `/mnt/testfile2': Read-only file system

现在/mnt这个挂载点已经不能向里面写入任何的内容了。我没有卸载/dev/sdb1,只用了remount就能重新挂载了,加上ro选项,就变成只读了。关于其他的参数作用,各位自行测试吧。

注意:多个选项之间用英文的,分开。

光盘的挂载

光盘的挂载,这个和分区的挂载是一样的。

[root@yufei ~]# mkdir /media/cdrom
[root@yufei ~]# mount /dev/cdrom /media/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only

这里提示是只读的,因为是光盘啊!

[root@yufei ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   6928416   7422312  49% /
tmpfs                   255784         0    255784   0% /dev/shm
/dev/sdb1              1033560     40980    939568   5% /mnt
/dev/sr0               2862360   2862360         0 100% /media/cdrom

最后一行又多出来一个cdrom。

注意:在RHEL6上,光盘的设备名字变成了sr0了,不再是以前的cdrom了。

挂载光盘应该加上-t iso9660,因为我们的系统文件系统的驱动中已经有了,所以我就不用加参数,系统就能认识了。

U盘的挂载

U盘的挂载其实和硬盘的挂载是一样的,所以这里就不演示了,步骤也是一样的

1、fdisk -l

2、建立挂载点

3、执行挂载命令

具体的演示这里略过,有条件的,自己实践吧!

NTFS文件系统的挂载


请参考在RHEL6上挂载NTFS分区并让其可读可写http://www.opsers.org/base/mount-ntfs-partition-in-rhel6-and-let-it-read-and-write.html

下面演示一个没有格式化的分区挂载的情况

[root@yufei ~]# mkdir /test
[root@yufei ~]# mount /dev/sdb2 /test
mount: you must specify the filesystem type

就算我加上了文件系统类型也是不行的,不过,这里加上文件系统类型也是无意义的,毕竟没有格式化,这只是演示,所以我用ext4来演示一下

[root@yufei ~]# mount -t ext4 /dev/sdb2 /test
mount: wrong fs type, bad option, bad superblock on /dev/sdb2,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

我先来对其格式化,这次把我把格式化成VFAT格式的,所以我先转换分区类型

[root@yufei ~]# fdisk /dev/sdb
Command (m for help): t
Partition number (1-6): 2
Hex code (type L to list codes): b
Changed system type of partition 2 to b (W95 FAT32)
别忘记保存啊
Command (m for help): w
下面进行格式化
[root@yufei ~]# mkfs.vfat /dev/sdb2
mkfs.vfat 3.0.9 (31 Jan 2010)
然后进行挂载
[root@yufei ~]# mount /dev/sdb2 /test

再来查看挂载的情况

[root@yufei ~]# df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda1     ext4    15118728   6928520   7422208  49% /
tmpfs        tmpfs      255784         0    255784   0% /dev/shm
/dev/sdb1     ext4     1033560     40980    939568   5% /mnt
/dev/sr0   iso9660     2862360   2862360         0 100% /media/cdrom
/dev/sdb2     vfat      409424         0    409424   0% /test

fat32格式的也挂载上了。

注意:在实际中操作中,直接加挂一个Windows的分区,中文的文件名和目录名可能会出现乱码,为了避免这种情况可以指定字符集,命令如下:

mount /dev/sdb2 /test -o codepage=936,iocharset=cp936

mount /dev/sdb2 /test -o codepage=936,iocharset=cp936

注:cp936是指简体中文,cp950是指繁体中文。

用设备的卷标来挂载


我们在前面对/dev/sdb1进行格式化的时候,指定的标签名。我们来查看一下

[root@yufei ~]# tune2fs -l /dev/sdb1 |more
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   opsers_tech

此处省略很多行

下面进行挂载操作

[root@yufei ~]# mount -L opsers_tech -o remount 
用df还是看到是原来的内容,为了让大家看明白,我们把这个先卸载了,
[root@yufei ~]# umount /mnt
[root@yufei ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   6928544   7422184  49% /
tmpfs                   255784         0    255784   0% /dev/shm
/dev/sr0               2862360   2862360         0 100% /media/cdrom
/dev/sdb2               409424         0    409424   0% /test

然后用卷标的方式来挂载

[root@yufei ~]# mount -L opsers_tech /mnt
[root@yufei ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   6928544   7422184  49% /
tmpfs                   255784         0    255784   0% /dev/shm
/dev/sr0               2862360   2862360         0 100% /media/cdrom
/dev/sdb2               409424         0    409424   0% /test
/dev/sdb1              1033560     40980    939568   5% /mnt

同样能挂载上,只是把设备名换成了卷标而已。

ISO文件的挂载


我们创建个50M的ISO文件

[root@yufei ~]# dd if=/dev/zero of=test.iso bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 0.513358 s, 102 MB/s

对其进行格式化

[root@yufei ~]# mkfs.ext4 test.iso 
mke2fs 1.41.12 (17-May-2010)
test.iso is not a block special device.
Proceed anyway? (y,n) y
此处省略很多行

进行挂载

[root@yufei ~]# mkdir /loop
[root@yufei ~]# mount -o loop test.iso /loop
[root@yufei ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   6979752   7370976  49% /
tmpfs                   255784         0    255784   0% /dev/shm
/dev/sr0               2862360   2862360         0 100% /media/cdrom
/dev/sdb2               409424         0    409424   0% /test
/dev/sdb1              1033560     40980    939568   5% /mnt
/dev/loop0               49574      4906     42108  11% /loop

同样能正常写文件

[root@yufei ~]# touch /loop/test
[root@yufei ~]# ls /loop/
lost+found  test

关于网络文件系统的挂载,我们会在后面的服务里面给大家讲解,这里先略过了。

文件系统的卸载

OK,介绍了这么多挂载的内容,那么我想把挂载的内容卸载,我要怎么办呢?

那就是umount命令了,这个命令比较简单

格式是

umount 参数 设备名或挂载点

-f :强制卸载。可用在类似网络文件系统 (NFS) 无法读取到的情况下

-n :不更新/etc/mtab 情况下卸载

[root@yufei ~]# umount /mnt		#接的是挂载点
[root@yufei ~]# umount /dev/sr0	#接的是设备
[root@yufei ~]# umount /dev/sdb2#接的是设备
[root@yufei ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   6928528   7422200  49% /
tmpfs                   255784         0    255784   0% /dev/shm

这样就把我刚才挂载的内容,全部卸载掉了。

我们前面不是向/mnt不是创建了一个文件了吗?现在我们来看看他还在不在/mnt中,

[root@yufei ~]# ls /mnt
hgfs

我们创建的文件不在这里,而hgfs这个目录,是系统自带的。这也验证文章开头给大家提到的,不会破坏目录里面的原有内容,当文件系统卸载后就还原了。而我们的挂载点起到的是桥梁作用,虽然是向挂载点中写内容,但实际上,写入的对象是对应的设备。我们把设备挂载上再看看是不是这样。

[root@yufei ~]# mount /dev/sdb1 /mnt
[root@yufei ~]# ls /mnt
lost+found  testfile
testfile又出来了。
[root@yufei ~]# umount /mnt
[root@yufei ~]# ls /mnt
hgfs
/mnt又还原了

今天主要讲的是挂载,而且都是手动实现的,这样有点太麻烦,明天我们讲如何实现自动挂载

本文关键字:RHEL6 一天一点 学习Linux 文件系统 挂载 mount

1 条留言  访客:0 条  博主:0 条   引用: 1 条

来自外部的引用: 1 条

  • 梦,从这里起航! » raid5详解

给我留言

Copyright © 羽飞博客 保留所有权利.   Ality主题 皖ICP备14013844号-1

用户登录