当前位置: 代码网 > 服务器>服务器>Linux > Linux磁盘管理与LVM用法及说明

Linux磁盘管理与LVM用法及说明

2026年04月12日 Linux 我要评论
在linux运维的日常工作中,磁盘管理是绕不开的核心技能。无论是新服务器上架后的磁盘初始化、业务增长后的分区扩容,还是解决系统磁盘空间不足的紧急故障,掌握磁盘管理的全流程操作都能让你从容应对。一、磁盘

在linux运维的日常工作中,磁盘管理是绕不开的核心技能。无论是新服务器上架后的磁盘初始化、业务增长后的分区扩容,还是解决系统磁盘空间不足的紧急故障,掌握磁盘管理的全流程操作都能让你从容应对。

一、磁盘的“底层逻辑”:物理结构与数据组织

要学好磁盘管理,首先得知道磁盘到底是怎么存储数据的。

我们可以把一块物理硬盘想象成一个“数据仓库”,只有搞清楚仓库的“建筑结构”,才能高效地存放和取出数据。

1.1 硬盘的物理结构:看得见摸得着的部件

一块机械硬盘的核心部件主要包括盘片磁头主轴电机磁臂这几部分,它们的分工明确,缺一不可:

  • 盘片:这是硬盘存储数据的“载体”,相当于仓库里的“货架”。硬盘通常由多个盘片叠加组成,每个盘片的上下两个表面都能存储数据。盘片的材质是硬质合金,表面覆盖着一层磁性材料,数据就是以“磁信号”的形式记录在这些磁性材料上的。
  • 磁头:这是硬盘的“读写工具”,相当于仓库里的“搬运工”。每个盘片的每个表面都对应一个磁头,磁头的作用是读取盘片上的磁信号(读数据),或者向盘片写入磁信号(写数据)。值得注意的是,磁头在工作时并不会直接接触盘片表面,而是会悬浮在盘片上方极近的距离,这样可以避免划伤盘片。
  • 主轴电机:它的作用是带动所有盘片高速旋转,相当于给仓库的“货架”装上了“传送带”。盘片的旋转速度越快,磁头读写数据的效率就越高。常见的硬盘转速有7200转/分钟(家用级硬盘)和15000转/分钟(企业级服务器硬盘)。
  • 磁臂:磁臂是连接磁头的“机械手臂”,可以带动磁头在盘片的径向移动,从而让磁头能够到达盘片的不同位置,读取或写入不同区域的数据。

1.2 硬盘的数据结构:看不见但很关键的“存储规则”

盘片上的数据并不是杂乱无章存放的,而是按照严格的规则组织起来的,这个规则就是硬盘的数据结构。

核心概念包括扇区磁道柱面,这三个概念是理解磁盘分区的基础。

1.2.1 扇区(sector):硬盘的“最小存储单元”

扇区是硬盘能够读写的最小数据单位,相当于仓库货架上的“最小格子”。

每个扇区的大小是固定的,默认是512字节

无论你向硬盘写入1字节还是511字节的数据,都会占用一个完整的扇区。

当写入的数据超过512字节时,就会占用多个扇区。

1.2.2 磁道(track):盘片上的“同心圆轨迹”

当盘片在主轴电机的带动下高速旋转时,磁头会在盘片表面划出一个同心圆轨迹,这个轨迹就是磁道。

如果把盘片想象成一张唱片,磁道就相当于唱片上的纹路。

每个盘片表面都有数百条甚至数千条磁道,磁道的编号从盘片的外圈向内圈依次递增。

1.2.3 柱面(cylinder):多个盘片的“同心磁道组”

柱面是一个“立体概念”,它指的是所有盘片上半径相同的磁道组合而成的圆柱面。

比如,每个盘片的第100条磁道,组合起来就是第100个柱面。

在早期的磁盘分区工具中(比如fdisk),分区的划分就是以柱面为单位的,因为这样可以让磁头在读写数据时减少移动距离,提高效率。

1.2.4 硬盘容量的计算方法

了解了扇区、磁道、柱面的概念后,我们就能算出一块硬盘的理论容量了,公式很简单:

硬盘容量 = 磁头数 × 柱面数 × 每道扇区数 × 每扇区字节数

△举个例子:一块硬盘有4个磁头,1000个柱面,每个磁道有63个扇区,每个扇区512字节,那么它的容量就是:

4 × 1000 × 63 × 512 = 128,000,000 字节 ≈ 122mb

当然,这只是理论容量,实际硬盘的标称容量会因为计算方式的不同(厂家按1000进制,系统按1024进制)而略有差异,这就是为什么我们买的1tb硬盘,在系统中显示只有931gb左右的原因。

1.3 硬盘的接口类型:硬盘与主板的“连接桥梁”

硬盘需要通过接口与主板连接才能正常工作,不同的接口类型决定了硬盘的传输速度和兼容性。

常见的硬盘接口有以下几种,我们只需要掌握主流的类型即可:

1.3.1 sata接口:家用与中小企业服务器的主流选择

sata的全称是串行高级技术附件,是目前最普及的硬盘接口。它的优点是传输速度快、支持热插拔、接线简单。

sata接口分为多个版本,不同版本的传输速度不同:

  • sata 1.0:传输速度1.5gbps
  • sata 2.0:传输速度3.0gbps
  • sata 3.0:传输速度6.0gbps

我们日常使用的固态硬盘(ssd)和机械硬盘(hdd)大多采用sata 3.0接口,完全能满足家用和中小企业的业务需求。

