前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux挂载

Linux挂载

原创
作者头像
用户7605975
修改2020-07-29 14:18:41
13.2K0
修改2020-07-29 14:18:41
举报
文章被收录于专栏:技术积累技术积累

挂载

指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。

Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 inux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。

因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。

如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。

并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。


一、挂载方法:mount DECE MOUNT_POINT

    mount:通过查看/etc/mtab(文章最后会对/etc/mtab有个解释)文件显示当前系统已挂载的所有设备

命令使用格式:mount [-fnrsvw] [-t vfstype] [-o options] device dir

device:指明要挂载的设备;

(1) 设备文件:例如/dev/sda5

(2) 卷标:-L 'LABEL', 例如 -L 'MYDATA'

(3) UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'

(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs

dir:挂载点

    事先存在;建议使用空目录;

    进程正在使用中的设备无法被卸载

常用命令选项

    -t vsftype:指定要挂载的设备上的文件系统类型;

    -r: readonly,只读挂载;

    -w: read and write, 读写挂载;

    -n: 不更新/etc/mtab; 

    -a:自动挂载所有支持自动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能)

    -L 'LABEL': 以卷标指定挂载设备;

    -U 'UUID': 以UUID指定要挂载的设备;

    -B, --bind: 绑定目录到另一个目录上;

注意:查看内核追踪到的已挂载的所有设备:cat /proc/mounts

………………………………………………………………………………………………………………………

    -o options:(挂载文件系统的选项)

      async:异步模式;

      sync:同步模式;

      atime/noatime:包含目录和文件;

      diratime/nodiratime:目录的访问时间戳

      auto/noauto:是否支持自动挂载

      exec/noexec:是否支持将文件系统上应用程序运行为进程

      dev/nodev:是否支持在此文件系统上使用设备文件;

      suid/nosuid:是否支持在此文件系统上使用特殊权限

      remount:重新挂载

      ro:只读

      rw:读写

      user/nouser:是否允许普通用户挂载此设备

      acl:启用此文件系统上的acl功能

注意:上述选项可多个同时使用,彼此使用逗号分隔;

 默认挂载选项:defaults:rw, suid, dev, exec, auto, nouser, and async

………………………………………………………………………………………………………………………

命令演示

1、指定文件系统将块设备挂载至指定空文件夹内:演示内容:1)没有指定文件系统,命令是否能正确执行;2)指定错误文件系统,命令是否能正确执行;3)挂载点有内容的文件夹,查看被挂载后其内容是否消失。

[root@localhost /]# fdisk -l

...

设备 Boot      Start         End      Blocks   Id  System

/dev/sdb1 2048     2099199     1048576   83  Linux

/dev/sdb2 2099200     4196351     1048576    5  Extended

/dev/sdb5 2101248     2306047      102400   83  Linux

/dev/sdb6 2308096     2512895      102400   83  Linux

/dev/sdb7 2514944     2719743      102400   83  Linux

/dev/sdb8 2721792     2926591      102400   83  Linux

...

[root@localhost /]# mount /dev/sdb8 /device

[root@localhost /]# df

文件系统                   1K-块    已用     可用 已用% 挂载点

/dev/mapper/CentOS-root 18307072 4724136 13582936   26% /

devtmpfs                  485368       0   485368    0% /dev

tmpfs                     500664      84   500580    1% /dev/shm

tmpfs                     500664    7160   493504    2% /run

tmpfs                     500664       0   500664    0% /sys/fs/cgroup

/dev/sda1 508588  142620   365968   29% /boot

tmpfs                     100136      20   100116    1% /run/user/42

tmpfs                     100136       0   100136    0% /run/user/0

/dev/sdb8 98988    5280    93708    6% /device

[root@localhost /]# blkid /dev/sdb8

/dev/sdb8: UUID="a3c4bf06-3695-45e8-8a07-a063498f0578" TYPE="xfs"

[root@localhost /]# umount /device

[root@localhost /]# mount -t ext2 /dev/sdb8 /device

mount: 文件系统类型错误、选项错误、/dev/sdb8 上有坏超级块、

缺少代码页或助手程序,或其他错误

[root@localhost /]# cd /device/

[root@localhost device]# ll

总用量 0

[root@localhost device]# touch 11 22

[root@localhost device]# ll

总用量 0

-rw-r--r--. 1 root root 0 8月  23 10:14 11

-rw-r--r--. 1 root root 0 8月  23 10:14 22

[root@localhost device]# ll

总用量 0

[root@localhost device]# ll -a

总用量 4

drwxr-xr-x.  2 root root    6 8月  23 09:27 .

