news 2026/10/23 5:33:26

Linux磁盘分区与挂载全攻略:从fdisk到fstab实操详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux磁盘分区与挂载全攻略:从fdisk到fstab实操详解

1. 先搞懂磁盘分区与挂载到底在解决什么问题

很多刚接触Linux的朋友,对“分区”和“挂载”这两个词总是似懂非懂。Windows下装系统时装个盘、分个区,图形界面点几下就完事了。但到了Linux里,突然变成了一堆命令行操作,什么fdisk、mkfs、mount,看着就头大。

我刚开始接触Linux服务器时也栽过不少跟头。有一次要给数据盘扩容,结果在分区阶段就把文件系统搞坏了,幸好是模拟环境才没有造成实际损失。后来踩得坑多了,才慢慢把“分区—格式化—挂载”这套完整流程摸透。这篇文章就专门讲清楚磁盘分区与挂载这件事,从底层原理到实际命令操作,再到常见问题的排查思路,尽量让不同基础的读者都能看懂、用得上。

这套流程是Linux运维和开发都绕不开的基础功底。无论是给服务器加数据盘、给虚拟机扩容,还是自己装的Linux桌面系统磁盘空间不够了,都要靠它来解决。文章会偏向实操,但遇到关键原理我也会解释清楚“为什么这么做”,而不是只给一串能跑的命令。

2. 磁盘分区与文件系统的底层逻辑

2.1 磁盘为什么要分区:从物理盘到逻辑盘

一块磁盘买回来,本质上就是一块能存储数据的硬件。但操作系统不能直接在这块“空盘子”上写文件,需要先做两件事:划分区域(分区)、建立文件系统(格式化)。

分区的作用可以类比成一个大仓库被隔成多个储物间。每个储物间可以单独管理、单独格式化、单独使用。这样做有几个实实在在的好处:

一是数据隔离。系统盘和数据盘分开,万一系统崩溃需要重装,数据盘可以原封不动地保留下来。这也是服务器上最常见的做法——操作系统装在一块小盘上,业务数据放在另一块大盘上。

二是安全边界。不同分区可以分别设置权限、挂载选项,比如某些分区只读挂载,某些分区禁止执行程序,在某些安全要求高的场景下,这种隔离能在系统层面提供多一层防护。

三是容量规划的灵活性。文件系统本身有大小限制,某些老旧的文件系统格式对单分区容量有上限,把磁盘切成多个分区可以绕过这个限制。现代文件系统基本没有这个困扰了,但多分区管理的习惯一直被保留下来。

2.2 分区表的前世今生:MBR与GPT

磁盘划分区域后,需要一个“目录”来记录每个区域从哪里开始、到哪里结束、类型是什么,这个“目录”就是分区表。目前主流的分区表格式是MBR和GPT两种。

MBR(主引导记录)是传统格式,它有个硬性限制:最多只能有4个主分区,而且单分区最大支持约2TB。为了解决超过4个分区的问题,MBR引入了“扩展分区+逻辑分区”的概念,但逻辑分区数量仍然有限。这套机制在今天的大容量磁盘面前,已经显得力不从心。

GPT(GUID分区表)是新一代格式,它弥补了MBR的诸多不足:支持最多128个分区(在Linux下还可以通过修改参数扩大),单分区容量远超2TB限制,还带有冗余分区表头,安全性更高。现在只要磁盘容量超过2TB,或者需要创建超过4个分区,都应该毫不犹豫地选择GPT。

判断一块磁盘当前用的是哪种分区表,在Linux下最直接的办法是执行:

sudo parted /dev/sdb print

输出里会明确写着“Partition Table: gpt”或“Partition Table: msdos”(msdos即MBR)。

2.3 文件系统是什么:格式化后磁盘才“可用”

分区划分好之后,磁盘还只是一块空白区域,不能直接读取文件。必须在分区上建立文件系统,也就是执行格式化操作。文件系统的职责是管理数据的存储位置、文件名、目录结构、权限等。

Linux下常见的文件系统有ext4、xfs、btrfs等。ext4是传统且兼容性最好的选择,几乎所有的Linux发行版都支持它。xfs在高性能和大文件场景下表现优秀,是很多企业级服务器(特别是基于CentOS/RHEL系列的服务器)的默认文件系统。btrfs则支持快照、压缩等高级特性,但相对复杂,生产环境中需要评估后使用。

选择文件系统的几个要点:

  • 追求稳定和通用性,选ext4准没错
  • 大容量、高并发写入的场景可以优先考虑xfs
  • 需要快照、子卷等高级功能时再考虑btrfs

