Linux学习

您所在的位置:网站首页 自动挂载mount Linux学习

Linux学习

2023-03-09 15:02| 来源: 网络整理| 查看: 265

10.10 mount命令详解:挂载linux系统外的文件 所有的硬件设备必须挂载之后才能使用(新硬盘先格式化后创建分区,再对分区进行挂载),只不过,有些硬件设备(比如硬盘分区)在每次系统启动时会自动挂载,而有些(比如 U 盘、光盘)则需要手动进行挂载。通过学习 Linux 文件系统,我们可以对挂载的含义进行引申,挂载指的是将硬件设备的文件系统和 Linux 系统中的文件系统,通过指定目录(作为挂载点)进行关联。而要将文件系统挂载到 Linux 系统上,就需要使用 mount 挂载命令。 手动挂载(mount):重启后会失效。用于检测已经格式化的设备,是否可以和预期一样的进行工作。永久挂载:就要将设备添加到/etc/fstab中去了 . /dev/ 该目录下存放的是 Linux 的外部设备,一般linux检测到的光盘和U盘的位置在此目录下,同样也是在这个目录中对设备进行分区,这些新建的分区目前和linux系统联系不大,如:/dev/sdb1分区是一个类似指针的数据结构,指向这个分区的原始数据块,还不属于/目录,这时虽然可以在一些图形桌面系统里找到他的位置,浏览管理里面的文件,但系统并不知道这个数据块哪部分数据代表文件,如何对它们操作,在命令行却不知怎么访问它的目录,比如无法使用cd或者ls。也无法在编程时指定一个目录对它操作。需要对其进行挂载才能访问这些外部存储设备,这时访问挂载点就是在访问该存储设备。在 Linux 中访问设备的方式和访问文件的方式是相同的。

Windows系统mount挂载,给磁盘分区提供一个盘符(C,D,E,…)。比如插入移动硬盘后系统自动分配给了它I:这个过程其实就是挂载,退出移动硬盘后的时候进行安全弹出,其实就是卸载unmount。

Linux系统和Windows不同,win可以有C,D…多个目录,Linux只有一个根目录/。在按装Linux系统时,自定义创建的所有分区都在/下的某个位置,比如/run等等。

linux操作系统将所有的设备都看作文件,它将整个计算机的资源都整合成一个大的文件目录。我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的目录上,然后通过访问这个目录来访问存储设备。挂载就是把设备放在一个目录下,让系统知道怎么管理这个设备里的文件,了解这个存储设备的可读写特性之类的过程。

如:插入CD,系统其实自动执行了 mount /dev/cdrom /media/cdrom。所以可以直接在/media/cdrom中对CD中的内容进行管理。

参考文献:什么是挂载

mount 命令的常用格式有以下几种: [root@CncLucZK ~]# mount [-l] #单纯使用 mount 命令,会显示出系统中已挂载的设备信息,使用 -l 选项,会额外显示出卷标名称

命令测试:

[root@CncLucZK test]# mount -l /dev/vda1 on / type ext4 (rw,relatime) ... [root@localhost ~]# mount -a

-a 选项的含义是自动检查 /etc/fstab 文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作。简单介绍一下 /etc/fstab 文件,此文件是自动挂载文件,系统开机时会主动读取 /etc/fstab 这个文件中的内容,根据该文件的配置,系统会自动挂载指定设备。