dr-xr-xr-x. 21 root root 4096 8月  23 09:29 ..

[root@localhost device]# cd ..

[root@localhost /]# umount /device/

[root@localhost /]# cd /device/

[root@localhost device]# ll

总用量 0

-rw-r--r--. 1 root root 0 8月  23 10:14 11

-rw-r--r--. 1 root root 0 8月  23 10:14 22

通过上述演示,说明了如下事实:1)没有指定文件系统,块设备也可以正常挂载;2)指定与块设备不一致的文件系统类型则命令报错;3)挂载点有内容的文件夹,在挂载后内容消失,卸载后内容重现,也就是说挂载后会将原文件内容掩盖,但并不对其进行其他操作。

2、演示内容:1)指定卷标并以只读方式挂载;2)对目录进行挂载操作,查看其与硬链接与软链接有何不同。

[root@localhost device]# blkid /dev/sdb6

/dev/sdb6: LABEL="sdb6" UUID="8284450c-8cb9-45d7-a8b8-ed9ed9ef9e52" TYPE="xfs"  [root@localhost device]# mount -L 'sdb6' -r /device/  [root@localhost device]# touch /device/33  touch: 无法创建"/device/33": 只读文件系统  [root@localhost device]# umount /device/  [root@localhost /]# mount -B /etc/ /device/  [root@localhost /]# ll -i /  总用量 64      11341 lrwxrwxrwx.  1 root root    7 7月  19 23:54 bin -> usr/bin       128 dr-xr-xr-x.  4 root root 4096 8月  2 10:09 boot          3 drwxr-xr-x.  19 root root 3300 8月  23 09:10 dev   33554561 drwxr-xr-x. 129 root root 8192 8月  23 09:38 device   33554561 drwxr-xr-x. 129 root root 8192 8月  23 09:38 etc        158 drwxr-xr-x.  42 root root 4096 8月  22 09:00 home

通过上述演示,说明了如下事实:1)指定卷标挂载可行,以只读方式挂载后,无法对挂载点中的内容进行修改、创建等操作;2)目录的挂载实质上是硬链接,挂载后可以对里面的文件内容进行修改与删除。

注:文件夹的挂载在df中并不显示

3、我们想通过命令行访问某个 U 盘中的数据,图 1 所示为 U 盘文件目录结构和 Linux 系统中的文件目录结构。

可以看到,目前 U 盘和 Linux 系统文件分属两个文件系统,还无法使用命令行找到 U 盘文件,需要将两个文件系统进行挂载。

2、实现命令

3、可以看到,U 盘文件系统已经成为 Linux 文件系统目录的一部分,此时访问 /sdb-u/ 就等同于访问 U 盘

根目录下的 /dev/ 目录文件负责所有的硬件设备文件,事实上,当 U 盘插入 Linux 后,系统也确实会给 U 盘分配一个目录文件(比如 sdb1),就位于 /dev/ 目录下(/dev/sdb1),但无法通过 /dev/sdb1/ 直接访问 U 盘数据,访问此目录只会提供给你此设备的一些基本信息(比如容量)。 总之,Linux 系统使用任何硬件设备,都必须将设备文件与已有目录文件进行挂载。


二、卸载命令umount

命令使用格式:

# umount DEVICE

     # umount MOUNT_POINT

上面已经演示过umount的使用

fuser:查看正在访问指定文件系统的进程:

命令使用格式:

# fuser -v MOUNT_POINT

终止所有在正访问指定的文件系统的进程:慎用

# fuser -km MOUNT_POINT


三、开机自动挂载

如果我们想实现开机自动挂载某设备,只要修改/etc/fstab文件即可。

文件挂载的配置文件/etc/fstab

查看此文件可知

每行定义一个要挂载的文件系统;

其每行的格式如下

要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序

UUID=6efb8a23-bae1-427c-ab10-3caca95250b1 /boot xfs defaults 0 0

要挂载的设备或伪文件系统:设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc, sysfs)

挂载点:指定的文件夹

   挂载选项:defaults

转储频率

      0:不做备份

      1:每天转储

      2:每隔一天转储

自检次序

      0:不自检

      1:首先自检;一般只有rootfs才用1;


四、交换分区swap

这里介绍下交换分区,通过实验演示交换分区的创建及挂载

挂载交换分区:

启用:swapon

   swapon [OPTION]... [DEVICE]

    -a:激活所有的交换分区;

    -p PRIORITY:指定优先级;

禁用:swapoff [OPTION]... [DEVICE]

实验演示

1、交换分区的创建:1)新创建一分区,2)修改新分区的类型,改为swap号码为82,3)格式化为swap

