想象一下,你刚刚为Linux服务器添置了一块新硬盘,却对如何操作感到茫然。磁盘管理是Linux系统运维和开发人员必须掌握的技能。无论是进行服务器配置、规划数据存储,还是简单地添加硬盘、扩展存储空间,都需要对磁盘结构和管理工具有深入的理解。今天我们从零开始,逐步深入了解Linux磁盘管理的核心概念、常用命令和操作逻辑。
一、先搞懂:Linux 磁盘到底是怎么组成的?
很多人刚接触 Linux 磁盘时,会被各种名词搞晕:什么是物理磁盘?什么是块设备?扇区和柱面又是干嘛的?我们先从最基础的结构说起,从硬件到逻辑,一层层拆解。
1. 物理磁盘:真实存在的硬件
物理磁盘就是我们插在服务器上实实在在的硬盘,不管是传统的 SATA 机械盘,还是现在流行的 NVMe 固态,在 Linux 系统里都会被识别为一个设备文件,放在 /dev 目录下。
最常见的命名规则是:
老式的 IDE 磁盘会命名为 /dev/hda、/dev/hdb,第一个硬盘是 a,第二个是 b,以此类推;现在最常用的 SATA/SCSI 磁盘,会命名为 /dev/sda、/dev/sdb;NVMe 固态硬盘一般命名为 /dev/nvme0n1、/dev/nvme1n1。
我们平常说的 /dev/sda,指的就是第一块物理磁盘,这就是磁盘结构最底层的单位。
2. 分区:把一块大磁盘切成小块用
一块新的物理磁盘拿到手,不能直接用来存数据,必须先分成一个个逻辑区域,这个区域就是分区。比如常见的 /dev/sda1、dev/sda2,就是第一块物理磁盘上的第一个、第二个分区。
为什么要分区?主要是两个原因:一是方便数据分类管理,比如把系统文件和用户数据分开存,系统出问题重装的时候,用户数据不会被影响;二是不同分区可以用不同的文件系统,满足不同的存储需求。
3. 块设备:Linux 访问磁盘的统一接口
在 Linux 里,所有硬件都被抽象成文件,磁盘也不例外。Linux 把可以随机读写、按块传输数据的设备叫做块设备,磁盘和分区都是典型的块设备。
这种抽象的好处是,不管你是机械硬盘还是固态硬盘,是本地盘还是网络存储,只要通过块设备接口就能访问,应用程序不用管底层硬件的差异,直接读写就行。
4. 扇区:磁盘最小的存储单位
再往底层看,磁盘本身的最小存储单位是扇区。传统磁盘的扇区大小一般是 512 字节,现在的新磁盘基本都用 4K 扇区了。简单说就是,磁盘每次读写数据,最小都要操作一个扇区,你存一个 1 字节的文件,也要占一个扇区的空间。
至于以前常说的柱面、磁头、扇区(CHS 寻址),其实是老式机械硬盘的概念,用来表示磁盘的物理位置。现在的磁盘和操作系统已经不用这种方式寻址了,只要了解这个概念就行,不用深究。
小技巧:想快速看一下你的系统里有多少磁盘和分区?直接执行 lsblk 命令,就能列出所有块设备的结构,非常清晰。如果想看更详细的信息,可以用 fdisk -l。
举个实际的例子,执行 lsblk 后输出一般是这样的:
bashNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 200G 0 disk ├─sda1 8:1 0 512M 0 part /boot└─sda2 8:2 0 199.5G 0 part /sdb 8:16 0 500G 0 disk
这里就能清楚看到:sda 是一块 200G 的物理磁盘,分成了 sda1(挂在 /boot)和 sda2(挂在根目录 /)两个分区,还有一块 500G 的 sdb 还没有分区。
二、MBR vs GPT:分区类型和分区表怎么选?
讲完成基本结构,我们再说说分区的分类和两种主流的分区表:MBR 和 GPT,这也是很多人容易搞混的点。
1. 主分区、扩展分区、逻辑分区:MBR 的老规则
如果用传统的 MBR 分区表,磁盘分区就分为主分区和扩展分区两种:
主分区:最基础的分区,可以直接格式化存数据、安装系统。MBR 规则里,一块磁盘最多只能有 4 个主分区,编号是 1~4,对应 /dev/sda1 到 /dev/sda4。扩展分区:为了突破“最多4个主分区”的限制,MBR 搞出了扩展分区的概念:你可以把一个主分区设为扩展分区,然后在这个扩展分区里面再切出多个小分区,这些小分区就叫逻辑分区。
逻辑分区的编号从 5 开始,比如一块磁盘分了 2 个主分区,1 个扩展分区,那么第一个逻辑分区就是 /dev/sda5,第二个就是 /dev/sda6,以此类推。一块磁盘最多可以有多少个逻辑分区?不同文件系统不一样,几十个肯定是够用了。
举个例子:如果我需要 6 个分区,怎么分?方法就是:分 3 个主分区 + 1 个扩展分区(占了 4 个主分区名额),然后在扩展分区里分 3 个逻辑分区,总共就有 6 个可用分区了。
2. MBR vs GPT:新磁盘一定要用 GPT
说完分区类型,再说说分区表——分区表就是用来记录每个分区的位置、大小、类型的表,存在磁盘的最开头,系统靠它找到各个分区。现在主流的分区表有两种:MBR 和 GPT,区别非常大:
特性
MBR
GPT
最大支持磁盘容量 2TB 几乎无限(支持 9.4ZB)
最大分区数量 最多 4 个主分区,扩展分区下逻辑分区数量有限 最多支持 128 个分区,不用扩展分区
安全性 只有一份分区表,坏了磁盘就废了 分区表多份备份在磁盘开头和结尾,坏了能恢复
启动支持 只支持 BIOS 启动 支持 BIOS 和 UEFI 启动,现在新电脑/服务器都用 UEFI
所以结论很明确:如果你的磁盘大于 2TB,或者是新买的服务器,直接用 GPT 就对了,MBR 是淘汰的技术,不用再纠结。
怎么看你的磁盘用的是 MBR 还是 GPT?执行命令 parted /dev/sda print,看输出里的 Partition Table 字段就能知道。
三、分区管理:常用工具和操作流程
搞清楚概念之后,我们来实操一下:一块新磁盘,怎么分区?Linux 里常用的分区工具主要有四个,根据场景选就行:
工具
适用场景
特点
fdisk MBR 分区 经典工具,交互式操作,简单好用,不支持 GPT
gdisk GPT 分区 操作逻辑和 fdisk 几乎一样,专门给 GPT 用
parted 支持 MBR 和 GPT,支持大容量磁盘 功能强大,也支持命令行和交互式,分区扩容常用
我们以最常用的 fdisk 给 /dev/sdb 分区为例,流程非常简单:
启动分区工具:输入 fdisk /dev/sdb(注意:是整块物理磁盘,不是分区),进入交互式界面;输入 m 可以看帮助,输入 n 表示新建分区;接下来会提示你选择分区类型(p 是主分区,e 是扩展分区),输入 p 选主分区;然后输入分区编号,默认按顺序来就行,回车确认;接着设置分区的起始扇区和结束扇区,也就是分区大小,比如你要分一个 100G 的分区,起始扇区直接回车默认,结束扇区输入 +100G 回车就行;重复上面的步骤,把所有分区建好之后,输入 p 可以预览一下分区结果,确认没问题,输入 w 保存退出,分区就建好了。
如果要删除分区,进入 fdisk 之后输入 d,再选择要删除的分区编号,最后 w 保存就行。
分区建好之后,不用重启,执行 partprobe /dev/sdb 就可以让内核重新读取分区表,识别新分区了。
查看分区信息的常用命令我们之前提过:lsblk 看结构,fdisk -l 看详细信息,parted -l 看分区表类型,按需使用就行。
四、文件系统:分区建好之后,怎么存数据?
分区建好之后,还不能直接用,必须先格式化创建文件系统才能存数据。什么是文件系统?简单说就是用来组织和管理磁盘上文件数据的结构,没有文件系统,磁盘就是一堆空白的二进制数据,系统不知道哪里是文件开头,哪里是结尾。
Linux 支持几十种文件系统,我们常用的就是三种,根据场景选:
1. 常用的三种文件系统
ext4:Linux 发行版的默认文件系统,比如 CentOS 7、Debian 默认都是 ext4。它成熟稳定,兼容性好,普通场景用它完全没问题,缺点是单个文件系统最大支持 1EB,应付一般服务器够用了。XFS:CentOS 7 之后开始默认推广的文件系统,支持更大容量的存储(最大支持 8EB),性能比 ext4 更好,尤其是大文件、高并发场景,比如数据库、日志存储,用 XFS 比 ext4 更合适。Btrfs:新一代的 CoW(写时复制)文件系统,支持很多高级特性,比如快照、数据校验、动态扩容压缩,适合需要备份和数据一致性的场景,现在越来越多发行版开始默认用 Btrfs 了。
2. 文件系统常用管理命令
创建文件系统非常简单,mkfs 命令搞定,比如给 /dev/sdb1 分区创建 ext4 文件系统:
bashmkfs.ext4 /dev/sdb1
创建 XFS 就是:
bashmkfs.xfs /dev/sdb1
如果文件系统出问题了,需要检查修复,可以用 fsck 命令:
bashfsck /dev/sdb1
注意:执行 fsck 之前一定要先卸载分区,不能在挂载状态下检查,不然会损坏数据。
想看系统里已经挂载的文件系统用了多少空间?执行 df -h 就能看到,非常清楚:
bashdf -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 196G 12G 175G 7% //dev/sda1 477M 150M 298M 34% /boot/dev/sdb1 492G 12G 455G 3% /data
五、挂载:让分区能被系统访问
Windows 里分区分好之后会自动分配一个盘符比如 C:、D:,就能直接访问了。Linux 不一样,所有文件都在同一个目录树下面,要让分区能被访问,必须把分区挂载到某个目录(这个目录叫挂载点),之后我们访问这个目录,就是访问这个分区里的数据了。
1. 临时挂载和永久挂载
挂载的命令非常简单,比如把 /dev/sdb1 挂载到 /data 目录:
bash# 先创建挂载点目录,如果不存在的话mkdir /data# 执行挂载mount /dev/sdb1 /data
这样就挂载好了,现在你进 /data 就能往里面存数据了,这就是临时挂载——服务器重启之后,挂载就会消失,下次开机还要重新挂。
如果想让开机自动挂载,就是永久挂载,需要编辑 /etc/fstab 文件,在最后加一行:
bash/dev/sdb1 /data ext4 defaults 0 0
这五个字段分别是:
设备文件(也可以写设备的 UUID,更稳定,不会因为磁盘顺序变了出问题)挂载点文件系统类型挂载参数,一般写 defaults 就行第一个 0 表示是否备份,0 不备份;第二个 0 表示是否开机检查,0 不检查。
加完之后执行 mount -a,系统会重读 fstab 文件,把里面所有配置的挂载都挂上,没问题就是成功了,下次开机会自动挂载。
卸载分区也很简单,用 umount 命令,接挂载点或者设备名都可以:
bashumount /data# 或者 umount /dev/sdb1
注意:卸载的时候要确保没有程序在访问这个分区,不然会卸载失败。
小建议:挂载点尽量用清晰的命名,比如存数据就用 /data,存备份就用 /backup,不要随便挂在 /mnt 下面就不管了,时间长了自己都不知道哪个分区是干嘛的。
六、Swap 空间:Linux 的虚拟内存怎么管理?
很多人刚接触 Linux 会疑惑 Swap 是什么?其实 Swap 就是我们常说的虚拟内存:当物理内存不够用的时候,系统会把内存里不常用的数据放到 Swap 分区里,腾出物理内存给正在运行的程序用,相当于“扩大”了内存。当然,Swap 是在磁盘上的,速度比物理内存慢很多,所以不要指望 Swap 能代替物理内存,它只是一个应急的手段。
Swap 有两种实现方式:Swap 分区和Swap 文件,两种都能用,现在用 Swap 文件更灵活,不用单独分一个区。
1. 创建 Swap 分区
如果要把一个单独分区做成 Swap,步骤是:
bash# 格式化 Swap 分区mkswap /dev/sda2# 启用 Swapswapon /dev/sda2
要永久生效的话,同样在 /etc/fstab 加一行:
bash/dev/sda2 swap swap defaults 0 0
2. 创建 Swap 文件
如果不想单独分分区,直接创建一个 Swap 文件更方便,比如创建一个 4G 的 Swap 文件:
bash# 创建一个 4G 的空文件,fallocate 比 dd 快很多fallocate -l 4G /swapfile# 权限改成 600,避免其他用户读取,安全chmod 600 /swapfile# 格式化成 Swapmkswap /swapfile# 启用 Swapswapon /swapfile
同样永久生效加一行到 /etc/fstab:
bash/swapfile swap swap defaults 0 0
3. 查看 Swap 使用情况
想看 Swap 有没有生效,用了多少,可以用 free -h:
free -h
total used free shared buff/cache available
Mem: 1.9Gi 1.1Gi 123Mi 10Mi 738Mi 650Mi
Swap: 3.9Gi 0B 3.9Gi
也可以用 swapon -s 看详细的 Swap 信息。
一般来说,Swap 大小设置建议:物理内存小于 2G,Swap 设成内存的 2 倍;物理内存 2G~8G,Swap 和内存一样大;大于 8G 的话,Swap 设 8G 足够了,当然如果你的服务器要做休眠,Swap 要比内存大一点。
总结:Linux 磁盘管理的完整架构
我们今天从最底层的物理磁盘开始,一步步梳理了 Linux 磁盘管理的整个体系,整个架构其实非常清晰:
物理硬件 → 分区(MBR/GPT) → 文件系统 → 挂载
掌握这些概念和常用命令,我们就能应对日常运维里绝大多数磁盘相关的工作:新增磁盘、分区格式化挂载、配置 Swap、扩容分区、做快照备份,都能轻松搞定。
其实 Linux 磁盘管理并不难,难的是理清各个层级的概念,知道每一步是在做什么,为什么要这么做。很多人新手会犯的错误就是跳过分区直接格式化,或者 fstab 写错导致开机失败,只要理清了逻辑,这些问题都能避免。在下一篇中,将深入探讨LVM(逻辑卷管理)的丰富知识。
最后留一个问题给大家:你现在服务器用的是 MBR 还是 GPT?欢迎在评论区分享你的使用经验。
全文详见:http://it-club.cn/post/805.html