1.3.2 sas接口:企业级服务器的“性能担当”

sas的全称是串行连接scsi,是专门为企业级服务器设计的接口。

它的优点是传输速度更快、稳定性更高、支持多设备串联。

sas接口的传输速度可以达到12gbps甚至更高,而且兼容sata硬盘,这意味着在sas控制器上可以同时连接sas硬盘和sata硬盘,灵活性非常高。

1.3.3 nvme接口:固态硬盘的“性能天花板”

nvme的全称是非易失性内存快速访问,是专门为固态硬盘设计的接口协议。

与sata接口不同,nvme接口直接通过pcie总线与cpu通信,跳过了传统的南桥芯片,大大降低了数据传输的延迟。

nvme固态硬盘的传输速度可以达到3000mb/s以上,是sata固态硬盘的数倍,目前广泛应用于高性能计算、游戏主机等场景。

1.4 linux系统中的磁盘设备命名:如何识别硬盘?

在linux系统中,一切皆文件,硬盘和分区也不例外,它们都以文件的形式存在于 /dev 目录下。

不同接口的硬盘,设备名的命名规则也不同,掌握这些规则,就能快速识别系统中的硬盘设备。

1.4.1 sata/sas/usb硬盘的命名规则

对于sata、sas接口的硬盘,以及通过usb连接的移动硬盘/u盘,linux系统会以sd 作为设备名的前缀,后面跟着一个字母和数字:

  • 字母部分:表示硬盘的序号,按硬盘接入系统的顺序依次分配,比如 a 代表第一块硬盘, b 代表第二块硬盘,以此类推。
  • 数字部分:表示硬盘上的分区序号,主分区和扩展分区的序号是1-4,逻辑分区的序号从5开始。

举个例子:

  • /dev/sda :表示系统中的第一块sata/sas硬盘
  • /dev/sda1 :表示第一块硬盘的第一个主分区
  • /dev/sdb5 :表示第二块硬盘的第一个逻辑分区
  • /dev/sdc1 :表示通过usb连接的第一块u盘的第一个分区

1.4.2 nvme固态硬盘的命名规则

对于nvme接口的固态硬盘,linux系统会以nvme作为设备名的前缀,命名规则相对复杂一些:

  • /dev/nvme0 :表示系统中的第一块nvme固态硬盘
  • /dev/nvme0n1 :表示第一块nvme固态硬盘的第一个命名空间(可以理解为硬盘的一个逻辑分区)
  • /dev/nvme0n1p1 :表示第一块nvme固态硬盘第一个命名空间的第一个分区

1.4.3 传统ide硬盘的命名规则

ide接口是比较老旧的硬盘接口,现在已经基本淘汰。

对于ide接口的硬盘,linux系统会以hd作为设备名的前缀,比如 /dev/hda 表示第一块ide硬盘, /dev/hda2 表示第一块ide硬盘的第二个主分区。

现在的linux系统已经很少见到这种命名方式了,只需要了解即可。

二、磁盘分区的“核心”:mbr与gpt分区表详解

买到一块新硬盘后,我们不能直接往里面写数据,必须先进行分区。分区就相当于给仓库划分不同的“功能区域”,比如办公区、仓储区、休息区等。而分区表就是记录这些“区域划分规则”的文件,它位于硬盘的第一个扇区(主引导扇区)。

目前主流的分区表有两种:mbr分区表gpt分区表,它们的特点和适用场景完全不同。

2.1 mbr分区表:传统的分区方案

mbr的全称是主引导记录,是一种非常古老的分区表格式,早在1983年就被提出。它曾经是pc机的标准分区表格式,直到今天仍然被一些老旧的系统使用。

2.1.1 mbr分区表的核心特点

1. 分区数量限制:mbr分区表最多支持4个主分区,或者3个主分区+1个扩展分区。扩展分区本身不能直接使用,必须在扩展分区内划分逻辑分区,逻辑分区的数量没有限制。这是mbr分区表最大的缺点,因为随着硬盘容量的增大,4个主分区往往不够用。

2. 容量限制:mbr分区表只支持最大2tb的硬盘容量。这是因为mbr分区表用32位二进制数来记录扇区地址,最大能表示的扇区数是2^32,乘以每个扇区512字节,就是2tb。如果你的硬盘容量超过2tb,就不能使用mbr分区表了。

3. 主引导记录的组成:mbr分区表位于硬盘的第一个扇区(扇区0),这个扇区的大小是512字节,包含三个部分

  • 主引导程序(占446字节):负责引导操作系统启动
  • 分区表(占64字节):记录分区的信息,每个分区的信息占16字节,所以最多只能记录4个分区
  • 分区结束标志(占2字节):固定为 0x55aa ,表示这个扇区是有效的主引导扇区

2.1.2 mbr分区的类型:主分区、扩展分区、逻辑分区

mbr分区表的分区分为三种类型,我们需要搞清楚它们的区别:

  • 主分区:可以直接格式化并挂载使用,也可以安装操作系统。mbr分区表最多只能创建4个主分区。
  • 扩展分区:它是一个“容器”,本身不能直接使用,必须在里面划分逻辑分区。扩展分区的作用是突破mbr分区表“最多4个分区”的限制。
  • 逻辑分区:在扩展分区内创建的分区,数量没有限制,可以直接格式化并挂载使用。逻辑分区的编号从5开始,比如 /dev/sda5 、 /dev/sda6 等。