[root@localhost ~]# fdisk /dev/sdb 

欢迎使用 fdisk (util-linux 2.23.2)。  更改将停留在内存中,直到您决定将更改写入磁盘。

  使用写入命令前请三思。 

命令(输入 m 获取帮助):n 

Partition type:   

p  primary (1 primary, 1 extended, 2 free)   

l  logical (numbered from 5) 

Select (default p): l 

添加逻辑分区 9 

起始 扇区 (2928640-4196351,默认为 2928640): 

将使用默认值 2928640 

Last 扇区, +扇区 or +size{K,M,G} (2928640-4196351,默认为 4196351):+100M 

分区 9 已设置为 Linux 类型,大小设为 100 MiB 

命令(输入 m 获取帮助):p 

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区 

Units = 扇区 of 1 * 512 = 512 bytes 

扇区大小(逻辑/物理):512 字节 / 512 字节 

I/O 大小(最小/最佳):512 字节 / 512 字节 

磁盘标签类型:dos 

磁盘标识符:0xd391e822   

设备 Boot      Start        End      Blocks  Id  System 

/dev/sdb1            2048    2099199    1048576  83  Linux 

/dev/sdb2        2099200    4196351    1048576    5  Extended 

/dev/sdb5        2101248    2306047      102400  83  Linux 

/dev/sdb6        2308096    2512895      102400  83  Linux 

/dev/sdb7        2514944    2719743      102400  83  Linux 

/dev/sdb8        2721792    2926591      102400  83  Linux 

/dev/sdb9        2928640    3133439      102400  83  Linux 

命令(输入 m 获取帮助):t 

分区号 (1,2,5-9,默认 9):9 

Hex 代码(输入 L 列出所有代码):82 

已将分区“Linux”的类型更改为“Linux swap / Solaris” 

命令(输入 m 获取帮助):p 

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区 

Units = 扇区 of 1 * 512 = 512 bytes 

扇区大小(逻辑/物理):512 字节 / 512 字节 

I/O 大小(最小/最佳):512 字节 / 512 字节 

磁盘标签类型:dos 

磁盘标识符:0xd391e822   

设备 Boot      Start        End      Blocks  Id  System 

/dev/sdb1            2048    2099199    1048576  83  Linux 

/dev/sdb2        2099200    4196351    1048576    5  Extended 

/dev/sdb5        2101248    2306047      102400  83  Linux 

/dev/sdb6        2308096    2512895      102400  83  Linux 

/dev/sdb7        2514944    2719743      102400  83  Linux 

/dev/sdb8        2721792    2926591      102400  83  Linux 

/dev/sdb9        2928640    3133439      102400  82  Linux swap / Solaris 

命令(输入 m 获取帮助):w 

The partition table has been altered! 

Calling ioctl() to re-read partition table. 

正在同步磁盘。 

[root@localhost ~]# mkswap /dev/sdb9 

正在设置交换空间版本 1,大小 = 102396 KiB 

无标签,UUID=74bf2766-a01b-48ea-9082-2fad6b8e06a9

2、挂载交换分区:启用与禁用

[root@localhost ~]# free               

total        used        free      shared  buff/cache  available 

Mem:        1001332      101756      535892      13424      363684      720328 

Swap:      2097148          0    2097148 

[root@localhost ~]# swapon /dev/sdb9  

[root@localhost ~]# free               

total        used        free      shared  buff/cache  available 

Mem:        1001332      101716      535924      13424      363692      720368 

Swap:      2199544          0    2199544 

[root@localhost ~]# swapoff /dev/sdb9  

[root@localhost ~]# free               

total        used        free      shared  buff/cache  available 

Mem:        1001332      102492      535152      13424      363688      719592 

Swap:      2097148          0    2097148

实验涉及到的命令小结: 

  内存空间使用状态:free [OPTION]

    -m: 以MB为单位

    -g: 以GB为单位

  文件系统空间占用等信息的查看工具:df

-h: human-readable

-i:inodes instead of blocks

-P: 以Posix兼容的格式输出; 

  查看某目录总体空间占用状态:du

du [OPTION]... DIR

-h: human-readable

-s: summary


/etc/fstab和/etc/mtab的区别

/etc/fstab文件的作用

记录了计算机上硬盘分区的相关信息,启动 Linux 的时候,检查分区的 fsck 命令,和挂载分区的 mount 命令,都需要 fstab 中的信息,来正确的检查和挂载硬盘。 

