很多刚接触Linux的新手都会有这些灵魂拷问:
- Windows里有C盘、D盘,为什么Linux里看不到盘符?
- 怎么看服务器磁盘还剩多少空间?哪个目录占的空间最大?
- 为什么df显示磁盘满了,但du算出来的总大小却差很多?
这些问题的答案,都在今天的内容里。磁盘管理是Linux运维的必备技能,不管是日常使用、服务器运维,还是排查磁盘满、文件丢失等故障,都离不开它。
本篇我们从核心概念讲起,先搞懂「磁盘、分区、挂载」的底层逻辑,再手把手教你df、du磁盘查看命令,最后带你走完「新增磁盘→分区→格式化→挂载→永久生效」的完整实操流程,新手跟着敲一遍就能掌握。
一、核心认知:Linux磁盘管理和Windows的本质区别
新手学磁盘管理的第一个卡点,就是用Windows的逻辑套Linux,先把这个核心区别搞懂,后面的内容一学就会。
| | |
|---|
| 以「盘符」为核心,每个磁盘/分区对应一个独立的盘符(C:、D:、E:),各盘符互相独立 | |
| 以「目录树」为核心,遵循「一切皆文件」的设计,所有磁盘/分区都必须挂载到系统的目录上 | |
举个通俗的例子:
- Windows的盘符就像一个个独立的抽屉,每个抽屉有自己的编号,打开哪个抽屉就用里面的东西;
- Linux的挂载就像把U盘插到文件夹上,你打开这个文件夹,就能直接用U盘里的内容,所有的磁盘都要“插”到根目录
/下的某个文件夹里才能用。
这个「把磁盘分区和系统目录绑定的操作」,就是挂载,绑定的目录叫做挂载点,这是Linux磁盘管理最核心的概念。
二、核心概念扫盲:磁盘、分区、挂载到底是什么?
1. 磁盘的命名规则(Linux怎么识别磁盘)
Linux会给系统里的每一块磁盘分配一个唯一的设备文件,存放在/dev目录下,命名规则和磁盘类型强相关,新手记住这3种最常见的即可:
| | | |
|---|
| /dev/sd[a-z] | | |
| /dev/nvme[数字]n[数字] | | |
| /dev/vd[a-z] | | |
✅ 新手技巧:用lsblk命令可以直观看到系统里所有的磁盘和分区结构,比记命名规则更简单,后面会详细讲。
2. 分区:给磁盘划地盘
分区就是把一块物理磁盘,逻辑上划分成多个独立的区域,每个区域就是一个分区,不同分区可以做不同的用途(比如系统分区、数据分区、交换分区)。
为什么要分区?
- 数据隔离:系统和数据分开存,系统坏了重装不会影响数据;
- 性能优化:不同分区可以用不同的文件系统参数,适配不同的读写场景;
- 安全限制:比如给日志目录单独分区,日志写满了不会影响系统核心运行。
两种分区表格式(新手必知)
分区表是磁盘上记录分区信息的结构,主流有两种,重点记区别:
3. 挂载:让磁盘分区真正能用
前面我们说过,Linux里所有的磁盘分区,都必须挂载到一个目录(挂载点)上才能使用。
核心规则
- 一个分区只能挂载到一个挂载点,不能同时挂载到多个目录;
- 一个挂载点可以挂载多个分区,但只有最后挂载的分区生效,之前的会被隐藏;
- 挂载点必须是提前创建好的目录,建议用空目录(非空目录挂载后,原有内容会被隐藏,卸载后恢复);
- 系统安装时创建的分区,会自动挂载到
/(根目录)、/boot、/home等目录; - 手动执行
mount命令的挂载是临时挂载,重启系统后就会失效,要永久生效必须修改/etc/fstab配置文件。
4. 文件系统:分区的“格式”
就像Windows格式化U盘会选NTFS、FAT32一样,Linux的分区也需要格式化,写入文件系统才能使用。主流的文件系统有2种:
- xfs:RHEL/CentOS/Anolis OS 默认文件系统,擅长处理大文件,高性能,适合服务器场景;
- ext4:Ubuntu/Debian 默认文件系统,兼容性好,适合日常使用,日志型文件系统,数据安全性高。
三、磁盘查看核心命令:先学会“看”,再学会“改”
新手学磁盘管理,先从查看命令学起,不用修改磁盘,零风险,还能快速建立认知。
1. lsblk:直观查看磁盘与分区结构(首选)
lsblk(list block devices)可以以树形结构,直观展示系统里所有的磁盘、分区、挂载点,是新手查看磁盘信息的首选命令。
# 基础用法(直接执行,零参数,最常用)lsblk
示例输出(新手一眼看懂):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSsda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 19G 0 part ├─cs-root 253:0 0 17G 0 lvm / └─cs-swap 253:1 0 2G 0 lvm [SWAP]sdb 8:16 0 10G 0 disk sr0 11:0 1 1024M 0 rom
输出解读:
NAME:磁盘/分区名称,disk代表整块磁盘,part代表分区;SIZEMOUNTPOINTS
2. df:查看磁盘分区整体使用率
df(disk free)核心作用是查看系统里所有已挂载分区的整体使用情况:总容量、已用容量、剩余容量、使用率、挂载点。
这是日常排查“磁盘满了”的第一个命令,必学。
常用实操案例
# 1. 最常用:以人类可读的单位(GB/MB)显示容量(必背)df -h# 示例输出:# Filesystem Size Used Avail Use% Mounted on# devtmpfs 867M 0 867M 0% /dev# tmpfs 896M 0 896M 0% /dev/shm# /dev/mapper/cs-root 17G 2.3G 15G 14% /# /dev/sda1 1014M 200M 815M 20% /boot# tmpfs 180M 0 180M 0% /run/user/0
# 2. 查看inode使用情况(排查inode满的问题)df -i# 说明:inode是文件的唯一标识,每个文件占用一个inode# 如果inode使用率100%,哪怕磁盘还有剩余空间,也无法创建新文件
# 3. 只查看指定文件系统类型的分区df -h -t xfs# 只看xfs格式的分区
3. du:查看文件/目录的磁盘占用大小
du(disk usage)核心作用是查看具体某个文件、某个目录占用了多少磁盘空间,用来定位“哪个文件/目录占空间最大”,和df是互补的。
常用实操案例
# 1. 最常用:查看当前目录下,每个子目录/文件的总大小,人类可读格式du -sh *# 示例输出:# 1.2G logs# 20M project# 4.0K test.txt
# 2. 只查看指定目录的总占用大小(汇总)du -sh /var/log# 输出:1.2G /var/log
# 3. 查看目录下一级子目录的大小(不深入子目录)du -h --max-depth=1 /home# 适合排查根目录下哪个一级目录占空间最大
# 4. 排序:找出当前目录下最大的10个文件/目录du -sh * | sort -hr | head -10# 运维高频命令,排查大文件神器
4. df 和 du 的核心区别(新手必懂,避免混淆)
高频问题:为什么df和du的结果不一致?
最常见的原因:文件已经被删除,但占用该文件的进程还在运行,空间没有被系统释放。
- 场景:日志文件被rm删除,但服务没重启,进程还在往里面写日志,du看不到这个文件,但df依然统计已用空间;
- 解决方法:用
lsof | grep deleted查看被删除但仍被占用的文件,重启对应进程,或者清空文件(> 文件名)即可释放空间。
5. 其他辅助查看命令
# 查看磁盘分区的详细信息(包括分区表、扇区等)sudo fdisk -l# 查看分区的UUID、文件系统类型(永久挂载必用)blkid# 示例输出:/dev/sda1: UUID="xxxx-xxxx" TYPE="xfs" PARTUUID="xxxx-xxxx"
四、完整实操:新增磁盘→分区→格式化→挂载→永久生效
这是本篇的核心实操,我们以“给虚拟机新增一块10G的磁盘,完成全流程配置,实现重启后依然生效”为例,新手跟着步骤一步步来,就能完整掌握Linux磁盘管理的全流程。
⚠️ 重要提醒:以下操作会修改磁盘分区表和格式化,请在测试虚拟机操作,确认磁盘设备名正确,切勿操作系统盘,避免数据丢失!
步骤1:确认新增的磁盘
给虚拟机新增磁盘后,先执行lsblk命令,确认新磁盘的设备名:
lsblk
示例输出中,sdb就是我们新增的10G磁盘,没有分区、没有挂载点:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSsda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 19G 0 part ├─cs-root 253:0 0 17G 0 lvm / └─cs-swap 253:1 0 2G 0 lvm [SWAP]sdb 8:16 0 10G 0 disk # 这是我们新增的磁盘sr0 11:0 1 1024M 0 rom
步骤2:给磁盘分区(gdisk,GPT分区表,推荐)
现在主流系统都用GPT分区表,我们用gdisk工具给新增的/dev/sdb磁盘分区,新手直接用整个磁盘创建一个分区即可。
# 1. 执行gdisk命令,操作目标磁盘(注意替换成你的磁盘名,别写错!)sudo gdisk /dev/sdb
进入gdisk交互界面后,按以下步骤操作,括号里是解释:
Command (? for help): n # 输入n,新建一个分区Partition number (1-128, default 1): # 直接回车,默认分区号1First sector (34-20971486, default = 2048): # 直接回车,默认起始扇区Last sector (2048-20971486, default = 20971486): # 直接回车,用整个磁盘的所有空间Hex code or GUID (L to show codes, Enter = 8300): # 直接回车,默认Linux文件系统类型Command (? for help): w # 输入w,保存分区表并退出Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!Do you want to proceed? (Y/N): Y # 输入Y确认,分区完成
操作完成后,再用lsblk查看,就能看到新创建的分区/dev/sdb1:
sdb 8:16 0 10G 0 disk └─sdb1 8:17 0 10G 0 part # 新创建的分区
补充说明:如果是小于2T的磁盘,想用MBR分区表,可以用sudo fdisk /dev/sdb,操作逻辑类似,输入n新建分区,w保存退出。
步骤3:给分区格式化(写入文件系统)
分区创建好后,必须格式化写入文件系统才能使用,我们以主流的xfs为例,ext4格式只需要替换命令里的xfs为ext4即可。
# 格式化分区,注意替换成你的分区名!sudo mkfs.xfs /dev/sdb1# 若用ext4格式,执行这个# sudo mkfs.ext4 /dev/sdb1
执行后会输出格式化的详细信息,没有报错就是格式化成功。
步骤4:创建挂载点目录
挂载点就是一个普通的目录,我们需要提前创建好,比如我们把这个分区挂载到/data目录(常用的数据目录):
# 创建挂载点目录sudo mkdir -p /data
步骤5:临时挂载(重启失效)
用mount命令把分区挂载到创建好的目录上:
# 挂载分区到/data目录sudo mount /dev/sdb1 /data
挂载完成后,用df -h验证是否成功:
df -h /data# 示例输出:# Filesystem Size Used Avail Use% Mounted on# /dev/sdb1 10G 25M 9.9G 1% /data
能看到分区容量、挂载点,就说明挂载成功了,现在你往/data目录里写文件,就是写到新增的这块磁盘里了。
步骤6:永久挂载(重启不失效,重点)
手动执行mount的挂载是临时的,服务器重启后就会消失,要实现永久挂载,必须把挂载配置写入/etc/fstab文件,这是Linux系统开机自动挂载分区的配置文件。
关键提醒(新手避坑,重中之重)
⚠️ /etc/fstab 配置错误会导致系统开机无法启动!修改完成后,必须执行sudo mount -a测试,无报错再重启系统!
✅ 推荐用UUID挂载,不要用/dev/sdb1,因为磁盘的设备名可能会变(比如新增磁盘后,sdb变成sdc),但UUID是分区的唯一标识,永远不变。
操作步骤
先获取分区的UUID,执行blkid命令:
sudo blkid /dev/sdb1# 示例输出:/dev/sdb1: UUID="6f8b9c7d-1234-5678-90ab-cdef01234567" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="xxxx-xxxx"# 复制引号里的UUID,比如上面的 6f8b9c7d-1234-5678-90ab-cdef01234567
编辑/etc/fstab配置文件,用vim打开:
sudo vim /etc/fstab
在文件末尾添加一行挂载配置,格式如下:
UUID=你复制的UUID 挂载点 文件系统类型 挂载参数 dump备份 fsck检查顺序
对应我们的示例,添加的内容是:
UUID=6f8b9c7d-1234-5678-90ab-cdef01234567 /data xfs defaults 0 0
6个字段详细解释(新手必懂)
| 字段 | 示例值 | 说明 |
| :--- | :--- | :--- |
| 第1字段 | UUID=xxx | 分区标识,推荐用UUID,也可以写/dev/sdb1 |
| 第2字段 | /data | 挂载点目录,必须提前创建好 |
| 第3字段 | xfs | 文件系统类型,要和格式化时一致(xfs/ext4) |
| 第4字段 | defaults | 挂载参数,defaults包含了rw(读写)、exec(可执行)等默认参数,新手直接用defaults即可 |
| 第5字段 | 0 | 是否开启dump备份,0=不备份,1=备份,新手填0 |
| 第6字段 | 0 | 开机磁盘检查顺序,0=不检查,根目录/填1,其他分区填2,非系统分区填0即可 |
保存退出vim后,必须执行测试命令,验证配置是否正确:
sudo mount -a
这个命令会加载/etc/fstab里的所有配置,执行后没有任何输出,就说明配置正确,没有报错;如果有报错,立刻回去修改配置,不要重启!
验证:可以先卸载分区,再用mount -a重新挂载,看是否能自动挂载成功:
# 先卸载sudo umount /data# 重新加载fstab配置挂载sudo mount -a# 查看是否挂载成功df -h /data
能正常挂载,就说明永久挂载配置完成了,重启系统也不会失效。
步骤7:卸载分区(可选)
如果不需要这个分区了,可以用umount命令卸载:
# 卸载分区,两种写法都可以sudo umount /data # 按挂载点卸载sudo umount /dev/sdb1 # 按分区名卸载
避坑提示:卸载时,不要在挂载目录里执行umount命令,会提示device is busy,先退出挂载目录再执行卸载。
五、新手高频避坑指南(重中之重)
- 分区操作致命坑:操作分区前,一定要用
lsblk确认磁盘设备名,绝对不能写错系统盘(比如/dev/sda),否则会导致系统崩溃、数据丢失,新手只在测试环境操作分区。 - fstab配置致命坑:修改
/etc/fstab后,必须执行sudo mount -a测试,无报错再重启,配置错误会导致系统无法开机。 - 永久挂载推荐用UUID:不要用/dev/sda1这种设备名,服务器重启、新增磁盘后,设备名可能会变化,导致挂载失败,UUID是唯一不变的。
- 挂载点注意事项:挂载点必须提前创建,尽量用空目录;非空目录挂载后,原有内容会被隐藏,卸载后才会恢复,不要用系统关键目录做挂载点。
- 磁盘满了的两种情况:不仅要看
df -h的磁盘空间使用率,还要看df -i的inode使用率,inode满了也会导致无法创建新文件。 - rm删除文件空间不释放:不要直接rm正在被进程写入的日志文件,会导致空间不释放,正确做法是用
> 文件名清空文件,或者先停进程再删文件。 - 格式化不可逆:格式化会清空分区里的所有数据,执行前一定要确认分区名正确,不要格式化系统分区。
六、常用命令速查表(建议收藏,日常直接查)
# 磁盘信息查看lsblk # 直观查看磁盘、分区、挂载点结构sudo fdisk -l # 查看磁盘分区详细信息blkid # 查看分区UUID、文件系统类型# 磁盘使用率查看df -h # 查看所有分区的磁盘使用情况(人类可读)df -i # 查看分区inode使用情况du -sh * # 查看当前目录下所有文件/目录的大小du -sh 目录名 # 查看指定目录的总大小du -h --max-depth=1 / # 查看根目录下一级目录的大小du -sh * | sort -hr | head -10 # 找出当前目录最大的10个文件/目录# 分区与格式化sudo gdisk /dev/sdb # GPT分区表分区工具sudo fdisk /dev/sdb # MBR分区表分区工具sudo mkfs.xfs /dev/sdb1 # 格式化为xfs文件系统sudo mkfs.ext4 /dev/sdb1 # 格式化为ext4文件系统# 挂载与卸载sudo mount /dev/sdb1 /data # 临时挂载分区到指定目录sudo umount /data # 卸载分区sudo mount -a # 加载/etc/fstab配置,测试永久挂载是否正确sudo vim /etc/fstab # 编辑永久挂载配置文件
七、本篇总结
- Linux磁盘管理和Windows的核心区别是:Linux以目录树为核心,所有磁盘分区必须挂载到目录上才能使用,核心操作是挂载。
- 磁盘查看核心命令:
lsblk看磁盘分区结构,df看分区整体使用率,du看文件/目录大小,三者互补。 - 新增磁盘的完整流程:确认磁盘→分区→格式化→创建挂载点→挂载→配置永久生效。
- 永久挂载必须修改
/etc/fstab,推荐用UUID,修改后必须用mount -a测试,避免系统无法启动。 - 磁盘操作有风险,分区、格式化命令一定要确认设备名,切勿在生产环境随意操作,先测试再执行。
文 / 零距技术仓记录每一次真实的折腾 (#^.^#)🚀 想看到更多实用折腾技巧?👉 先关注💬 评论区说说你的经历或想看的内容👍 点赞表示支持🔁 顺手分享给也在折腾的人,让大家都少踩坑 😎