提示:格式化会清空分区上所有数据,执行mkfs命令前一定要反复确认磁盘设备名,这块我见过太多人因为粗心把数据搞没了,后面会专门讲到排查方法。

3. 实操准备:先认识磁盘设备命名规则

3.1 设备名的命名规则:sda、nvme0n1都是什么

Linux里一切皆文件,磁盘设备也不例外。在/dev目录下可以看到系统中所有设备和设备节点。传统SATA/SAS接口的磁盘设备名以sd开头,比如/dev/sda、/dev/sdb,字母从a开始依次递增,对应物理上识别的顺序。需要注意,这个顺序并不代表物理位置,与主板插槽顺序不一定一致。

如今NVMe固态硬盘越来越普及,它的设备命名规则不太一样,一般以nvme开头,例如/dev/nvme0n1、/dev/nvme0n2。命名中第一个数字代表控制器编号,第二个数字代表命名空间编号。

分区后设备名会在原有基础上追加数字,比如/dev/sda1表示sda这块磁盘的第一个分区,/dev/nvme0n1p1则表示nvme0n1的第一个分区,注意nvme分区名中会多一个p字母。这个细节一定要养成习惯,否则很容易写错路径。

3.2 用lsblk查看磁盘和分区拓扑

我工作中最常用的查看命令是lsblk,它能把设备间的关系以树状结构展示出来,一目了然。执行:

lsblk

输出类似:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 49G 0 part / ├─sda3 8:3 0 2G 0 part [SWAP] └─sda4 8:4 0 48G 0 part /data sdb 8:16 0 500G 0 disk └─sdb1 8:17 0 500G 0 part /mnt/data nvme0n1 259:0 0 256G 0 disk └─nvme0n1p1 259:1 0 256G 0 part

MOUNTPOINT列显示了当前挂载点,没有被挂载的分区这一列是空的。lsblk还有一个实用的选项:lsblk -f,它会在输出中额外显示文件系统类型和UUID,写/etc/fstab时需要这些信息,建议后面实操前先跑一下这个命令。

另外一个重要命令是fdisk -l,它能列出所有磁盘及其分区详细信息。注意这个命令需要root权限才能完整输出,普通用户可能什么都看不到。

3.3 模拟环境准备:用虚拟机或云主机练手

实操最忌讳在没有任何备份的生产环境上直接动手。建议用虚拟机软件(比如某款开源虚拟机软件)或者云服务商的临时实例来练手。开一台最小配置的Linux虚拟机,再挂载一块全新的空数据盘,整个分区和挂载流程就能完整演练一遍。

模拟环境的好处是操作错了也无所谓,大胆试错,真实体验每个命令的交互过程。实际维护服务器的时候,这一套流程的熟练程度直接影响干活效率和容错能力。

4. 手把手实操:新磁盘从识别到自动挂载

4.1 新磁盘的三种来源场景

实际操作中,新磁盘的出现大致有三种场景:

一是虚拟机或物理机中插入新硬盘。重启或热插拔后,使用lsblk或dmesg | tail能看到新设备。云服务器场景下,通常在控制台完成挂载后,设备名会在系统内自动出现。

二是把一块旧盘重新利用。此时磁盘上可能有旧数据或旧分区表,需要先清空分区表再重新规划。

三是一块磁盘上还有剩余未分配空间,需要新建分区来使用这部分空间。

下面的流程以“添加一块全新空磁盘”为例,这个场景最典型,其他场景在此基础上稍作变化即可。

4.2 第一步:确认新磁盘的设备名

用lsblk查看当前系统磁盘情况。假设我们看到新出现了一块500G的磁盘,设备名为sdb:

sudo lsblk

如果确认是sdb,后续所有操作都围绕/dev/sdb展开。这里再强调一次:设备名一定要用lsblk和fdisk -l双重确认后再动手,尤其是生产环境。我曾经见过有同事把sda和sdb认反了,一条分区命令下去,系统盘直接报废。

4.3 第二步:用fdisk创建分区

fdisk是最经典的分区工具,交互式操作,新手也能很快上手。对sdb进行分区:

sudo fdisk /dev/sdb

进入交互界面后,按顺序输入:

  1. 输入n创建新分区
  2. 提示partition type时,直接回车选择默认的p(主分区)
  3. 提示Partition number时,回车默认1
  4. 提示First sector时,回车使用默认起始位置
  5. 提示Last sector时,可以输入+200G表示创建200G大小的分区,或者直接回车使用全部可用空间
  6. 输入w保存并退出

整个交互过程大概长这样:

Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Partition number (1-4, default 1): First sector (2048-1048575999, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-1048575999, default 1048575999): +200G Created a new partition 1 of type 'Linux filesystem' and of size 200 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.