/etc/mtab文件的作用: 

   先看它的英文是: 

     This changes continuously as the file /proc/mount changes. In other words, when filesystems are mounted and unmounted, the change is immediately reflected in this file. 

     记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等;而/etc/fstab是系统准备装载的。 每当 mount 挂载分区、umount 卸载分区,都会动态更新 mtab,mtab 总是保持着当前系统中已挂载的分区信息,fdisk、df 这类程序,必须要读取 mtab 文件,才能获得当前系统中的分区挂载情况。当然我们自己还可以通过读取/proc/mount也可以来获取当前挂载信息 


挂接光盘镜像文件

1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。

代码语言:javascript
复制
#cp /dev/cdrom /home/sunky/mydisk.iso 或 
#dd if=/dev/cdrom of=/home/sunky/mydisk.iso

注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso

2、将文件和目录制作成光盘镜像文件,执行下面的命令。

代码语言:javascript
复制
#mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir

注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk

3、光盘镜像文件的挂接(mount)

代码语言:javascript
复制
#mkdir /mnt/vcdrom

注:建立一个目录用来作挂接点(mount point)

代码语言:javascript
复制
#mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom

注:使用/mnt/vcdrom就可以访问光盘镜像文件mydisk.iso里的所有文件了。

挂接移动硬盘

对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l或more /proc/partitions查看系统的硬盘和硬盘分区情况。

代码语言:javascript
复制
[root at pldyrouter /]# fdisk -l

接好移动硬盘后,再用fdisk –l或more。 /proc/partitions查看系统的硬盘和硬盘分区情况,应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev /sdc1、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区,我们可以使用下面的命令挂接/dev/sdc1和 /dev/sdc5。

代码语言:javascript
复制
#mkdir -p /mnt/usbhd1 
#mkdir -p /mnt/usbhd2

注:建立目录用来作挂接点(mount point)

代码语言:javascript
复制
#mount -t ntfs /dev/sdc1 /mnt/usbhd1 
#mount -t vfat /dev/sdc5 /mnt/usbhd2

注:对ntfs格式的磁盘分区应使用-t ntfs参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。

代码语言:javascript
复制
#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下使用就更方便了。使用下面的命令直接挂接即可。

代码语言:javascript
复制
#mount /dev/sdc1 /mnt/usbhd1

挂接U盘

和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的。使用方法和移动硬盘完全一样。插入U盘之前,应先用fdisk –l 或more /proc/partitions查看系统的硬盘和硬盘分区情况。

代码语言:javascript
复制
[root at pldyrouter root]# fdisk -l

插入U盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。

代码语言:javascript
复制
[root at pldyrouter root]# fdisk -l

系统多了一个SCSI硬盘/dev/sdd和一个磁盘分区/dev/sdd1,/dev/sdd1就是我们要挂接的U盘。

代码语言:javascript
复制
#mkdir -p /mnt/usb

注:建立一个目录用来作挂接点(mount point)

代码语言:javascript
复制
#mount -t vfat /dev/sdd1 /mnt/usb

注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。

代码语言:javascript
复制
#mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb

挂接Windows文件共享

Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba 软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。当然也可以到www.samba.org网站下载新的版本是3.0.10版。 当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下:

代码语言:javascript
复制
# mkdir –p /mnt/samba

注:建立一个目录用来作挂接点(mount point)

代码语言:javascript
复制
# 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 server3、redflag server 4.1、suse server 9以及windows NT 4.0、windows 2000、windowsxp、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, 增加共享目录

代码语言:javascript
复制
share -F nfs -o rw /export/home/sunky

(2)启动nfs服务

代码语言:javascript
复制
# /etc/init.d/nfs.server start

(3)NFS服务启动以后,也可以使用下面的命令增加新的共享

代码语言:javascript
复制
# share /export/home/sunky1 
# share /export/home/sunky2

注:/export/home/sunky和/export/home/sunky1是准备共享的目录

2、linux系统NFS服务端配置方法如下:

(1)修改 /etc/exports,增加共享目录

代码语言:javascript
复制
/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定义。格式如下:

代码语言:javascript
复制
10.140.133.23 linux-client

(2)启动与停止NFS服务

代码语言:javascript
复制
/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共享

代码语言:javascript
复制
# mkdir –p /mnt/nfs

注:建立一个目录用来作挂接点(mount point)

代码语言:javascript
复制
#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环境下测试通过。

补充:

linux加载光驱: (1)使用光驱前,要先mount一下:

代码语言:javascript
复制
#mount /dev/cdrom /mnt/cdrom

然后您就可以进入/mnt/cdrom目录下读取光盘内容了。 (2)当您想退出光盘时,须使用umout命令,否则光驱就会一直处于死锁状态:

代码语言:javascript
复制
#umount /mnt/cdrom

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 挂载
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档