举个例子:如果我们有一块500gb的mbr硬盘,想要划分5个分区,就可以这样操作:创建3个主分区+1个扩展分区,然后在扩展分区内创建2个逻辑分区,这样总共就有5个可用分区了。

2.2 gpt分区表:现代的分区方案

gpt的全称是全局唯一标识分区表,是为了解决mbr分区表的缺点而设计的。它是目前主流的分区表格式,支持大容量硬盘和更多的分区数量,是新装机和服务器系统的首选。

2.2.1 gpt分区表的核心特点

1. 分区数量无限制(理论上):gpt分区表在理论上支持创建无限多个分区,但实际上受限于操作系统的限制。比如windows系统最多支持128个gpt分区,linux系统对gpt分区的数量没有严格限制,完全能满足我们的需求。

2. 容量限制极大:gpt分区表使用64位二进制数来记录扇区地址,最大支持的硬盘容量是18eb(1eb=1024pb,1pb=1024tb)。这个容量远远超过了目前硬盘的最大容量,所以对于我们来说,gpt分区表几乎没有容量限制。

3. 更高的安全性:gpt分区表有备份机制,它的分区表信息不仅存储在硬盘的第一个扇区,还会存储在硬盘的最后一个扇区。这样即使第一个扇区的分区表损坏,也可以通过最后一个扇区的备份恢复,大大提高了数据的安全性。

4. 支持uefi启动:gpt分区表需要配合uefi主板使用,才能发挥最大的优势。uefi启动模式相比传统的bios启动模式,启动速度更快,支持更大的硬盘容量,还能支持安全启动等功能。

2.2.2 mbr与gpt分区表的对比:怎么选?

为了方便大家选择合适的分区表,我们做一个简单的对比:

  • 特性 mbr分区表        gpt分区表 
  • 最大支持硬盘容量 2tb  18eb 
  • 最多支持分区数量 4个主分区 / 无限逻辑分区 理论无限(系统限制128个) 
  • 启动模式支持 bios  uefi+bios(部分兼容) 
  • 安全性 无备份,   易损坏 有备份,安全性高 
  • 适用场景 老旧系统、2tb以下硬盘 新系统、2tb以上硬盘、服务器 

选择建议:如果你的硬盘容量≤2tb,且主板是老式的bios,选择mbr分区表。

如果你的硬盘容量>2tb,或者主板支持uefi,优先选择gpt分区表。

三、磁盘分区工具实战:fdisk与gdisk的使用方法

了解了分区表的类型后,接下来我们就要动手操作了。linux系统提供了多个分区工具,其中fdisk和gdisk是最常用的两个。fdisk主要用于mbr分区表,gdisk主要用于gpt分区表。下面我们分别讲解它们的使用方法。

3.1 fdisk工具:mbr分区表的“专属工具”

fdisk是linux系统中最经典的分区工具,适用于mbr分区表的创建、修改和删除。它是一个命令行工具,操作简单,功能强大。

3.1.1 前提条件:确认硬盘设备名

在使用fdisk之前,我们需要先确认要操作的硬盘设备名。可以使用 lsblk 或 fdisk -l 命令查看系统中的硬盘设备:

lsblk

执行命令后,会显示系统中所有的块设备(硬盘、u盘等),比如:

  • plaintext
  • name maj:min rm size ro type mountpoint
  • sda 8:0 0 500g 0 disk 
  • sda1 8:1 0 100g 0 part /
  • sda2 8:2 0 200g 0 part /data
  • sda3 8:3 0 200g 0 part 
  • sdb 8:16 0 1tb 0 disk 

从输出中可以看到, /dev/sdb 是一块1tb的硬盘,目前没有分区(没有 sd b1 、 sd b2 等子设备),这就是我们要操作的目标硬盘。

3.1.2 fdisk的基本操作流程

我们以 /dev/sdb 为例,讲解如何使用fdisk创建mbr分区。

步骤1:进入fdisk交互界面

  • 执行以下命令,进入fdisk的交互模式,操作目标硬盘 /dev/sdb :
  • fdisk /dev/sdb
  • 执行命令后,会出现提示符 command (m for help): ,表示已经进入fdisk的交互界面。输入 m 可以查看所有可用的命令。

步骤2:查看当前分区表

  • 在提示符后输入 p ,可以查看当前硬盘的分区表信息:
  • command (m for help): p
  • 对于新硬盘来说,输出会显示 disk /dev/sdb doesn't contain a valid partition table ,表示硬盘没有有效的分区表。

步骤3:创建新分区

在提示符后输入 n ,开始创建新分区。fdisk会引导我们完成分区的创建:

1. 选择分区类型:输入 p 表示创建主分区,输入 e 表示创建扩展分区。这里我们先创建一个主分区,输入 p 。

2. 选择分区编号:主分区的编号范围是1-4,这里输入 1 。

3. 设置起始扇区:直接按回车键,使用默认的起始扇区(通常是2048)。

4. 设置结束扇区:可以输入分区的大小,比如输入 +100g 表示创建一个100gb的分区,然后按回车键。

步骤4:修改分区类型(可选)

  • 默认情况下,fdisk创建的分区类型是 linux。如果我们要创建swap分区,就需要修改分区类型。
  • 1. 在提示符后输入 t ,选择要修改的分区编号(比如 1 )。
  • 2. 输入分区类型代码:swap分区的类型代码是 82 ,输入 82 即可。

步骤5:保存分区表并退出

  • 所有分区创建完成后,在提示符后输入 w ,保存分区表并退出fdisk交互界面。如果不想保存修改,输入 q 可以直接退出。