分区完成后,系统可能会自动刷新分区表。如果使用partprobe这个命令刷新一下更保险:

sudo partprobe /dev/sdb

此时再运行lsblk,应该能看到/dev/sdb1这个新分区。

4.4 第三步:格式化为ext4文件系统

分区建立好之后要格式化成文件系统。以ext4为例:

sudo mkfs.ext4 /dev/sdb1

执行时会有一次确认提示,输入y继续。过程会输出文件系统创建的详细信息,包括块数、inode数量等。如果想格式化成xfs:

sudo mkfs.xfs /dev/sdb1

格式化之后用lsblk -f查看,就能看到sdb1上的文件系统类型已经从空白变成了ext4(或xfs)。

4.5 第四步:手动挂载并验证

挂载操作本身很简单:

sudo mkdir -p /data sudo mount /dev/sdb1 /data

第一条命令创建挂载点目录,第二条命令把分区挂载上去。挂载完成后用df -h验证:

df -h /data

输出应该能看到sdb1已经挂载到/data上,显示容量、已用、可用等信息。此时进入/data目录,就能像使用普通目录一样读写数据了。

注意:mount命令挂载是临时的,系统重启后挂载关系会丢失。要想重启后自动生效,必须配置/etc/fstab文件,这就是下一步要做的事。

4.6 第五步:配置/etc/fstab实现开机自动挂载

/etc/fstab是Linux系统启动时自动挂载文件系统的配置文件。它的每一行分为六个字段,分别是设备、挂载点、文件系统类型、挂载选项、dump备份标志、文件系统检查顺序。

强烈推荐用UUID而不是设备名来指定设备。设备名在系统启动过程中可能会因为设备识别顺序变化而改变(比如sdb变成sdc),UUID是文件系统创建时生成的唯一标识,不会变化。

用下面命令查UUID:

sudo blkid /dev/sdb1

输出类似:

/dev/sdb1: UUID="1a2b3c4d-5e6f-7890-abcd-ef1234567890" TYPE="ext4"

然后在/etc/fstab末尾追加一行:

UUID=1a2b3c4d-5e6f-7890-abcd-ef1234567890 /data ext4 defaults 0 2

各字段含义:

  • 第一列:设备标识,这里用的是UUID
  • 第二列:挂载点目录
  • 第三列:文件系统类型
  • 第四列:挂载选项,defaults包含了rw、suid、dev、exec、auto、nouser、async这些常见默认选项,适合大多数场景
  • 第五列:是否用dump备份,0表示不备份
  • 第六列:开机时是否用fsck检查文件系统,根分区是1,其他分区建议填2

写完fstab之后,务必验证配置是否正确。执行:

sudo mount -a

这个命令会重新读取fstab中的所有条目并尝试挂载。如果没有报错,再执行reboot重启验证,确保开机后自动挂载正常。fstab配置错误是Linux启动失败的常见原因之一,所以每次改完都建议先用mount -a验证一遍,别直接重启。

5. 分区与文件系统工具的选型对比

5.1 fdisk、parted、gdisk怎么选

分区工具不止一个,实际中用到的有几个:

fdisk是最传统、最常用的工具,交互界面清晰,适合创建和删除MBR分区。对于小于2TB且分区数量不超过4个的场景,fdisk是首选。新版fdisk也支持GPT,但功能相对基础。

parted是另一个强大的分区工具,它是命令行非交互式的,支持脚本化操作,也能在GPT和MBR之间转换。当磁盘大于2TB时,最好用parted来操作GPT分区表。例如:

sudo parted /dev/sdb mklabel gpt sudo parted /dev/sdb mkpart primary ext4 1MiB 100%

gdisk是专门针对GPT分区表的工具,交互风格和fdisk类似,如果你习惯fdisk的操作方式,又必须处理GPT分区,用gdisk会比较顺手。

实际选择时,核心判断标准就是:磁盘容量是否超过2TB、是否需要超过4个主分区。小盘用fdisk没问题,大盘和复杂分区直接上parted或gdisk。

5.2 mkfs家族:ext4、xfs与btrfs的取舍

格式化工具都是一家人,mkfs.ext4、mkfs.xfs、mkfs.btrfs三个对应不同文件系统。

ext4胜在稳定和兼容性,几乎被所有Linux发行版支持。inode数量、块大小等可以在格式化时通过参数调整,格式化时如果inode数量不足,就容易出现“磁盘容量还有剩,但无法创建新文件”的问题,这在大量小文件场景下尤为常见。

