精通Linux分区挂载的精髓:从理论到实战一网打尽

前言

想要深入了解Linux系统中磁盘分区挂载的原理和操作步骤吗?这篇文章将为你揭开分区挂载的神秘面纱,从理论到实践,详细讲解分区挂载的一切。无论你是初学者还是有一定经验的用户,都能从中获取新知识,提升技能水平。赶快来掌握这项关键技能,让你的Linux系统管理更得心应手!

分区挂载前必知

  • 磁盘分区是将物理硬盘划分成若干个逻辑部分的过程,每个部分称为一个分区,它们在操作系统中被视为独立的存储单元。分区可以帮助用户更好地组织文件和数据,并允许不同类型的文件系统在同一硬盘上共存。
  • 挂载是指将一个分区关联到文件系统上的特定目录(称为挂载点)的过程。一旦挂载完成,该分区中的文件和数据就可以通过对应的挂载点在文件系统中访问和操作。

在Linux系统中,磁盘分区和挂载是非常重要的操作。通常,用户需要对硬盘进行分区,然后将这些分区挂载到文件系统中的合适位置,以便存储和访问数据。

分区挂载的操作步骤

准备工作

在上一篇文章《精通Linux磁盘分区的精髓:从理论到实战一网打尽 - 掘金 (juejin.cn)》,准备了一块大小是5G的虚拟磁盘,接着在这个虚拟磁盘上创建一个1G的扩展分区,然后在这个扩展分区中,再创建2个512M的逻辑分区。在本篇文章中,将会把这两个逻辑分区分别挂载到opt目录下的fanfu-1、fanfu-2目录上。

创建挂载点目录

创建两个挂载点目录:fanfu-1、fanfu-2;

bash 复制代码
mkdir /opt/fanfu-1 /opt/fanfu-2

查询挂载点目录:确认fanfu-1、fanfu-2被成功创建;

bash 复制代码
ls -l /opt

查询分区

执行fdisk -l命令

复制代码
fdisk -l

从输出信息来看,可以查询到扩展分区/dev/sdb1,逻辑分区/dev/sdb5、/dev/sdb6

检测分区的文件系统

虽然可以看到磁盘/dev/sdb的分区信息,但是看不到两个逻辑分区的文件系统类型,如果想把逻辑分区正确挂载到目录上使用,是需要先在分区内创建文件系统的;

执行lsblk -amf命令,可以列出磁盘的分区名称、大小、挂载点、文件系统类型等信息

复制代码
lsblk -amf

对输出信息进行解读:

  • 第一行为各列的标题,包括NAME(设备名称)、SIZE(设备大小)、OWNER(所有者)、GROUP(组)、MODE(权限)、FSTYPE(文件系统类型)、LABEL(标签)、UUID(唯一识别码)和MOUNTPOINT(挂载点)。
  • sda是一个20GB的磁盘,包含两个分区sda1和sda2。
  • sda1是一个1GB的XFS格式分区,已经挂载在/boot目录下,具有UUID为713d9d7a-42d6-4be9-a05f-16cd8f8d6792。
  • sda2是一个19GB的LVM2_member分区,包含了逻辑卷centos-root(17GB,XFS格式,挂载在根目录/下,UUID为33c0cc9e-c486-4dc5-ac93-eb79c200167f)和centos-swap(2GB,交换分区,UUID为f01a10ac-f163-41e3-a0a0-c7b28715c388)。
  • sdb是一个5GB的磁盘,包含了分区sdb1、sdb5和sdb6,但未显示详细信息。
  • sr0是一个4.4GB的光驱设备,包含了一个ISO9660格式的光盘,标签为CentOS 7 x86_64 2022-07-26-15-09-17-00,这个光盘里是CentOS 7的ISO镜像;

从输出信息的解读中可以看出:逻辑分区sdb5和sdb6还未创建文件系统;

创建分区的文件系统

使用mkfs命令格式化分区并创建文件系统,执行下面命令可以在/dev/sdb5和/dev/sdb6分区中创建ext4文件系统:

bash 复制代码
mkfs.ext4 /dev/sdb5 
mkfs.ext4 /dev/sdb6

执行lsblk -amf命令,再确认一下/dev/sdb5和/dev/sdb6分区的文件系统是否正确被创建;

复制代码
lsblk -amf

从输出信息来看,/dev/sdb5和/dev/sdb6分区中已经创建了ext4文件系统;

分区挂载

使用mount命令,把/dev/sdb5和/dev/sdb6分区挂载到fanfu-1、fanfu-2目录上:

bash 复制代码
mount /dev/sdb5 /opt/fanfu-1 
mount /dev/sdb6 /opt/fanfu-2

执行lsblk -amf命令,再确认一下/dev/sdb5和/dev/sdb6分区是否挂载到fanfu-1、fanfu-2目录上;

从输出信息来看,/dev/sdb5和/dev/sdb6分区是否挂载到fanfu-1、fanfu-2目录上,后续所有在fanfu-1、fanfu-2上管理的数据都会分别落到磁盘/dev/sdb的/dev/sdb5和/dev/sdb6分区上;

但有一个问题:重启系统后,/dev/sdb5和/dev/sdb6分区上的挂载点fanfu-1、fanfu-2神奇般消失了!

自动挂载