步骤6:让系统识别新分区

  • 保存分区表后,需要让内核重新读取分区信息,否则系统可能无法识别新创建的分区。执行以下命令:
  • partprobe /dev/sdb
  • 这个命令会通知内核更新分区表,无需重启系统。

3.1.3 fdisk的常用命令总结

在fdisk交互界面中,常用的命令如下,记住这些命令就能应对大部分操作:

  • p :查看分区表信息
  • n :创建新分区
  • d :删除指定分区
  • t :修改分区类型
  • w :保存修改并退出
  • q :不保存修改并退出
  • m :查看帮助信息

3.2 gdisk工具:gpt分区表的“专属工具”

gdisk是fdisk的升级版,专门用于gpt分区表的创建和管理。它的操作流程和fdisk类似,只是一些细节上有所不同。

3.2.1 前提条件:确认硬盘设备名

同样,我们需要先确认要操作的硬盘设备名,比如 /dev/sdc 是一块2tb的新硬盘,我们要在它上面创建gpt分区。

3.2.2 gdisk的基本操作流程

步骤1:进入gdisk交互界面

  • 执行以下命令,进入gdisk的交互模式,操作目标硬盘 /dev/sdc :
  • gdisk /dev/sdc
  • 执行命令后,会出现提示符 command (? for help): ,输入 ? 可以查看所有可用的命令。

步骤2:创建gpt分区表

  • 对于新硬盘来说,gdisk会提示 partition table scan: mbr: not present ,表示硬盘没有mbr分区表。我们需要创建一个gpt分区表,输入 o :
  • command (? for help): o
  • 输入 y 确认创建gpt分区表,这样硬盘就会被格式化为gpt分区表格式。

步骤3:创建新分区

输入 n 开始创建新分区,gdisk会引导我们完成操作:

  • 1. 选择分区编号:默认从1开始,直接按回车键。
  • 2. 设置起始扇区:使用默认值,按回车键。
  • 3. 设置结束扇区:输入 +200g 表示创建一个200gb的分区,按回车键。
  • 4. 选择分区类型:默认是 linux filesystem (类型代码8300),直接按回车键即可。如果需要创建其他类型的分区,可以输入对应的类型代码。

步骤4:保存分区表并退出

  • 输入 w 保存分区表并退出gdisk交互界面,输入 y 确认保存。然后执行 partprobe /dev/sdc 让系统识别新分区。

3.2.3 gdisk与fdisk的操作区别

gdisk和fdisk的操作流程基本一致,但有几个关键点需要注意:

gdisk创建gpt分区表需要先输入 o 命令,而fdisk创建mbr分区表不需要额外命令。

gdisk的分区类型代码是4位数字(如8300),而fdisk的分区类型代码是2位数字(如83)。

gdisk支持更大的硬盘容量和更多的分区数量,这是它的核心优势。

四、文件系统:给分区“格式化”的规则

创建完分区后,我们还不能直接使用分区,因为分区只是一个“空盒子”,需要给它设置文件系统,才能存储文件和目录。

文件系统就相当于给盒子设置的“摆放规则”,规定了文件如何命名、如何存储、如何查找。

4.1 linux系统中常见的文件系统类型

linux系统支持多种文件系统类型,不同的文件系统有不同的特点和适用场景。我们主要掌握以下几种主流的文件系统:

4.1.1 ext4:linux系统的“传统主力”

ext4是第四代扩展文件系统,是ext3的升级版,也是目前linux系统中最常用的文件系统之一。它的优点是稳定性高、兼容性好、支持大容量文件和分区。

最大支持的单个文件大小:16tb

最大支持的分区大小:1eb

适用场景:系统分区( / )、数据分区等大部分场景

4.1.2 xfs:高性能的“日志型文件系统”

xfs是一种高性能的日志型文件系统,由sgi公司开发,后来被纳入linux内核。它的优点是读写速度快、支持大容量分区、恢复速度快,非常适合用于大文件存储和高并发的场景。

最大支持的单个文件大小:8eb

最大支持的分区大小:8eb

适用场景:服务器的数据分区、视频存储、数据库存储等

4.1.3 swap:系统的“内存扩展”

swap文件系统并不是用来存储普通文件的,而是作为虚拟内存使用。当系统的物理内存不足时,内核会将部分不常用的数据从物理内存转移到swap分区中,从而释放物理内存供活跃进程使用。

适用场景:所有linux系统都需要创建swap分区,建议大小为物理内存的1.5-2倍(物理内存大于8gb时,swap分区大小可以等于物理内存)。

4.1.4 fat32/ntfs:与windows系统的“兼容桥梁”

fat32:是一种老旧的文件系统,支持跨平台使用(linux和windows都能识别),但缺点是最大支持单个文件4gb,最大支持分区32gb。适合用于u盘等小型存储设备。

ntfs:是windows系统的主流文件系统,支持大容量文件和分区。linux系统需要安装 ntfs-3g 工具才能识别和读写ntfs分区,适合用于与windows系统共享数据的场景。

4.2 格式化分区:创建文件系统的命令

格式化分区的命令是 mkfs (make filesystem的缩写),不同的文件系统有不同的命令选项。下面我们讲解常用文件系统的格式化命令。

4.2.1 格式化ext4文件系统

使用 mkfs.ext4 命令格式化分区为ext4文件系统,比如格式化 /dev/sdb1 :

mkfs.ext4 /dev/sdb1