xfs在多核、高并发环境下性能出色,对单个大文件的读写效率很高。CentOS 7及以后版本把xfs作为默认文件系统不是没有理由的。xfs无法缩小,只能扩大,所以分区规划时要留好余量。

btrfs功能最丰富,支持写时复制、快照、子卷、压缩等,适合个人使用或存储服务器,但在某些企业生产环境中兼容性和稳定性还略显保守,是否选用需要结合团队运维能力评估。

5.3 磁盘健康检查:分区前先看清盘的状态

拿到一块旧磁盘时,不要着急分区格式化。建议先用smartctl检查磁盘健康状态,排除硬件潜在故障。对于即将淘汰的坏盘,格式化后写入过程中可能会频繁出错,反而浪费时间。执行:

sudo smartctl -a /dev/sdb

重点看Reallocated_Sector_Ct这个值。如果它不为零且在持续增长,说明磁盘可能存在物理坏道,这样的盘做数据盘风险很高。另外也可以用badblocks命令扫描坏块,但扫描大容量磁盘耗时较长,通常在有异常迹象时才执行。

6. 挂载的进阶细节:不只是mount一个命令

6.1 挂载选项的取舍:defaults、noatime、nosuid

fstab中的mount选项(第四列)是很多人容易忽略的地方。defaults是最常见的默认选项,它包含了rw、suid、dev、exec、auto、nouser、async。对大多数数据盘来说,defaults已经够用。

但在某些特定场景下,建议调整挂载选项:

noatime是一个值得加上的选项。Linux默认在每次文件读取时更新访问时间戳(atime),这会带来额外的磁盘写入开销。加上noatime后,系统不再更新atime,能显著减少写放大,延长SSD寿命,提升小文件读取性能。对于大部分数据盘,建议直接加上noatime。

nosuid和nodev是安全增强选项。nosuid表示该分区上的suid和sgid位无效,nodev表示不解析该分区上的设备文件。对挂载到/home、/var等目录的分区,加上这两个选项能在用户上传文件等场景降低提权风险。

举例,/data分区的推荐fstab行可以是:

UUID=... /data ext4 defaults,noatime,nosuid,nodev 0 2

还有一个noexec选项,表示该分区不允许执行任何二进制程序,适合挂载临时目录或上传目录,但如果分区上确实有程序需要执行,就不要加了。

6.2 卸载的最佳实践:busy状态的正确处理

不再需要某个挂载点时,用umount卸载:

sudo umount /data

但如果当前有进程正在使用该目录下的文件,卸载会报错“target is busy”,第一次遇到这个提示可能会有点慌,其实解决办法很直接。

先用lsof或者fuser找出占用该挂载点的进程:

lsof /data

或

fuser -m /data

确认是哪些进程在使用,合理处理后再次umount。如果确实找不到进程,或者进程一时无法结束,可以加-l参数执行强制卸载(懒卸载):

sudo umount -l /data

这种“懒卸载”先把挂载点从命名空间移除,后续等到占用进程退出后才真正完成卸载。但需要注意,强制卸载可能导致正在写入的数据丢失或有未落盘的数据,不到万不得已不建议在生产环境使用。

6.3 挂载网络存储:NFS和CIFS的补充玩法

本地磁盘的挂载讲完了,顺带提一下网络存储的挂载,因为在实际工作中,把NFS共享或者Windows共享挂载到Linux下也是高频操作。

NFS挂载命令:

sudo mount -t nfs 192.168.1.100:/srv/nfs /mnt/nfs

CIFS(即SMB)挂载:

sudo mount -t cifs //192.168.1.100/share /mnt/smb -o username=user,password=pass

网络存储的挂载同样可以写入fstab实现开机自动挂载,但需要注意网络是否可用、服务是否就绪,一般建议加上_netdev选项,系统不会在网络就绪前强行尝试挂载网络文件系统。这类挂载的坑比本地磁盘多,比如超时时间、版本协商等问题,有机会再单独写一篇详聊。

7. 常见问题与排查技巧实录

7.1 fstab写错导致系统启动失败

这是Linux运维中最常见的“自找麻烦”的案例。fstab中设备标识或者挂载选项写错,开机进入emergency mode,系统起不来。一看到这个情况先不要慌,按照以下思路排查:

第一步,输入root密码进入救援模式或emergency mode。

第二步,执行cat /etc/fstab,仔细检查每一行。重点看设备标识是否存在、挂载点目录是否存在、文件系统类型是否正确。

第三步,执行mount -a手动重放挂载逻辑,系统会明确报出错在哪一行、什么原因。

第四步,修改错误配置,可以用nano或vi编辑,也可以先把有问题的行注释掉,恢复系统后再说。

