在linux系统中,硬盘挂载是指将一个存储设备(如物理硬盘、分区、U盘或网络存储)关联到文件系统目录树中某个指定目录的过程。这个被关联的目录就叫做挂载点。挂载之后,用户对该目录的读写操作实际上就是对对应存储设备的读写操作。linux不像windows那样为每个盘符分配独立的C盘D盘,而是把所有设备都统一纳入以斜杠开头的单一目录结构中。
要理解挂载,首先要明白linux的文件系统是一个倒置的树状结构,最顶层是根目录斜杠。所有的硬件设备在被系统识别后,会以设备文件的形式出现在斜杠dev目录下,例如斜杠dev斜杠sdb1可能代表第二块硬盘的第一个分区。但此时它还只是个设备节点,不能直接用cd进入或用文件管理器打开。只有使用mount命令把它绑到某个目录上,它才真正融入系统的文件世界。
一、挂载的基本原理
从内核角度看,挂载是建立了一个映射关系:将块设备上的文件系统超级块、索引节点等信息注册到内核的虚拟文件系统(VFS)层,并把该设备绑定到目录项(dentry)上。此后,进程通过路径解析走到这个目录时,VFS会把请求重定向到对应设备的文件系统驱动去处理。因此,挂载点本身所在的原目录里如果已有文件,在挂载后会被暂时隐藏,直到卸载才重新可见。
这种设计带来了极大的灵活性。你可以把系统根分区放在固态盘上,把斜杠home挂到机械盘,把斜杠var斜杠log挂到网络存储,彼此互不干扰又同属一棵树。也正因为如此,linux下没有盘符概念,所有路径都是从根开始的绝对路径。新手常误以为挂载是复制数据,其实它只是建立访问通道,不移动任何字节。
1.1 设备与文件系统的关系
一块硬盘要先分区,再在每个分区上创建文件系统(如ext4、xfs),然后才能挂载。设备文件本身不包含文件概念,文件系统才规定如何组织数据。mount命令的作用就是告诉内核:用某种文件系统类型去解释这个设备,并接到指定目录。若文件系统类型不对或设备有损坏,挂载会报错,而不会破坏设备内容。
# 查看当前已识别的块设备 lsblk # 假设新硬盘分区为 /dev/sdb1,格式化为 ext4 mkfs.ext4 /dev/sdb1 # 创建挂载点目录 mkdir -p /mnt/data # 执行挂载 mount -t ext4 /dev/sdb1 /mnt/data # 查看挂载结果 df -h /mnt/data
二、临时挂载与永久挂载
上面例子里的mount是临时挂载,重启后失效。这对插拔U盘够用,但服务器数据盘需要开机自动挂载。linux通过斜杠etc斜杠fstab文件实现永久挂载。该文件每行描述一个文件系统,包含设备标识、挂载点、类型、选项和备份检查位。系统启动时按此表依次挂载。
写fstab要格外小心,写错可能导致系统无法启动。建议先用blkid命令拿到分区的UUID,用UUID替代斜杠dev斜杠sdb1这种可能变动的设备名,稳定性更高。挂载选项里defaults包含读写、自动等常用设定,对多数场景够用;若需只读可加ro,需禁止执行可加noexec。
2.1 fstab配置示例
下面是一段典型的fstab条目,把UUID对应的ext4分区挂到斜杠mnt斜杠data,采用默认选项,不备份、不磁盘检查。修改后可用mount -a测试全部挂载是否报错,无误再重启。
# 获取分区 UUID blkid /dev/sdb1 # 在 /etc/fstab 中添加如下行(UUID换成实际值) UUID=1234abcd-56ef-7890-ghij-klmnopqrstuv /mnt/data ext4 defaults 0 0 # 测试fstab中未挂载的项 mount -a
2.2 卸载与注意事项
卸载使用umount命令,参数是挂载点目录或设备名。若提示设备忙,说明有进程正在访问该目录,可用lsof或fuser查杀。强行拔盘前务必先卸载,否则可能丢失缓存数据或损文件系统。卸载后原挂载点目录里之前被遮住的内容会恢复显示,目录本身不会被删除。
三、常见误区与排查思路
很多初学者把斜杠dev下的设备文件当成了可直接存文件的目录,往里写数据当然失败。也有人在根分区快满时,把新盘挂到了一个有数据的目录,导致原数据看不见,误以为丢失,其实卸载就回来了。还有人混淆挂载和软链接:软链接是指向另一路径的快捷方式,挂载是内核级的设备接入,二者层级不同。
当发现磁盘空间异常,先用df -h看各挂载点使用率,再用du排查大目录。若某挂载点显示已满但里面文件不多,很可能挂载没成功,写入实际落到了根分区。此时应检查fstab和mount输出,确认设备确实挂在预期位置。掌握这些,就能清晰回答linux硬盘挂载是什么意思,并在运维中少走弯路。
小结:挂载就是给存储设备安排一个目录入口,让它能融入linux统一的文件树。理解挂载点、fstab与设备关系,是管理linux存储的基础能力。