执行命令后,系统会自动在分区上创建ext4文件系统,过程中会显示一些进度信息,等待完成即可。

4.2.2 格式化xfs文件系统

使用 mkfs.xfs 命令格式化分区为xfs文件系统,比如格式化 /dev/sdb2 :

mkfs.xfs /dev/sdb2

xfs文件系统的格式化速度非常快,即使是大容量分区,也能在短时间内完成。

4.2.3 创建swap文件系统

创建swap文件系统需要使用 mkswap 命令,比如将 /dev/sdb3 格式化为swap分区:

mkswap /dev/sdb3

格式化完成后,需要使用 swapon 命令启用swap分区:

swapon /dev/sdb3

使用 swapoff /dev/sdb3 命令可以停用swap分区。

4.2.4 格式化fat32文件系统

使用 mkfs.vfat 命令格式化分区为fat32文件系统,比如格式化u盘分区 /dev/sdc1 :

mkfs.vfat /dev/sdc1

这个命令常用于格式化u盘,方便在linux和windows系统之间共享数据。

4.3 注意事项:格式化前的重要提醒

格式化会清空数据:格式化分区会删除分区上的所有数据,因此在格式化之前,一定要确认分区上没有重要数据,或者已经做好了备份。

选择合适的文件系统:根据分区的用途选择合适的文件系统,比如系统分区用ext4或xfs,swap分区用swap,u盘用fat32。

不要格式化系统正在使用的分区:比如不要格式化 /dev/sda1 (如果它是系统的根分区),这样会导致系统崩溃。

五、挂载与卸载:让分区“真正可用”的关键步骤

格式化完分区后,我们还需要将分区挂载到linux系统的目录树上,才能通过目录访问分区中的数据。挂载就相当于给分区分配一个“入口地址”,这个地址就是挂载点。

5.1 挂载的基本概念:目录与分区的“关联关系”

linux系统的目录树是一个单一的树形结构,所有的分区、设备都需要挂载到这个树形结构的某个目录上,才能被访问。

挂载点:是一个普通的目录,比如 /data 、 /mnt/usb 等。挂载点目录必须是空目录,如果目录中有文件,挂载后这些文件会被暂时隐藏,直到分区被卸载。

临时挂载:使用 mount 命令挂载的分区,在系统重启后会失效,需要重新挂载。

永久挂载:将挂载信息写入 /etc/fstab 文件,系统开机时会自动挂载分区,无需手动操作。

5.2 临时挂载:mount命令的使用方法

mount 命令是linux系统中用于挂载分区的核心命令,基本语法如下:

mount [选项] 设备名 挂载点

5.2.1 基本挂载操作

我们以 /dev/sdb1 (ext4文件系统)为例,讲解如何临时挂载分区:

步骤1:创建挂载点目录

首先创建一个空目录作为挂载点,比如 /data :

sudo mkdir -p /data

选项表示如果目录不存在,就创建它;如果目录已经存在,不会报错。

步骤2:执行挂载命令

将 /dev/sdb1 挂载到 /data 目录:

sudo mount /dev/sdb1 /data

执行命令后,没有报错就表示挂载成功。此时,访问 /data 目录就相当于访问 /dev/sdb1 分区中的数据。

5.2.2 挂载时指定文件系统类型

默认情况下, mount 命令会自动检测分区的文件系统类型,但有时候检测可能不准确,我们可以通过 -t 选项手动指定文件系统类型:

sudo mount -t ext4 /dev/sdb1 /data

常用的文件系统类型有 ext4 、 xfs 、 vfat 、 swap 等。

5.2.3 挂载fat32分区并支持中文文件名

挂载fat32格式的u盘时,默认可能不支持中文文件名,会显示乱码。我们可以通过 -o 选项添加字符编码参数,解决中文乱码问题:

sudo mount -t vfat -o iocharset=utf8 /dev/sdc1 /mnt/usb

iocharset=utf8 表示使用utf-8字符编码,这样就能正确显示中文文件名了。

5.2.4 查看挂载状态

执行以下命令,可以查看系统中所有已挂载的分区信息:

df -ht

h 选项表示以人类可读的格式显示容量, -t 选项表示显示文件系统类型。

输出示例如下:

  • plaintext
  • filesystem type size used avail use% mounted on
  • /dev/sda1 ext4 100g 20g 80g 20% /
  • /dev/sdb1 ext4 200g 0g 200g 0% /data
  • /dev/sdc1 vfat 32g 2g 30g 7% /mnt/usb

从输出中可以看到, /dev/sdb1 已经成功挂载到 /data 目录,文件系统类型是ext4,容量200gb。

5.3 永久挂载:配置/etc/fstab文件

临时挂载的分区在系统重启后会失效,要实现开机自动挂载,需要将挂载信息写入 /etc/fstab 文件。

 /etc/fstab 是系统的自动挂载配置文件,每行记录一个挂载项。

5.3.1 /etc/fstab文件的格式

/etc/fstab 文件的每一行包含6个字段,字段之间用空格或制表符分隔,格式如下

plaintext

设备名/uuid 挂载点 文件系统类型 挂载参数 dump备份标记 fsck自检顺序

详细解释每个字段的含义:

1. 设备名/uuid:可以是分区的设备名(如 /dev/sdb1 ),也可以是分区的uuid。推荐使用uuid,因为设备名可能会随着硬盘接入顺序的变化而变化,而uuid是唯一的,不会改变。

2. 挂载点:分区要挂载到的目录,如 /data 。