[root@CncLucZK ~]# mount [-t 系统类型] [-L 卷标名] [-o 特殊选项] [-n] 设备文件名 挂载点 各选项的含义分别是: -t 系统类型:指定欲挂载的文件系统类型。Linux 常见的支持类型有 EXT2、EXT3、EXT4、iso9660(光盘格式)、vfat、reiserfs 等。如果不指定具体类型,挂载时 Linux 会自动检测。 -L 卷标名:除了使用设备文件名(例如 /dev/hdc6)之外,还可以利用文件系统的卷标名称进行挂载。 -n:在默认情况下,系统会将实际挂载的情况实时写入 /etc/mtab 文件中,但在某些场景下(例如单人维护模式),为了避免出现问题,会刻意不写入,此时就需要使用这个选项; -o 特殊选项:可以指定挂载的额外选项,比如读写权限、同步/异步等,如果不指定,则使用默认值(defaults)。具体的特殊选项参见下表 ; 选项 功能 rw/ro 是否对挂载的文件系统拥有读写权限,rw 为默认值,表示拥有读写权限;ro 表示只读权限。 async/sync 此文件系统是否使用同步写入(sync)或异步(async)的内存机制,默认为异步 async。 dev/nodev 是否允许从该文件系统的 block 文件中提取数据,为了保证数据安装,默认是 nodev。 auto/noauto 是否允许此文件系统被以 mount -a 的方式进行自动挂载,默认是 auto。 suid/nosuid 设定文件系统是否拥有 SetUID 和 SetGID 权限,默认是拥有。 exec/noexec 设定在文件系统中是否允许执行可执行文件,默认是允许。 user/nouser 设定此文件系统是否允许让普通用户使用 mount 执行实现挂载,默认是不允许(nouser),仅有 root 可以。 defaults 定义默认值,相当于 rw、suid、dev、exec、auto、nouser、async 这 7 个选项。 remount 重新挂载已挂载的文件系统,一般用于指定修改特殊权限。 [root@CncLucZK test]# mount #查看系统中已经挂载的文件系统,注意有虚拟文件系统 #含义是,将 /dev/sda3 分区挂载到了 / 目录上,文件系统是 ext4,具有读写权限 /dev/sda3 on / type ext4 (rw) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) devtmpfs on /dev type devtmpfs (rw,nosuid,size=923060k,nr_inodes=230765,mode=755) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) /dev/sda1 on /boot type ext4 (rw) 修改特殊权限。通过上例我们查看到,/boot 分区已经被挂载了,而且采用的是 defaults 选项。这里我们重新挂载分区,并采用 noexec 权限禁止执行文件执行,看看会出现什么情况(注意不要用 / 分区做实验,否则系统命令也就不能执行了。 [root@CncLucZK ~]# mount -o remount noexec /boot #重新挂载 /boot 分区,并使用 noexec 权限 [root@CncLucZK sh]# cd /boot #写一个 shell 脚本,看是否会运行 [root@localhost boot]#vim demo1.sh #!/bin/bash n=10 str1=HelloWorld${n} str2="linux \"shell\"${n}" str3='string ${n}' echo $str1 echo $str2 echo $str3 [root@CncLucZK boot]# chmod 755 demo1.sh [root@CncLucZK boot]# . demo1.sh -bash:./demo1.sh:权限不够 #虽然赋予了demo1.sh执行权限,但是仍然无法执行 [root@CncLucZK ~]# mount -o remount exec /boot #记得改回来,否则会影响系统启动

对于特殊选项的修改,除非特殊场景下需要,否则不建议大家随意修改,非常容易造成系统出现问题,而且还找不到问题的根源。

手动挂载分区。/dev/sdb1 分区还没有被划分。我们在这里只看看挂载分区的方式,非常简单,甚至不需要使用 “-ext4” 命令指定文件系统,因为系统可以自动检测。 root@CncLucZK ~]# mkdir /mnt/disk1 #建立挂载点目录 [root@CncLucZK ~]# mount /dev/sdb1 /mnt/disk1 #挂载分区 [root@www ~]# df /mnt #显示mnt目录下的分区信息 Filesystem 1K-blocks Used Available Use% Mounted on .....中间省略..... /dev/sdb1 1976312 42072 1833836 3% /mnt/disk1 使用 Linux 系统的硬盘分区不能像 Windows 系统那样,硬盘安装上就可以自动检测并投入使用,硬盘分区(设备)挂载和卸载(使用 umount 命令)的概念源自 UNIX,UNIX 系统一般是作为服务器使用的,系统安全非常重要,特别是在网络上,最简单有效的方法就是“不使用的硬盘分区(设备)不挂载”,因为没有挂载的硬盘分区是无法访问的,这样系统也就更安全了。这样也可以减少挂载的硬盘分区数量,相应地,也就可以减少系统维护文件的规模,当然也就减少了系统的开销,即提高了系统的效率。 永久挂载:就要将设备添加到/etc/fstab中去 . [root@CncLucZK ~]# vi /etc/fstab

