
做运维的人大概都遇到过这种场景明明往服务器里插了一块新盘df -h里死活看不到或者分区文件系统满了你想扩容却要先搞清楚当前的sda、sda1、sda2到底是怎么分布的。这时候脑子里往往会冒出一串命令——fdisk、lsblk、hwinfo还有桌面环境里那些图形工具。可一旦真到线上环境很多人还是会犹豫一下到底该用哪个哪个输出能直接告诉我分区表类型哪个能看出磁盘型号和驱动绑定情况哪个又能让我在脚本里安全地解析输出这篇文章就把这 4 种查看磁盘分区的方法挨个讲透。不光是命令怎么敲还包括每个命令适合什么场景、输出怎么读、有哪些坑。看完之后你至少能做到给一台陌生机器做分区巡检时不再对着终端发呆。1. 我先想明白一件事查看分区到底在看哪几层很多新人对“查看磁盘分区”这件事的理解就是敲一条命令然后把输出背下来。但在实际排障里这个需求其实包含三层完全不同的信息。1.1 设备层、分区表、文件系统三个视角别搞混第一层是设备层。系统内核到底识别出了哪些块设备它们的主次设备号是多少总容量多大这一层的信息在/proc/partitions和/sys/block下面lsblk就是基于这个逻辑把设备树画出来的。第二层是分区表层。磁盘上到底用的是 MBR 还是 GPT每个分区从哪个扇区开始、到哪个扇区结束分区类型是什么这一层的信息存在磁盘的前几个扇区里fdisk、parted、GParted 都是直接读写分区表的工具。所以这一层最接近“物理真相”。第三层是文件系统与挂载层。分区里面有没有格式化出文件系统文件系统类型是 ext4、xfs 还是 NTFS当前挂载到了哪个目录可用空间还剩多少这一层由内核的 VFS 管理df、blkid、mount是这一层的主力命令。你可能会问lsblk不是也能显示挂载点吗没错但它显示的挂载点是从内核 sysfs 里读出来的“当前状态”。如果你想知道磁盘使用率还得看df。明白这三层后面所有命令的输出你就知道该往哪个“抽屉”里放了。1.2 按使用场景选命令临时排查、脚本处理还是硬件诊断选命令之前先问自己三个问题我是临时看一眼还是要把结果写进脚本我是只想知道“有哪些分区”还是要连磁盘型号、总线类型、驱动绑定一起搞清楚我面对的是一台命令行服务器还是带着图形桌面的工作站对应关系大概是这样的场景首选命令原因快速查看分区和挂载点lsblk -f输出简洁一眼看懂树状关系查看 MBR/GPT 分区表细节fdisk -l或parted -l分区表原始信息都在这里机器识别不出盘怀疑硬件层问题hwinfo --disk能看到设备型号、SysFS ID、驱动绑定桌面环境下给新手演示GNOME Disks / GParted可视化分区条直观远程服务器无桌面想用网页看Cockpit浏览器点点点就能看存储脚本解析分区信息lsblk --jsonJSON 格式稳定不需要正则硬啃文本一句话总结日常排障我习惯先lsblk需要看分区表细节就fdisk怀疑硬件层再hwinfo给小白演示才开图形工具。下面逐个拆开讲。2. fdisk -l老命令的看家本领和它容易看走眼的地方fdisk可能是 Linux 用户接触得最早的磁盘命令之一。虽然它的主要功能是“分区”但很多人其实只用它来“看分区”。2.1 用 fdisk -l 查看分区表输出字段逐个拆解先看最基本的用法sudo fdisk -l注意前面的sudo。普通用户运行当然也能吐出一点信息但想看完整的 /dev/sda 磁盘信息和分区表没有 root 权限经常被 sysfs 挡在外面。生产环境里建议直接sudo fdisk -l或者sudo fdisk -l /dev/sda只看某个特定磁盘。典型输出长这样Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors Disk model: CT256MX100SSD1 Units: sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 33553920 bytes Disklabel type: dos Disk identifier: 0x6b8a5c09 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 616447 614400 300M 7 HPFS/NTFS/exFAT /dev/sda2 616448 500118191 499501744 238.2G 7 HPFS/NTFS/exFAT读这个输出重点看几行Disk model磁盘型号。这里能看到厂商型号比如一块 Crucial 的固态盘。如果这一行是空的通常意味着设备来自虚拟化平台或 RAID 卡透传。Sector size扇区大小。现在大部分新盘逻辑扇区是 512 字节部分高端盘是 4096 字节物理扇区。分区工具换算容量全靠它。Disklabel type分区表类型。dos就是 MBRgpt就是 GPT。这一行最实用——判断一台机器是不是大容量盘用 GPT在这里一眼就能看到。Device / Boot / Start / End / Sectors / Size / Id / Type这张表就是分区表的直接翻译。Start和End是起始和结束扇区号Size是你最关心的空间大小Type是分区类型 ID 或名称。如果你只想看系统盘的分区布局sudo fdisk -l /dev/sda就够了。如果机器上有 N 块盘不加参数会全部列出来信息量很大但有时反而是好事——一次性比较所有磁盘的容量和分区表类型。2.2 看 GPT 分区时用 parted 而不是死磕 fdisk有一个很常见的误区以为 fdisk 是老古董不支持 GPT。其实较新版本的 util-linux 里的 fdisk 已经能完整读写 GPT 分区表。但它的 GPT 输出确实没有parted清晰。举个例子GPT 分区表用fdisk -l看Disklabel type会显示 gpt分区表部分还会多出First LBA、Last LBA这样的全局扇区范围。信息全但不如 parted 的表格直观。parted -l的输出是把每个分区按编号、起始位置、结束位置、大小、文件系统类型列成一张整齐的表还标注了分区表类型sudo parted -l如果只是想知道“这块盘是 MBR 还是 GPT”“总容量多少”“分区边界在哪”我用parted -l的频率反而比fdisk -l高。当然fdisk -l仍然值得掌握因为它在解释一些老式分区类型 ID 时更接近传统维护习惯比如 0x82 是 Linux swap0x83 是 Linux filesystem0xfd 是 Linux RAID。2.3 fdisk 不适合做脚本化的真实原因单独看一次没问题但你要是想把fdisk -l的输出接进监控脚本很快就会后悔。为什么输出格式在不同 util-linux 版本里有差异比如有些版本分区类型列显示的是 ID 数字有些显示的是字符串名称。多磁盘环境下输出块之间用空行分隔解析时要自己维护“当前磁盘”的状态机。磁盘有坏道或处于异常状态时fdisk 会额外输出告警文本直接污染解析结果。脚本化查看分区我更推荐后面的lsblk --json或者稳妥起见直接用lsblk -o输出固定列。不是说 fdisk 不能用在脚本里而是没必要和它较劲。3. lsblk一屏显示设备、分区和挂载点的全能选手如果说只能留一个命令在工具箱里我会选lsblk。它的全称是 list block devices基于 sysfs 读取设备信息所以普通用户也能跑出大部分结果不需要 root。3.1 默认输出的树状结构怎么读直接在终端里敲lsblk输出类似NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 300M 0 part /boot/efi ├─sda2 8:2 0 238.2G 0 part / sdb 8:16 0 931.5G 0 disk └─sdb1 8:17 0 931.5G 0 part /data这里NAME是设备名MAJ:MIN是主设备号和次设备号RM表示是否可移动设备SIZE是容量RO是否只读TYPE是设备类型MOUNTPOINT是挂载点。树状结构最大的价值在于层级关系一目了然sda是磁盘下面的sda1、sda2是分区。相比fdisk -l的扁平表格lsblk 能让你秒懂“哪块盘里有哪几个分区”。而且有挂载点的分区直接显示目录比如/boot/efi、/data不用再去df里对照。3.2 -f、-o、-J、-p从交互查看到脚本输出的完整用法lsblk真正拉开差距的是它的参数。第一条lsblk -f展示文件系统信息lsblk -f它会在原有列后面追加FSTYPE文件系统类型、LABEL卷标、UUID、MOUNTPOINT。这一条命令基本能回答“这分区是什么文件系统、有没有挂载、UUID 是多少”这类日常 80% 的问题。第二条lsblk -o自定义列lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,UUID /dev/sdb-o后面跟列名可以精确控制输出哪些字段。指定/dev/sdb还能单独看某块盘。写脚本的时候你永远只需要固定的几列而不是被额外信息干扰。第三条lsblk -JJSON 输出lsblk -J -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT这是我最喜欢的功能。JSON 格式对任意脚本语言都很友好Python、Go、Shell 里的 jq 都能轻松处理。以前解析fdisk -l要写正则现在lsblk --json直接给结构化数据彻底摆脱文本解析的噩梦。第四条lsblk -p和lsblk -d。-p让设备名显示为完整的/dev/sda路径-d表示只显示磁盘本身不展开分区。组合起来可以快速枚举机器上有哪些磁盘lsblk -d -p -o NAME,SIZE,MODELMODEL列可以顺便把磁盘型号显示出来vps 和物理机的盘一眼就能区分。3.3 lsblk 也不是万能的两个容易被忽略的局限lsblk 好用但别神话它。第一个局限它不关心文件系统的健康状态和真实使用率。lsblk告诉你 sdb1 容量 931.5G挂载在 /data但不会告诉你 /data 已经用了 87%。想看使用率还是得df -h /data。第二个局限对于设备绑定和硬件层面的问题lsblk 的字段不够深。比如 SCSI 总线地址是多少磁盘固件版本是多少设备是通过/dev/sda还是/dev/nvme0n1暴露底层是什么驱动在驱动它这些 lsblk 给不了。要更深就得请出hwinfo。4. hwinfo从硬件层钻进去看磁盘和分区的隐藏信息hwinfo这个命令很多用 Debian/Ubuntu 系的人是熟悉的但也有人从来没装过。它的本质是硬件探测工具不只管磁盘还管 CPU、内存、显卡、网卡等一堆硬件。我们这里只关心它看磁盘分区的能力。4.1 安装 hwinfo 和四个常用参数装它很简单# Debian/Ubuntu sudo apt install hwinfo # RHEL/Rocky/Fedora sudo dnf install hwinfo # Arch Linux sudo pacman -S hwinfo安装完先跑一条最轻的sudo hwinfo --disk --short--short会压缩输出只留下关键设备路径适合快速确认系统识别出了哪些磁盘disk: /dev/sda /dev/sdb接下来是完整的四个参数sudo hwinfo --disk看磁盘的详细信息包括设备型号、厂商、序列号、Size、BIOS id 等。sudo hwinfo --partition看分区层信息比如分区编号、设备文件、扇区大小。sudo hwinfo --block列出所有块设备包括磁盘、分区、光驱等。sudo hwinfo --short --disk --partition两个对象合并只看设备路径。注意hwinfo --disk的输出非常长一节一节的别一上来就想背。这时候的阅读策略应该是“抓字段”而不是“读全文”。4.2 长输出里真正有用的字段Device File、Size、BIOS idhwinfo --disk输出里的关键字段大概这样不同版本字段顺序有差异11: PCI 200.0: 10600 Disk Hardware Class: disk Model: CT256MX100SSD1 Vendor: Crucial Device File: /dev/sda Device Number: major 8; minor 0 BIOS id: 0x80 Geometry (Logical): CHS 30401/255/63 Size: 500118192 sectors a 512 bytes这几个字段各有用途Vendor/Model厂商和型号。当你怀疑系统认错了盘或者想确认两块盘是不是同型号这里直接看。Device File设备节点路径。它告诉你这块盘最终落在/dev/sda还是/dev/sdb。Device Number主次设备号和lsblk里的MAJ:MIN对应。Size用扇区数表示的容量。500118192 sectors a 512 bytes乘一下就是字节数。BIOS idBIOS 视角的磁盘编号。多硬盘环境下这个编号有时能帮你对照主板上的接口顺序。hwinfo --partition的输出则更纯粹Device File: /dev/sda1 Partition Number: 1 Size: 614400 sectors Hardware Class: partition它主要回答一件事情这个分区在硬件层是否存在、设备节点是什么、分区号是多少。用作交叉验证很合适。4.3 什么时候必须用 hwinfo什么时候用它反而多余我自己的判断标准是这样的必须用 hwinfo 的场景一般是 lsblk 和 fdisk 都说不清楚的情况。比如系统里出现了一个/dev/sdclsblk 只能看到容量和分区但你看不出它是 USB 移动盘还是内置 SATA 盘也看不出驱动是谁。hwinfo --disk里直接写了 Hardware Class 和 SysFS BusID能帮你快速区分外接盘和内置盘。另一个场景是磁盘识别异常开机后少了一块盘lsblk里根本没有这个设备这时候hwinfo --disk如果还能列出它说明是驱动或分区表层面的问题而不是硬件彻底失效。多余的场景更常见。只是看一眼分区和挂载点用lsblk -f五秒搞定没必要把hwinfo那段冗长输出翻出来。毕竟hwinfo --disk一次输出的文本量是lsblk的几十倍有时候还有告警和检测日志干扰新手很容易被劝退。5. 图形工具GNOME Disks、GParted、Cockpit 的选型与实操别觉得图形工具“不专业”。在很多场景下图形界面的效率其实碾压命令行尤其是给同事做演示、给新手教学、或者确认分区边界这种需要“人眼盯图”的操作。5.1 GNOME Disks桌面最零门槛的分区查看器GNOME 桌面上自带的“磁盘”应用包名是gnome-disk-utility启动命令gnome-disks它在左边列出所有磁盘点一块盘右边直接展示分区列表每个分区有大小、文件系统类型、挂载点、序列号等信息。点击分区名还能进入详情页看到 SMART 健康状态、坏道评估、挂载参数等。对普通用户来说这个工具最友好的一点是不需要接触任何命令也几乎不可能误操作。它默认是只读式浏览挂载和格式化操作被藏得比较深。做系统盘的日常体检我经常让没写过命令的人直接打开它看分区和 SMART 状态。5.2 GParted把分区表和空闲空间画成图的专业工具GParted 是 GNOME 下老牌的分区编辑工具包名gpartedsudo apt install gparted gparted启动时会让你输入密码然后弹出图形界面。每块盘顶部是一条彩色分区条每个颜色代表一种文件系统空闲空间用灰色或虚线标出来。下面表格列出分区表类型、起始位置、结束位置、大小、标志。GParted 的“查看”能力很突出因为它能直接把 GPT 和 MBR 的差异可视化。比如一块 MBR 盘你可以在分区条上看到扩展分区和逻辑分区的嵌套关系这在命令行里要理解半天。但这里有句重要提醒注意GParted 是能修改分区的工具不是纯查看器。界面上的所有修改操作都需要点绿色的“应用”按钮才会真的执行。如果你只是想查看千万别手滑去点删除、格式化或者调整大小的按钮。只看不动它就是个最清晰的分区表阅读器。5.3 Cockpit没有图形桌面的服务器也能在网页里看分区服务器没有桌面环境但你依然想要图形化查看Cockpit 是最佳选择。它是一套 Web 管理面板安装之后浏览器访问 IP 的 9090 端口就行。sudo apt install cockpit sudo systemctl enable --now cockpit.socket然后打开https://服务器IP:9090用系统账号登录。点左侧的“Storage”存储菜单能看到每个物理磁盘、分区、文件系统、挂载状态甚至能看到 RAID 和 SMART 信息。Cockpit 适合什么场景我经常用在一堆无头服务器上——不需要给机器装图形环境只需要在运维电脑的浏览器里打开面板检查远程服务器的磁盘分区情况。特别需要注意的是第一次访问时浏览器会提示证书不受信任这是 Cockpit 默认自签证书的正常现象选择继续访问即可。5.4 图形工具的三个共同注意事项第一图形分区工具基本都是权限敏感型程序。gnome-disks和GParted都要求 root 权限双击打开后弹密码框是正常的别以为是自己点错了。第二如果你通过 SSH X11 转发使用这些 GUI 工具延迟会很高界面可能卡顿。这时候不如用lsblk或者 Cockpit 的网页界面。第三图形工具依赖桌面环境和系统组件在精简安装的服务器上gnome-disks和 GParted 可能根本拉不起依赖。与其跟依赖打架不如直接接受现实——服务器上老老实实用命令行需要可视化就装 Cockpit。6. 把四种方法串成一套完整的分区信息巡检流程工具讲完最后给一套我在实际工作中经常用的“分区信息巡检”流程。这套流程能帮你从内核识别一直查到文件系统挂载覆盖上面三种视角。6.1 第一步从 /proc/partitions 确认内核识别结果当你连lsblk都不想用的时候直接读内核的记账本cat /proc/partitions输出格式是major minor #blocks name 8 0 250059552 sda 8 1 307200 sda1 8 2 249752366 sda2这一招的价值在于/proc/partitions是最底层的内核视角。哪怕设备还没有格式化、没有分区表、甚至没有文件系统只要内核枚举到了块设备它就会出现在这里。所以当你插了一块新盘却“看不到”时先看它——如果这里都没有那就不是分区的问题是设备识别的问题赶紧回退到hwinfo --disk查硬件层。6.2 第二步用 blkid 和 lsblk -f 找出“有分区但没文件系统”的磁盘接下来看文件系统。一条命令同时干两件事的还是lsblk -flsblk -f如果一个分区的FSTYPE列是空的或者只有一个swap说明这个分区没有格式化或者不是常规文件系统。这时候再用blkid看更精确的 UUID 和类型sudo blkid /dev/sdb1输出类似/dev/sdb1: UUID1c2a3b4c-... TYPEext4 PARTUUIDabcd1234-...注意blkid的TYPE字段是文件系统类型和fdisk里的分区类型 ID 不是一个概念别搞混。分区类型 ID 描述的是“这个分区的用途标识”比如 Linux filesystem 或 swapTYPE描述的是“分区里实际格式化出来的文件系统”。这俩不一致时通常意味着分区表某个地方被改过。6.3 第三步用 df -hT 确认挂载后的真实可用空间设备识别了文件系统也有接下来要看挂载后到底能用多少这回到df的管辖范围df -hT-h是人类可读的容量单位-T显示文件系统类型。它会告诉你每个已挂载分区的总容量、已用、可用、使用率、挂载点。只有到了这一步你才真正知道“磁盘空间够不够用”。6.4 第四步排查故障时的收尾工具dmesg 和 smartctl如果前面几步发现某个磁盘异常或者某个分区挂载不上去最后就要看内核日志和磁盘健康状态了。dmesg | tail -n 50插入新盘、掉盘、RAID 卡报错、文件系统异常内核都会在 dmesg 里留痕迹。搜索sd、sda、ext4之类的关键字能快速定位问题。磁盘本身的健康状态则用 smartctl 查sudo smartctl -H /dev/sda sudo smartctl -a /dev/sda-H只输出整体健康评估-a会列出所有 SMART 属性。看Reallocated_Sector_Ct、Current_Pending_Sector这些参数有没有持续增长比什么工具都直观。这套流程走完一个分区的“一生”基本都在你手里了内核怎么说、分区表怎么写、文件系统怎么格式化、挂载后怎么用、硬件状态怎么样。至于我自己平时最趁手的组合其实是lsblk -f开局fdisk -l /dev/sda看分区表类型真碰上盘认不出来再hwinfo --disk兜底。服务器上实在想看图形界面就开 Cockpit。这四样东西各有分工没有谁能完全替代谁熟练了之后你也能一眼判断当前问题该交给哪个命令。