3. 文件系统类型:如 ext4 、 xfs 、 vfat 等。

4. 挂载参数:常用的参数有 defaults (默认参数)、 ro (只读挂载)、 rw (读写挂载)等。 defaults 包含了 rw 、 suid 、 dev 等参数,适合大部分场景。

5. dump备份标记: 0 表示不备份, 1 表示需要备份。通常设置为 0 。

6. fsck自检顺序: 0 表示开机不自检, 1 表示优先自检(根分区通常设置为1), 2 表示其次自检。非根分区通常设置为 2 。

5.3.2 查看分区的uuid

要使用uuid配置 /etc/fstab ,首先需要查看分区的uuid。执行以下命令:

blkid /dev/sdb1

输出示例如下:

plaintext
/dev/sdb1: uuid="a1b2c3d4-1234-5678-90ab-cdef01234567" type="ext4"

其中, uuid="a1b2c3d4-1234-5678-90ab-cdef01234567" 就是 /dev/sdb1 的uuid。

5.3.3 配置/etc/fstab文件

我们以 /dev/sdb1 为例,配置永久挂载:

步骤1:编辑/etc/fstab文件

使用 vi 编辑器打开 /etc/fstab 文件:

sudo vi /etc/fstab

步骤2:添加挂载项

在文件末尾添加一行,内容如下(替换为你的uuid和挂载点):

plaintext
uuid=a1b2c3d4-1234-5678-90ab-cdef01234567 /data ext4 defaults 0 2

步骤3:验证配置是否正确

执行以下命令,重新读取 /etc/fstab 文件,并挂载所有未挂载的分区:

sudo mount -a

如果没有报错,就表示配置正确。此时, /dev/sdb1 会被自动挂载到 /data 目录,系统重启后也会自动挂载。

5.4 卸载分区:umount命令的使用方法

当我们需要拔掉u盘或者卸载某个分区时,需要使用 umount 命令,基本语法如下:

umount 设备名/挂载点

5.4.1 基本卸载操作

比如卸载挂载在 /data 目录的分区,可以使用以下两种命令

sudo umount /data
# 或者
sudo umount /dev/sdb1

两种命令的效果是一样的,推荐使用挂载点卸载,因为设备名可能会变化。

5.4.2 解决“设备忙”的问题

有时候执行 umount 命令会提示 device is busy ,表示分区正在被使用,无法卸载。解决方法如下:

1. 退出挂载点目录:如果当前终端的工作目录在挂载点(如 /data ),需要先切换到其他目录(如 /home ),再执行卸载命令。

2. 关闭使用分区的进程:使用 fuser 命令查看正在使用分区的进程:

sudo fuser -mv /data

然后使用 kill 命令终止这些进程,再执行卸载命令。

3. 强制卸载(不推荐):使用 umount -f 命令可以强制卸载分区,但可能会导致数据损坏,只建议在紧急情况下使用。

5.5 挂载的常见问题与解决方法

1. 挂载后目录看不到文件:如果挂载点目录原本有文件,挂载后这些文件会被隐藏,卸载分区后才能看到。这是正常现象,不是故障。

2. 开机后分区没有自动挂载:检查 /etc/fstab 文件的配置是否正确,字段之间的分隔符是否正确,uuid是否写错。执行 mount -a 验证配置。

3. fat32分区中文文件名乱码:挂载时添加 -o iocharset=utf8 参数,即可解决中文乱码问题。

六、lvm逻辑卷管理:动态扩容的“终极方案”

传统的分区方案有一个致命的缺点:分区大小一旦创建就无法动态调整。如果分区空间不足,只能备份数据后删除分区,重新创建更大的分区,再恢复数据,这个过程非常繁琐。而lvm(逻辑卷管理)就完美解决了这个问题,它可以让你在不丢失数据的情况下,动态调整分区的大小,还能将多个硬盘的空间合并成一个大的“存储池”。

6.1 lvm的核心概念:物理卷、卷组、逻辑卷

lvm的核心是将物理硬盘/分区抽象为物理卷,然后将多个物理卷合并为卷组,最后从卷组中划分出逻辑卷供用户使用。这三个概念是理解lvm的关键,解释:

物理卷(pv):相当于“砖块”,是lvm的最小存储单元,可以是整个硬盘,也可以是硬盘上的一个分区。

卷组(vg):相当于“墙”,由多个“砖块”(物理卷)砌成,是一个大的存储池。卷组的大小等于所有组成它的物理卷的大小之和。

逻辑卷(lv):相当于“墙上的窗户”,从“墙”(卷组)中划分出来的一块区域,可以直接格式化并挂载使用。逻辑卷的大小可以动态调整,还可以跨多个物理卷。

6.2 lvm的优势:为什么要使用lvm?

相比传统的分区方案,lvm有以下几个显著的优势:

1. 动态扩容/缩容:逻辑卷的大小可以根据需要动态调整,无需删除分区和备份数据。

2. 跨磁盘合并空间:可以将多个不同大小的硬盘的空间合并成一个卷组,然后划分出逻辑卷,充分利用硬盘空间。

3. 快照功能:可以为逻辑卷创建快照,用于数据备份和恢复。当数据损坏时,可以通过快照恢复到之前的状态。

4. 灵活的管理:可以随时添加新的物理卷到卷组中,扩展卷组的容量,满足业务增长的需求。

6.3 lvm的完整操作流程:从创建到扩容

