Linux之文件系统的手动挂载_5.手动挂载文件系统的方式( )-程序员宅基地

技术标签: cli  sh  linux  挂载  fstab  文件系统  mount  

转自:http://www.opsers.org/base/one-day-little-learning-linux-manually-mount-the-file-system.html

我们通过上一节已经对磁盘进行了分区与格式化了,如果说在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


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/h806968607/article/details/18852655

智能推荐

Docker 快速上手学习入门教程_docker菜鸟教程-程序员宅基地

文章浏览阅读2.5w次,点赞6次,收藏50次。官方解释是,docker 容器是机器上的沙盒进程,它与主机上的所有其他进程隔离。所以容器只是操作系统中被隔离开来的一个进程,所谓的容器化,其实也只是对操作系统进行欺骗的一种语法糖。_docker菜鸟教程

电脑技巧:Windows系统原版纯净软件必备的两个网站_msdn我告诉你-程序员宅基地

文章浏览阅读5.7k次,点赞3次,收藏14次。该如何避免的,今天小编给大家推荐两个下载Windows系统官方软件的资源网站,可以杜绝软件捆绑等行为。该站提供了丰富的Windows官方技术资源,比较重要的有MSDN技术资源文档库、官方工具和资源、应用程序、开发人员工具(Visual Studio 、SQLServer等等)、系统镜像、设计人员工具等。总的来说,这两个都是非常优秀的Windows系统镜像资源站,提供了丰富的Windows系统镜像资源,并且保证了资源的纯净和安全性,有需要的朋友可以去了解一下。这个非常实用的资源网站的创建者是国内的一个网友。_msdn我告诉你

vue2封装对话框el-dialog组件_<el-dialog 封装成组件 vue2-程序员宅基地

文章浏览阅读1.2k次。vue2封装对话框el-dialog组件_

MFC 文本框换行_c++ mfc同一框内输入二行怎么换行-程序员宅基地

文章浏览阅读4.7k次,点赞5次,收藏6次。MFC 文本框换行 标签: it mfc 文本框1.将Multiline属性设置为True2.换行是使用"\r\n" (宽字符串为L"\r\n")3.如果需要编辑并且按Enter键换行,还要将 Want Return 设置为 True4.如果需要垂直滚动条的话将Vertical Scroll属性设置为True,需要水平滚动条的话将Horizontal Scroll属性设_c++ mfc同一框内输入二行怎么换行

redis-desktop-manager无法连接redis-server的解决方法_redis-server doesn't support auth command or ismis-程序员宅基地

文章浏览阅读832次。检查Linux是否是否开启所需端口,默认为6379,若未打开,将其开启:以root用户执行iptables -I INPUT -p tcp --dport 6379 -j ACCEPT如果还是未能解决,修改redis.conf,修改主机地址:bind 192.168.85.**;然后使用该配置文件,重新启动Redis服务./redis-server redis.conf..._redis-server doesn't support auth command or ismisconfigured. try

实验四 数据选择器及其应用-程序员宅基地

文章浏览阅读4.9k次。济大数电实验报告_数据选择器及其应用

随便推点

灰色预测模型matlab_MATLAB实战|基于灰色预测河南省社会消费品零售总额预测-程序员宅基地

文章浏览阅读236次。1研究内容消费在生产中占据十分重要的地位,是生产的最终目的和动力,是保持省内经济稳定快速发展的核心要素。预测河南省社会消费品零售总额,是进行宏观经济调控和消费体制改变创新的基础,是河南省内人民对美好的全面和谐社会的追求的要求,保持河南省经济稳定和可持续发展具有重要意义。本文建立灰色预测模型,利用MATLAB软件,预测出2019年~2023年河南省社会消费品零售总额预测值分别为21881...._灰色预测模型用什么软件

log4qt-程序员宅基地

文章浏览阅读1.2k次。12.4-在Qt中使用Log4Qt输出Log文件,看这一篇就足够了一、为啥要使用第三方Log库,而不用平台自带的Log库二、Log4j系列库的功能介绍与基本概念三、Log4Qt库的基本介绍四、将Log4qt组装成为一个单独模块五、使用配置文件的方式配置Log4Qt六、使用代码的方式配置Log4Qt七、在Qt工程中引入Log4Qt库模块的方法八、获取示例中的源代码一、为啥要使用第三方Log库,而不用平台自带的Log库首先要说明的是,在平时开发和调试中开发平台自带的“打印输出”已经足够了。但_log4qt

100种思维模型之全局观思维模型-67_计算机中对于全局观的-程序员宅基地

文章浏览阅读786次。全局观思维模型,一个教我们由点到线,由线到面,再由面到体,不断的放大格局去思考问题的思维模型。_计算机中对于全局观的

线程间控制之CountDownLatch和CyclicBarrier使用介绍_countdownluach于cyclicbarrier的用法-程序员宅基地

文章浏览阅读330次。一、CountDownLatch介绍CountDownLatch采用减法计算;是一个同步辅助工具类和CyclicBarrier类功能类似,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。二、CountDownLatch俩种应用场景: 场景一:所有线程在等待开始信号(startSignal.await()),主流程发出开始信号通知,既执行startSignal.countDown()方法后;所有线程才开始执行;每个线程执行完发出做完信号,既执行do..._countdownluach于cyclicbarrier的用法

自动化监控系统Prometheus&Grafana_-自动化监控系统prometheus&grafana实战-程序员宅基地

文章浏览阅读508次。Prometheus 算是一个全能型选手,原生支持容器监控,当然监控传统应用也不是吃干饭的,所以就是容器和非容器他都支持,所有的监控系统都具备这个流程,_-自动化监控系统prometheus&grafana实战

React 组件封装之 Search 搜索_react search-程序员宅基地

文章浏览阅读4.7k次。输入关键字,可以通过键盘的搜索按钮完成搜索功能。_react search