Linux磁盘管理与LVM用法及说明
作者:kiku1818
在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
p 选项表示如果目录不存在,就创建它;如果目录已经存在,不会报错。
步骤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运维工程师!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