下面我们以 /dev/sdb 和 /dev/sdc 两块硬盘为例,讲解lvm的完整操作流程,包括创建物理卷、卷组、逻辑卷,以及动态扩容逻辑卷。

6.3.1 步骤1:准备物理卷(pv)

首先,我们需要将硬盘或分区转换为物理卷。可以直接使用整个硬盘(如 /dev/sdb ),也可以使用硬盘上的分区(如 /dev/sdb1 )。这里我们使用整个硬盘。

1. 创建物理卷

执行 pvcreate 命令,将 /dev/sdb 和 /dev/sdc 转换为物理卷:

sudo pvcreate /dev/sdb /dev/sdc

执行命令后,系统会在硬盘上创建lvm的元数据,标记这些硬盘为物理卷。

2. 查看物理卷信息

执行 pvdisplay 命令,可以查看物理卷的详细信息:

sudo pvdisplay

输出会显示物理卷的名称、大小、所属卷组(未分配卷组时显示为 [free] )等信息。

6.3.2 步骤2:创建卷组(vg)

卷组是由一个或多个物理卷组成的存储池。我们需要给卷组起一个名字,比如 vg_data 。

1. 创建卷组

执行 vgcreate 命令,将 /dev/sdb 和 /dev/sdc 添加到卷组 vg_data 中:

sudo vgcreate vg_data /dev/sdb /dev/sdc

执行命令后,卷组 vg_data 就创建成功了,它的大小等于 /dev/sdb 和 /dev/sdc 的大小之和。

2. 查看卷组信息

执行 vgdisplay 命令,可以查看卷组的详细信息:

sudo vgdisplay vg_data

输出会显示卷组的名称、大小、剩余空间等信息。

6.3.3 步骤3:创建逻辑卷(lv)

逻辑卷是从卷组中划分出来的虚拟分区,我们可以指定逻辑卷的大小和名称。比如创建一个名为 lv_data 、大小为500gb的逻辑卷。

1. 创建逻辑卷

  • 执行 lvcreate 命令,创建逻辑卷 lv_data :
  • sudo lvcreate -l 500g -n lv_data vg_data

参数说明:

  • -l 500g :指定逻辑卷的大小为500gb
  • -n lv_data :指定逻辑卷的名称为 lv_data 
  • vg_data :指定逻辑卷所属的卷组名称

2. 查看逻辑卷信息

执行 lvdisplay 命令,可以查看逻辑卷的详细信息:

sudo lvdisplay /dev/vg_data/lv_data

输出会显示逻辑卷的路径( /dev/vg_data/lv_data 或 /dev/mapper/vg_data-lv_data )、大小、文件系统类型等信息。

3. 格式化并挂载逻辑卷

逻辑卷创建完成后,需要格式化并挂载才能使用。比如格式化为xfs文件系统,挂载到 /data 目录:

sudo mkfs.xfs /dev/vg_data/lv_data
sudo mkdir -p /data
sudo mount /dev/vg_data/lv_data /data

执行命令后,逻辑卷就可以正常使用了,访问 /data 目录就相当于访问逻辑卷中的数据。

4. 配置永久挂载

逻辑卷的挂载信息写入 /etc/fstab 文件,实现开机自动挂载:

sudo blkid /dev/vg_data/lv_data

获取uuid后,编辑 /etc/fstab 文件,添加以下内容:

plaintext
uuid=xxxx-xxxx-xxxx-xxxx /data xfs defaults 0 2

执行 mount -a 验证配置。

6.3.4 步骤4:动态扩容逻辑卷

当 /data 目录的空间不足时,我们可以动态扩容逻辑卷,无需卸载分区和备份数据。假设卷组 vg_data 还有剩余空间,我们将逻辑卷 lv_data 的大小扩容到800gb。

1. 扩容逻辑卷

  • 执行 lvextend 命令,将逻辑卷的大小增加300gb(从500gb扩容到800gb):
  • sudo lvextend -l +300g /dev/vg_data/lv_data
  • 参数 -l +300g 表示增加300gb的容量,如果直接写 -l 800g ,表示将逻辑卷的大小设置为800gb。

2. 刷新文件系统

扩容逻辑卷后,文件系统的大小并没有自动更新,我们需要执行对应的命令刷新文件系统:

xfs文件系统:使用 xfs_growfs 命令,后面跟挂载点:

sudo xfs_growfs /data

ext4文件系统:使用 resize2fs 命令,后面跟逻辑卷路径:

sudo resize2fs /dev/vg_data/lv_data

3. 验证扩容结果

执行 df -ht /data 命令,查看扩容后的分区大小,确认扩容成功。

6.3.5 步骤5:添加新的物理卷扩展卷组

如果卷组 vg_data 的空间不足,我们可以添加新的硬盘(如 /dev/sdd )到卷组中,扩展卷组的容量。

1. 创建新的物理卷

sudo pvcreate /dev/sdd

2. 将物理卷添加到卷组

sudo vgextend vg_data /dev/sdd

3. 查看卷组信息,确认容量增加

sudo vgdisplay vg_data

此时,卷组 vg_data 的容量就增加了 /dev/sdd 的大小,我们可以再次扩容逻辑卷。

6.4 lvm的常用命令总结

lvm的常用命令整理如下:

物理卷(pv)

1.  pvcreate /dev/sdb 

将目标磁盘或分区初始化为物理卷,写入lvm元数据,使其被lvm系统识别。

2.  pvdisplay /dev/sdb 

查看指定物理卷的详细信息,包括容量、所属卷组、剩余空间等。