依赖顺序很重要:根分区所在设备不能被其他条目占坑,比如把根分区的设备写错,或者把不在根分区上的设备挂载到某些系统关键目录上,启动都会失败。

7.2 磁盘显示但无法挂载:文件系统损坏的恢复思路

有时候分区表还在,但挂载时报错,提示“wrong fs type”或“superblock corrupted”。这类情况多半是文件系统元数据损坏。专业工具是fsck:

sudo umount /data sudo fsck -y /dev/sdb1

-y参数表示对修复问题直接回答“yes”,也就是自动应用修复。修复完成后尝试重新挂载。这个方法能救回大多数非物理损坏的文件系统。

7.3 dd误操作的挽救:分区表备份与恢复

操作分区表时手抖执行了错误的dd命令,或者用错了设备名,最直接的影响是分区表丢失。如果之前备份过分区表,用sgdisk可以快速恢复:

sudo sgdisk --load-backup=/path/to/backup /dev/sdb

如果没备份,恢复的难度就大了。所以一条核心纪律是:操作分区前先备份分区表。备份命令:

sudo sgdisk --backup=/path/to/backup /dev/sdb

这个动作成本极低,但关键时候能救命。

7.4 挂载点目录有内容导致数据“消失”

一个超级常见的误区:把分区挂载到一个原本有文件的目录上。比如/mnt/data目录下本来有些数据,然后把新分区mount到/mnt/data上面,原目录下的文件就会被“遮住”。实际数据没丢,只是挂载点被新分区覆盖了。

用umount卸载后,原目录里的文件就重新出现了。这个机制叫做“覆盖挂载”,理解之后就不会慌。

如果想挂载后保留原目录里的文件,正确做法是先把原文件复制或移动到新分区,再卸载并重新挂载。

7.5 常见问题速查表

问题现象可能原因解决办法
找不到新磁盘设备驱动未加载或热插拔未识别执行dmesg | tail查看内核日志,必要时重启
分区命令报“No space left”分区表已满(MBR最多4个主分区)改用GPT分区表或删除不必要分区
挂载报“wrong fs type”文件系统错误或未格式化查看blkid /dev/sdb1确认类型,用fsck修复
df显示容量异常小文件系统未占满整分区检查分区大小与文件系统扩展,必要时用resize2fs
系统启动进emergency modefstab配置错误按7.1步骤排查修复
卸载提示target is busy进程占用挂载点用lsof/fuser找到占用进程,处理后卸载

8. 实操心得与后续建议

写到这里,把我实际经验中最重要的几条心得再总结一下。

第一,分区和挂载本身不难,难的是一套规范和流程意识。操作前确认设备名、备份分区表、格式化前再次确认盘符,这些看似繁琐的动作能避免绝大多数的“事故”。我见过太多人因为“这次简单,不需要检查”而付出惨痛代价。

第二,fstab配置是重中之重。每次修改后务必先用mount -a验证,不要直接重启。云服务器如果不小心把fstab写错,有时候还需要通过控制台进入救援模式才能修复,耗时耗力。养成验证习惯,这类问题基本能避免。

第三,养成用UUID替代设备名的习惯。虽然名字冗长,但它是文件系统的身份证,不会因为启动顺序变化而改变。就从第一次挂载开始使用UUID,后面会少很多麻烦。

第四,分区规划时留一些空间余量。尤其在用xfs文件系统时,它无法在线缩小,一旦空间规划保守了,后面扩展只能通过新增分区或者用其他方式解决。相对地,ext4可以缩小但操作也比较麻烦。无论哪种文件系统,先想清楚再动手永远比事后补救高效。

这个主题其实还可以继续往深处延伸:比如LVM逻辑卷管理,可以实现分区动态调整大小,避免固定分区容量的尴尬;再比如inode概念的理解,对inode耗尽问题会有更深刻的认知。我后续也会在相关文章里继续展开这些话题,大家如果实操中遇到具体问题,欢迎在评论区带场景描述留言,我看到了会尽量回复自己的经验和建议。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 5:33:20

Ubuntu 22.04/24.04/26.04换源指南:新旧格式详解与避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 5:32:42

国产芯片破局车规市场:OBC与DCDC的芯片选型与认证实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 5:32:12

调度延迟排查实战:从链路拆解到 p99 性能优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 5:32:10

ADC转换实战经验汇总:从采样原理到精度提升的完整链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 5:31:28

STM32寄存器操作深入浅出:从库函数到底层控制,点灯串口实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 5:31:05

单卡24GB跑35B Agent Team:Int4量化与多智能体协作实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华