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

智能推荐

HTML5 Web SQL 数据库_方式准则的定义-程序员宅基地

文章浏览阅读1k次。1、HTML5 Web SQL 数据库 Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs。如果你是一个 Web 后端程序员,应该很容易理解 SQL 的操作。Web SQL 数据库可以在最新版的 Safari, Chrome 和 Opera 浏览器中工作。2、核心方法 以下是规范中定义的三个_方式准则的定义

spring Boot 中使用线程池异步执行多个定时任务_springboot启动后自动开启多个线程程序-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏6次。spring Boot 中使用线程池异步执行多个定时任务在启动类中添加注解@EnableScheduling配置自定义线程池在启动类中添加注解@EnableScheduling第一步添加注解,这样才会使定时任务启动配置自定义线程池@Configurationpublic class ScheduleConfiguration implements SchedulingConfigurer..._springboot启动后自动开启多个线程程序

Maven编译打包项目 mvn clean install报错ERROR_mvn clean install有errors-程序员宅基地

文章浏览阅读1.1k次。在项目的target文件夹下把之前"mvn clean package"生成的压缩包(我的是jar包)删掉重新执行"mvn clean package"再执行"mvn clean install"即可_mvn clean install有errors

navacate连接不上mysql_navicat连接mysql失败怎么办-程序员宅基地

文章浏览阅读974次。Navicat连接mysql数据库时,不断报1405错误,下面是针对这个的解决办法:MySQL服务器正在运行,停止它。如果是作为Windows服务运行的服务器,进入计算机管理--->服务和应用程序------>服务。如果服务器不是作为服务而运行的,可能需要使用任务管理器来强制停止它。创建1个文本文件(此处命名为mysql-init.txt),并将下述命令置于单一行中:SET PASSW..._nvarchar链接不上数据库

Python的requests参数及方法_python requests 参数-程序员宅基地

文章浏览阅读2.2k次。Python的requests模块是一个常用的HTTP库,用于发送HTTP请求和处理响应。_python requests 参数

近5年典型的的APT攻击事件_2010谷歌网络被极光黑客攻击-程序员宅基地

文章浏览阅读2.7w次,点赞7次,收藏50次。APT攻击APT攻击是近几年来出现的一种高级攻击,具有难检测、持续时间长和攻击目标明确等特征。本文中,整理了近年来比较典型的几个APT攻击,并其攻击过程做了分析(为了加深自己对APT攻击的理解和学习)Google极光攻击2010年的Google Aurora(极光)攻击是一个十分著名的APT攻击。Google的一名雇员点击即时消息中的一条恶意链接,引发了一系列事件导致这个搜_2010谷歌网络被极光黑客攻击

随便推点

微信小程序api视频课程-定时器-setTimeout的使用_微信小程序 settimeout 向上层传值-程序员宅基地

文章浏览阅读1.1k次。JS代码 /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { setTimeout( function(){ wx.showToast({ title: '黄菊华老师', }) },2000 ) },说明该代码只执行一次..._微信小程序 settimeout 向上层传值

uploadify2.1.4如何能使按钮显示中文-程序员宅基地

文章浏览阅读48次。uploadify2.1.4如何能使按钮显示中文博客分类:uploadify网上关于这段话的搜索恐怕是太多了。方法多也试过了不知怎么,反正不行。最终自己想办法给解决了。当然首先还是要有fla源码。直接去管网就可以下载。[url]http://www.uploadify.com/wp-content/uploads/uploadify-v2.1.4...

戴尔服务器安装VMware ESXI6.7.0教程(U盘安装)_vmware-vcsa-all-6.7.0-8169922.iso-程序员宅基地

文章浏览阅读9.6k次,点赞5次,收藏36次。戴尔服务器安装VMware ESXI6.7.0教程(U盘安装)一、前期准备1、下载镜像下载esxi6.7镜像:VMware-VMvisor-Installer-6.7.0-8169922.x86_64.iso这里推荐到戴尔官网下载,Baidu搜索“戴尔驱动下载”,选择进入官网,根据提示输入服务器型号搜索适用于该型号服务器的所有驱动下一步选择具体类型的驱动选择一项下载即可待下载完成后打开软碟通(UItraISO),在“文件”选项中打开刚才下载好的镜像文件然后选择启动_vmware-vcsa-all-6.7.0-8169922.iso

百度语音技术永久免费的语音自动转字幕介绍 -程序员宅基地

文章浏览阅读2k次。百度语音技术永久免费的语音自动转字幕介绍基于百度语音技术,识别率97%无时长限制,无文件大小限制永久免费,简单,易用,速度快支持中文,英文,粤语永久免费的语音转字幕网站: http://thinktothings.com视频介绍 https://www.bilibili.com/video/av42750807 ...

Dyninst学习笔记-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏9次。Instrumentation是一种直接修改程序二进制文件的方法。其可以用于程序的调试,优化,安全等等。对这个词一般的翻译是“插桩”,但这更多使用于软件测试领域。【找一些相关的例子】Dyninst可以动态或静态的修改程序的二进制代码。动态修改是在目标进程运行时插入代码(dynamic binary instrumentation)。静态修改则是直接向二进制文件插入代码(static b_dyninst

在服务器上部署asp网站,部署asp网站到云服务器-程序员宅基地

文章浏览阅读2.9k次。部署asp网站到云服务器 内容精选换一换通常情况下,需要结合客户的实际业务环境和具体需求进行业务改造评估,建议您进行服务咨询。这里仅描述一些通用的策略供您参考,主要分如下几方面进行考虑:业务迁移不管您的业务是否已经上线华为云,业务迁移的策略是一致的。建议您将时延敏感型,有快速批量就近部署需求的业务迁移至IEC;保留数据量大,且需要长期稳定运行的业务在中心云上。迁移方法请参见如何计算隔离独享计算资源..._nas asp网站