3.  pvremove /dev/sdb 

删除物理卷上的lvm元数据,使其不再被lvm系统识别,可用于回收磁盘。

4.  pvscan 

扫描系统中所有物理卷,快速列出所有可用的物理卷及其状态。

卷组(vg)

1.  vgcreate vg_data /dev/sdb /dev/sdc 

创建名为 vg_data 的卷组,并将 /dev/sdb 和 /dev/sdc 两个物理卷加入其中。

2.  vgdisplay vg_data 

查看指定卷组的详细信息,包括总容量、已用空间、剩余空间、包含的物理卷等。

3.  vgextend vg_data /dev/sdd 

将新的物理卷 /dev/sdd 添加到卷组 vg_data 中,扩展卷组的总容量。

4.  vgreduce vg_data /dev/sdd 

从卷组 vg_data 中移除物理卷 /dev/sdd ,需确保该物理卷上无逻辑卷数据。

5.  vgremove vg_data 

删除整个卷组 vg_data ,需先删除卷组内所有逻辑卷才能执行。

逻辑卷(lv)

1.  lvcreate -l 500g -n lv_data vg_data 

在卷组 vg_data 中创建名为 lv_data 、大小为500gb的逻辑卷。

2.  lvdisplay /dev/vg_data/lv_data 

查看指定逻辑卷的详细信息,包括路径、大小、所属卷组、文件系统类型等。

3.  lvextend -l +300g /dev/vg_data/lv_data 

为逻辑卷 lv_data 增加300gb容量,也可直接写 -l 800g 将容量设为800gb。

4.  lvreduce -l -100g /dev/vg_data/lv_data 

为逻辑卷 lv_data 减少100gb容量,需谨慎操作,建议先备份数据。

5.  lvremove /dev/vg_data/lv_data 

删除指定逻辑卷,需先卸载该逻辑卷的挂载点。

文件系统刷新

1.  xfs_growfs /data 

刷新xfs文件系统大小,使系统识别逻辑卷扩容后的新容量,需指定挂载点。

2.  resize2fs /dev/vg_data/lv_data 

刷新ext4文件系统大小,使系统识别逻辑卷扩容后的新容量,需指定逻辑卷路径。

6.5 lvm的注意事项

1. 缩容需谨慎:逻辑卷的缩容操作比扩容复杂,而且容易导致数据损坏。如果需要缩容,建议先备份数据,然后卸载分区,再执行缩容命令,最后刷新文件系统。

2. 快照功能的使用:lvm的快照功能可以为逻辑卷创建一个“只读副本”,用于数据备份。创建快照的命令是 lvcreate -s -l 10g -n lv_snap /dev/vg_data/lv_data ,其中 -s 表示创建快照。

3. 数据备份:虽然lvm的动态扩容很方便,但仍然建议定期备份重要数据,以防意外发生。

七、磁盘管理的“避坑指南”:新手常见问题与解决方法

在磁盘管理的操作过程中,新手很容易遇到各种问题。下面我们总结了一些常见的问题和解决方法,帮助大家避开这些“坑”。

7.1 问题1:fdisk无法创建大于2tb的分区

原因:fdisk是用于mbr分区表的工具,而mbr分区表最大支持2tb的硬盘容量。

解决方法:使用gdisk工具创建gpt分区表,gpt分区表支持最大18eb的硬盘容量。

7.2 问题2:挂载分区时提示“unknown filesystem”

原因:分区没有格式化,或者格式化的文件系统类型不被系统识别。

解决方法:先使用 mkfs 命令格式化分区为系统支持的文件系统(如ext4、xfs),再执行挂载命令。

7.3 问题3:umount提示“device is busy”

原因:分区正在被使用,比如终端的工作目录在挂载点,或者有进程正在读写分区中的文件。

解决方法:退出挂载点目录,关闭使用分区的进程,再执行卸载命令。

7.4 问题4:逻辑卷扩容后,文件系统大小没有变化

原因:扩容逻辑卷后,没有刷新文件系统,文件系统仍然使用原来的大小。

解决方法:根据文件系统类型,执行 xfs_growfs (xfs)或 resize2fs (ext4)命令,刷新文件系统大小。

7.5 问题5:系统开机后无法挂载分区,提示“mount: can't find uuid=xxx”

原因: /etc/fstab 文件中填写的uuid错误,或者分区的uuid发生了变化。

解决方法:使用 blkid 命令重新查看分区的uuid,修改 /etc/fstab 文件中的uuid,然后执行 mount -a 验证配置。

八、总结:磁盘管理的核心流程与学习建议

8.1 磁盘管理的核心流程

通过本文的学习,我们可以总结出linux磁盘管理的核心流程:

  • 1. 磁盘初始化:了解磁盘的物理结构和接口类型,识别系统中的磁盘设备。
  • 2. 分区操作:根据需求选择mbr或gpt分区表,使用fdisk或gdisk工具创建分区。
  • 3. 格式化分区:使用 mkfs 命令为分区创建文件系统。
  • 4. 挂载分区:使用 mount 命令临时挂载分区,或配置 /etc/fstab 实现永久挂载。
  • 5. 动态扩容:使用lvm逻辑卷管理,实现分区的动态扩容,满足业务增长需求。

掌握了磁盘管理的技能,你就能从容应对linux系统中的各种存储问题,为后续的运维工作打下坚实的基础。希望本文能帮助你真正吃透linux磁盘管理,成为一名合格的linux运维工程师!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com