莫要慌张,这很正常!/dev/sdb5和/dev/sdb6分区上的挂载点fanfu-1、fanfu-2神奇般消失了,是因为没有设置磁盘分区的自动挂载,自动挂载是指在Linux系统启动时,自动将指定的分区挂载到指定的挂载点上,使得用户无需手动进行挂载操作就可以访问该分区中的数据。这样,在重启系统后,挂载点不会丢失,用户可以继续访问分区中的数据。

为了实现自动挂载,Linux系统使用了/etc/fstab文件来保存自动挂载信息。/etc/fstab文件包含了系统启动时需要挂载的所有分区、挂载点和挂载选项等信息。在/etc/fstab文件中,每个挂载条目由几个字段构成,包括设备名(或UUID)、挂载点、文件系统类型、挂载选项、备份频率和是否进行检查等信息。

当Linux系统启动时,它会根据/etc/fstab文件中的挂载信息,自动挂载所有需要挂载的分区。如果某个分区的挂载选项中设置了noauto,则该分区不会被自动挂载,需要手动挂载。另外,如果/etc/fstab文件中的某个挂载点所对应的分区不存在或者无法访问,那么系统启动时会报错并停止挂载该分区。那么如何设置自动挂载呢?

重新执行挂载命令,把/dev/sdb5和/dev/sdb6分区挂载到fanfu-1、fanfu-2目录上:

bash 复制代码
mount /dev/sdb5 /opt/fanfu-1 
mount /dev/sdb6 /opt/fanfu-2

使用vi命令,编辑/etc/fstab文件

bash 复制代码
vi /etc/fstab

在/etc/fstab文件尾部增加下面内容

bash 复制代码
/dev/sdb5 /opt/fanfu-1 ext4 defaults 0 0 
/dev/sdb6 /opt/fanfu-2 ext4 defaults 0 0

这两行内容指定了将/dev/sdb5和/dev/sdb6这两个分区以ext4文件系统格式挂载到/opt/fanfu-1和/opt/fanfu-2目录下,并且使用默认的挂载选项进行挂载,不进行备份和检查。以第一行为例说明一下:

  • /dev/sdb5:表示要挂载的设备名为/dev/sdb5,即第二块硬盘的第五个分区。
  • /opt/fanfu-1:表示挂载点为/opt/fanfu-1,即将/dev/sdb5挂载到/opt/fanfu-1目录下。
  • ext4:表示文件系统类型为ext4,即该分区采用ext4文件系统格式。
  • defaults:表示挂载选项为默认选项,包括读写权限、日志功能等。
  • 0:表示备份频率为0,即不进行备份。
  • 0:表示是否进行检查为0,即不进行检查。

执行reboot命令,重启系统

复制代码
reboot

系统重启完成后,执行lsblk -amf命令,再确认一下/dev/sdb5和/dev/sdb6分区是否自动挂载到fanfu-1、fanfu-2目录上;

从输出信息来看,这一次/dev/sdb5和/dev/sdb6分区是真的挂载到fanfu-1、fanfu-2目录上;

再执行df -h命令,也可以看到/dev/sdb5和/dev/sdb6分区是真的挂载到fanfu-1、fanfu-2目录上

bash 复制代码
df -h

卸载挂载点

分区可以挂载到某个目录上,当然也是可以卸载下来的,尽管用到的机会可能不多。但是在卸载文件系统之前,需要确保没有任何进程正在使用该文件系统,否则可能会导致数据丢失或损坏。

执行umount指令即可卸载分区,如下卸载/dev/sdb6

bash 复制代码
umount /dev/sdb6

如果设置了自动挂载信息,别忘了同时删除/etc/fstab文件中的自动挂载配置信息;

执行df -h命令,可以看到/dev/sdb6分区已经消失了;

bash 复制代码
df -h

注意事项

在进行文件挂载或卸载操作时,需要有足够的权限。通常需要使用 sudo 命令或以 root 用户身份执行。

写在最后

在这篇关于Linux磁盘分区挂载的详细解读中,你不仅可以获得丰富的理论知识,还能掌握实用的操作步骤,为你的Linux系统管理技能加分!如果你觉得这篇文章对你有所帮助,不妨点个赞,让更多人看到这份珍贵的分享。同时,别忘了将这篇文章收藏起来,方便日后随时翻阅。感谢你的支持,让我们一起分享技术的乐趣,共同成长!

相关推荐
Pitayafruit3 分钟前
【📕分布式锁通关指南 09】源码剖析redisson之公平锁的实现
redis·分布式·后端
Pitayafruit5 分钟前
【📕分布式锁通关指南 10】源码剖析redisson之MultiLock的实现
redis·分布式·后端
爱的叹息6 分钟前
Spring Boot 集成 MongoDB 时自动创建的核心 Bean 的详细说明及表格总结
spring boot·后端·mongodb
开发小能手-roy16 分钟前
linux Ubuntu 用户权限设置
linux·运维·ubuntu
开心猴爷30 分钟前
《Flutter从入门到实战:手把手构建跨平台应用(万字深度解析)》
后端
开心就好202530 分钟前
Flutter组件/插件开发及发布流程
后端
bcbnb33 分钟前
Flutter plugin插件制作详细过程以及发布到pub.dev的步骤
后端
小白探索世界欧耶!~37 分钟前
【踩坑】GitHub Actions 运行的 Linux 环境中,文件名是大小写敏感的
linux·运维·服务器·前端·vue.js·笔记·github
lyingcloud39 分钟前
debian系统中文输入法失效解决
linux·运维·debian
新程快咖员1 小时前
【编程分享】如何去覆盖lombok中使用@Builder注解生成的Builder类的ToString()方法?
后端