在这里插入图片描述

通过命令 : vim /etc/fstab 来查看永久挂载的配置文件 , /dev/mapper/centos-root / 表示的是我们之前在 df 命令下看到的逻辑卷的那个 , UUID=52b169f8-e31e-44e3-ac26-3bc74fe9e3e9 /boot 0 0 这个表示的是启动目录的挂载点 , mpper/centos-swap 这个表示的虚拟内存的挂载 , 默认情况下是挂载了三块硬盘 , 现在我们来把那块 sdb1 硬盘也挂碍上去 .

该文件由六个部分组成

1:要使用的设备—可以使用UUID,也可以使用设备文件.可以使用blkid命令查看设备的UUID号

在这里插入图片描述 2.可以看到上面的 sdb1的信息 , 使用命令 : vim /etc/fstab 来对永久挂载的配置文件进行编辑 . vim /etc/fstab ... /dev/sdb1 /mnt/disk1 ext4 default 0 0 1 2 3 4 5 6

第二部分:写挂载点,已经存在直接写,不存在使用mkdir来创建

第三部分:文件系统类型

第四部分:挂载时,应用于设备的自定义选项,defaults是必须的

第五和第六部分:转存标志和fsck顺序

转存标志:用于生成设备内容的备份,

0:表示不需要备份

1:表示需要备份

fsck:当有多个文件系统需要检查时,检查的顺序。

0表示不需要检查,开机直接挂载

1表示检查后第一个挂载

2表示检查后第二个挂载

使用mount -a命令 检查书写格式是否有误 , 如果 mount -a 没有什么报错 , 则是表示配置文件书写正确 , 如果报错则书写错误 , 记得写完配置文件后wq(保存退出后一定要使用 mount -a 来检查) , 不然配置文件写错了后 , 再来开机是开不了机的 .

然后我们来重启一下这个操作系统 , 使用命令 : reboot

然后再来使用命令 df 命令查看 sdb1 是否挂载上去了 。

参考文献:Linux使用fdisk进行分区

10.11 umount命令:卸载文件系统 将光盘和 U 盘挂载在系统中,而在使用完成后,需要先将其与挂载点取消关联,然后才能成功卸载。不过,硬盘分区是否需要卸载,取决于你下次是否还需要使用,一般不对硬盘分区执行卸载操作。 umount 命令用于卸载已经挂载的硬件设备,该命令的基本格式如下: [root@CncLucZK ~]# umount [-fn] 设备文件名或挂载点 选项与参数: -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下; -n :不升级 /etc/mtab 情况下卸除。

注意,卸载命令后面既可以加设备文件名,也可以加挂载点,不过只能二选一,比如:

[root@CncLucZK ~]# umount /mnt/usb #卸载U盘挂载点 [root@CncLucZK ~]# umount /mnt/cdrom #卸载光盘挂载点 [root@CncLucZK ~]# umount /dev/sr0 #命令加设备文件名,同样是可以卸载的 [root@CncLucZK ~]# mount /dev/sr0 /mnt/cdrom/ 如果加了两个(如下所示),从理论上分析,会对光驱卸载两次,当然,卸载第二次的时候就会报错。 另外,我们在卸载时有可能会出现以下情况: [root@CncLucZK ~]# cd /mnt/cdrom/ #进入光盘挂载点 [root@CncLucZK cdrom]# umount /mnt/cdrom/ umount: /mnt/cdrom: device is busy. #报错,设备正忙

这种报错是因为我们已经进入了挂载点,因此,如果要卸载某硬件设备,在执行 umount 命令之前,用户须退出挂载目录。

卸载硬件设备成功与否,除了执行 umount 命令不报错之外,还可以使用 df 命令或 mount -l 来查看目标设备是否还挂载在系统中。

参考文献: Linux umount命令:卸载文件系统 Linux 磁盘管理

下一篇:Linux学习-44-虚拟内存、物理内存和swap分区的作用


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3