1. 格式化前先搞清楚这几件事接到一台机器,客户说数据盘满了,想要重新格式化,我第一句话永远都是:数据备份了吗?这不是客套,是血泪教训。Linux下格式化硬盘这个操作,新手看起来就是一条mkfs.ext4 /dev/sdb的事,但实际上踩过坑的人都知道,真正难的从来不是那一条命令,而是格式化之前和之后的那些细节。你说它难吗?真不难。但你如果没想清楚下面几个问题就动手,轻则分区表写错、文件系统类型选错,重则把系统盘当成数据盘给抹了,那可就真的欲哭无泪了。所以我把这个主题拆成一条完整的链路:从确认设备、规划分区、选择文件系统、执行格式化,到挂载配置和常见故障排查,每一步我都会把背后的原理和取舍逻辑讲清楚,不是单纯把命令抄给你,而是让你知道为什么这么做。这篇文章适合谁?适合刚接触Linux服务器运维、准备自己动手给机器加数据盘、或者遇到“硬盘不识别/需要重新分区”这类问题的朋友。哪怕你之前对格式化一无所知,照着这个流程走完,也能心里有底。已经有一定经验的老手,也可以重点看看第4节和第5节,里面有几个坑我敢说大多数人第一次都踩过。在开始操作之前,有一个原则必须先立住:任何格式化操作都是毁灭性的。格式化会抹掉设备上的所有数据,没有后悔药。下面我就从确认设备这一步开始,把完整流程一步步拆给你看。1.1 先确认你要格式化的是哪块盘这一步看起来多余,但恰恰是事故率最高的环节。很多人一进终端就是lsblk看一眼,然后凭记忆判断“sdb应该是数据盘”,结果sdb其实是另一个系统分区,或者机器上有两块一样的盘,搞混了就麻烦了。我自己的习惯是,动手之前至少用三条命令交叉确认:lsblk blkid lsscsilsblk看的是块设备的层级关系,能一眼看出每块盘的分区情况和挂载点;blkid看的是设备上的文件系统类型和UUID;lsscsi看的是物理设备的SCSI信息,像磁盘型号、序列号这些。然后还要对照/dev/disk/by-id/目录,这里能看到带厂商和序列号的设备链接,用来区分多块同型号硬盘最稳。比如:ls -l /dev/disk/by-id/你能看到类似ata-INTEL_SSDSC2BB800G8_BTCD404 SOMETHING这样的名字,这个就是你物理硬盘的唯一标识。比对一下序列号和机器上贴的标签,确认无误再动手,这个习惯能救你命。另外一个判断要点是:看挂载点。如果某块盘已经挂载到/或者/boot,那绝对不能碰。如果你是在云主机上操作,还要特别注意云厂商的控制台上可能有一块“系统盘”和一块“数据盘”,系统盘的设备名通常是/dev/vda或/dev/sda,数据盘是/dev/vdb、/dev/vdc这类,也要先确认清楚。注意:不要在不确定设备名的情况下执行任何命令,更不要拿dd或者mkfs去试,试错的代价是数据全部丢失。1.2 格式化前必须做的两个动作确认了设备名,接下来就是两个操作:第一,备份数据;第二,卸载分区。备份这个事,我不想多展开,只说一句:如果盘上有业务数据,先拷贝到别处或者做快照,宁可多备份一份也不要有侥幸心理。特别是云主机,在控制台给云盘做快照是非常简单但最有效的保险手段。然后就是卸载。如果这个分区已经挂载,直接格式化通常会失败,因为系统会提示设备忙。卸载命令是:umount /dev/sdb1如果你不确定挂载到哪个目录,可以看df -h或者lsblk的输出。万一提示target is busy,说明有进程正在使用这个挂载点,可以用fuser -m /dev/sdb1查看占用进程,确认没问题后再卸载。还有一个细节:如果这块盘上配了swap分区,格式化之前要用swapoff /dev/sdb2先关掉,否则也会被占用。这些“占坑”的行为不提前处理,后面执行格式化时就会莫名其妙地报错,而且报错信息还特别容易让人误解。2. 分区方案:GPT还是MBR,分区表怎么规划设备确认好、数据搞定之后,第二个决定就是对整块盘做分区规划。很多人格式化失败或者格式化后出现各种别扭问题,根子不在mkfs那一步,而是在分区表的选择和分区大小的规划上。2.1 分区表类型怎么选分区表就是你这块盘的“目录索引”,它决定了系统怎么理解磁盘上的分区结构。目前主流就两种:MBR 和 GPT。MBR 是老标准,最大只支持2TB的磁盘,而且最多只能建4个主分区。想突破4个分区就得用扩展分区+逻辑分区,麻烦且限制多。GPT 是新一代标准,理论上支持超大容量,PB级别都没问题,分区数量也几乎不受限。UEFI引导的系统通常都要求GPT。现在的Linux发行版,两年前装的新机器基本都是GPT了。但如果你的盘是给老机器、老系统、或者一些特殊设备用的,MBR在某些特定兼容场景下还有存在价值。我的建议很直接:除非你有明确的兼容性要求,否则一律用GPT。理由有两点:容量支持无压力,单盘多大都能用;parted和fdisk对GPT的支持都很成熟,不会碰到莫名其妙的坑。实际操作上看一下这块盘当前用的是哪种分区表:fdisk -l /dev/sdb输出的Disk label type字段就是分区表类型。如果是dos,那就是MBR;如果是gpt,那就是GPT。2.2 用 fdisk 还是 partedLinux下分区工具最常用的是fdisk和parted,另外还有一个gdisk,是专门操作GPT的。fdisk的老版本对GPT支持不是太好,容易把GPT盘识别成损坏的MBR,但新版 util-linux 的 fdisk 已经默认支持GPT。我的习惯是:容量小于2TB的盘用fdisk,大于等于2TB的用parted。为什么这样分?因为fdisk是交互式工具,给新手更友好,你用m可以随时查看帮助,不容易误操作。而parted是命令行参数直接操作,写错一个参数可能就真的把分区表搞废了。但parted对超大规模磁盘和GPT的处理更稳重,大容量场景下我比较信赖它。简单说:工具优点适合场景fdisk交互友好、内置帮助完善新手、2TB以下磁盘parted参数化操作、支持GPT/UEFI大容量磁盘、自动化脚本gdisk专为GPT设计纯GPT操作、排查GPT问题如果是新盘,我通常直接用fdisk就够了,几分钟能搞定。下面用一个例子演示。2.3 实际分区操作演示假设我们要把一块/dev/sdb的2TB数据盘分成一个整分区:fdisk /dev/sdb进入交互模式后,按顺序操作:输入g,创建GPT分区表;输入n,新建分区,一路回车使用默认的起始和结束扇区;输入w,写入分区表并退出。结束之后验证一下:lsblk /dev/sdb你应该能看到/dev/sdb1了。如果只是想分一个区,这样操作就完成了。如果要做成多分区,比如一个数据分区一个备份分区,就在n的时候指定起始和结束位置的空间大小,按+500G这种格式输入即可。这里有个特别重要的提醒:分区操作完成后,在一定情况下内核并没有马上重读分区表,尤其是你在系统运行状态下操作一块已经存在过分区表的盘,可能会出现/dev/sdb1不存在的现象。这时候不需要重启,执行下面的命令让内核重新读取:partprobe /dev/sdbpartprobe是让内核重新识别分区表的工具,能解决大部分“分区建了但看不到”的问题。3. 文件系统选型与格式化实操分区搞定了,下面就是重头戏:格式化,也就是创建文件系统。这一步要做两个决定:用什么文件系统类型,以及用什么参数。3.1 文件系统类型怎么选Linux下常用的文件系统有这么几种:ext4、xfs、btrfs,还有比较新的f2fs(主要给闪存用)。ext4:最老牌、最稳,兼容性最好。几乎所有Linux发行版默认都支持,出问题也好修复。适合通用场景,比如系统盘、普通数据盘。xfs:高性能大文件读写是其强项,特别适合大容量数据存储、数据库文件目录这类场景。RHEL系、一些云服务器的默认数据盘文件系统就是xfs。它最大的坑是:缩容极难,只能扩大不能缩小(或者说缩小非常麻烦)。btrfs:功能多,支持快照、压缩、校验和,适合做复杂存储,但对新手来说坑也比较多,日常普通使用没有必要选它。如果你不想想太多,我给的默认答案就是:小容量盘和通用场景用 ext4,大容量数据盘和性能敏感场景用 xfs。这个组合在业界经过了最广泛的验证,不会出幺蛾子。顺便说一个查看当前系统支持哪些文件系统的办法:cat /proc/filesystems比如里面列了ext4、xfs、btrfs、vfat等。如果你需要兼容Windows和Linux双系统访问的U盘,那就要选vfat(即FAT32)或者exFAT,这个不在我们服务器场景的讨论范围内。3.2 mkfs 命令实操创建文件系统的命令就是mkfs,它有很多家族成员:mkfs.ext4、mkfs.xfs、mkfs.btrfs。命令本身非常简单:mkfs.ext4 /dev/sdb1或者:mkfs.xfs /dev/sdb1但直接执行这个有个小隐患:如果/dev/sdb1上已经存在文件系统,mkfs会询问你确认,有些脚本场景下会卡住。这时可以用-F强制,但我不建议一开始就这么干,手动操作时多个确认反而是好事。mkfs.ext4 -F /dev/sdb1格式化的过程中,终端会刷一些进度信息,等它回到命令行提示符,文件系统就创建好了。接着用blkid验证:blkid /dev/sdb1输出里会看到TYPE="ext4"或者TYPE="xfs",以及一串UUID。这个UUID就是这块文件系统的唯一身份标识,后面配置开机自动挂载时要用。3.3 几个值得加的参数如果你只是跑一条裸命令能用,但生产环境里我通常建议加几个参数,尤其是ext4:mkfs.ext4 -L data_disk -m 1 -T largefile /dev/sdb1这里的含义:-L data_disk:给这个文件系统打一个卷标,叫data_disk。卷标可以用blkid或者e2label查看,管理多块盘时非常方便。-m 1:把保留给root用户的空间比例从默认的5%降为1%。默认5%的意思是,一个1TB的盘,格式化完会“少掉”50GB,root保留用。如果是纯数据盘,这个5%纯属浪费,设成1%就能多出4%的可用空间。-T largefile:告诉mkfs这个文件系统预期存储大文件,会适当调整inode数量——大文件数量多的时候,默认inode会太多用不完,浪费空间。xfs的参数相对少一些,我一般加-L卷标就够了:mkfs.xfs -L data_disk /dev/sdb1如果你是给SSD建文件系统,建议留意一下基础对齐问题。用fdisk建分区时,默认起始扇区已经是1MiB对齐了,不需要特别设置。这一点老教程里经常不写,但如果你用的系统和内核比较老,或者用了一些不规范的脚本分区,对齐出问题会直接导致性能严重下降。后面第5节我再细说。4. 挂载与开机自动挂载配置格式化完成并不等于这块盘能用了,你还需要把它挂载到某个目录,Linux系统才能往里写数据。4.1 手动挂载先建一个目录作为挂载点:mkdir -p /data mount /dev/sdb1 /datamount之后用df -h检查,你应该能看到/dev/sdb1挂载到了/data。如果这一步报错,最常见的原因是文件系统类型识别错误,比如你格的是xfs,但没指定-t xfs,系统自动识别应该没问题,但遇到老内核就可能失败。稳妥做法是:mount -t ext4 /dev/sdb1 /data手动挂载的问题是:重启机器之后它就失效了,你还得再来一次。所以接下来要配置开机自动挂载。4.2 修改 /etc/fstab 的正确姿势持久化挂载要改/etc/fstab文件。这个文件里每一行是一个挂载配置,格式是:设备标识 挂载点 文件系统类型 挂载选项 是否dump 是否fsck我强烈建议是用UUID而不是设备名,因为设备名可能在重启之后发生变化(比如新插了一块盘,原来的sdb可能变成sdc),而UUID是跟着文件系统走的,不会变。先用blkid查到UUID:blkid /dev/sdb1假设返回UUID="4a2f2afe-7aa0-4c2f-bd53-ae5c1234abcd" TYPE="ext4",那在/etc/fstab里追加一行:UUID=4a2f2afe-7aa0-4c2f-bd53-ae5c1234abcd /data ext4 defaults 0 2如果文件系统是xfs,最后那个检查数字建议写成 0,因为xfs不参与常规fsck:UUID=4a2f2afe-7aa0-4c2f-bd53-ae5c1234abcd /data xfs defaults 0 0关于挂载选项,defaults已经包含rw,suid,dev,exec,auto,nouser,async这些常用组合。数据盘我会额外加一个noatime,意思是访问文件时不去更新时间戳,减少写入频率,对SSD和机械盘都有轻微的性能提升:UUID=... /data ext4 defaults,noatime 0 2改完这个文件,千万别直接重启来验证,那样太慢了。用下面这个命令校验配置是否正确:mount -a这个命令会重新读取/etc/fstab并挂载所有尚未挂载的分区。如果配置有问题,它会立刻报错,而且不会等重启才暴露。这是我一直强调的做法:改fstab后第一时间用 mount -a 验证,不要盲目重启。注意:fstab配置写错是启动崩溃的经典原因。最常见的坑是UUID写错了一个字母,或者文件系统类型不匹配,导致开机时挂载失败进入emergency mode。如果出现了这种情况,在emergency模式下手动修正/etc/fstab即可。5. 常见问题、性能优化与避坑心得到这一步,基本流程已经走完。但真正让一篇博文有价值的地方,是那些你不会在官方文档里看到的坑和排查思路。我把我这些年遇到的高频问题做一个汇总。5.1 常见问题速查现象原因解决办法mkfs提示设备忙分区已挂载或swap在使用umount或swapoff,必要时fuser -m查占用分区之后/dev/sdb1不存在内核未重新读取分区表执行partprobe /dev/sdbblkid看不到UUID设备未正确格式化重新mkfs,用blkid -p /dev/sdb1强制读取挂载后内容为空或异常文件系统损坏或选错类型fsck检查文件系统,确认mount -t类型fstab配错导致开不了机UUID或格式错误进入紧急模式修复fstab后重启df -h显示容量偏小文件系统保留块太多或对齐问题ext4用-m 1重新格式化;检查分区起始扇区是否1MiB对齐格式化整块盘总失败盘上有旧分区表或正在使用清空分区表wipefs -a /dev/sdb后重新分区无法向挂载点写入权限或SELinux上下文问题检查目录权限;用chmod或调整SELinux策略这里特别想说一个命令:wipefs。如果你拿到一块旧盘,上面有历史分区表或文件系统残留,直接fdisk分区会报一些很奇怪的错。用wipefs -a /dev/sdb可以干净地擦除这个设备上的签名,然后再分区格式化就清爽了。注意wipefs也是毁灭性的,先确认设备名再执行。5.2 关于对齐和性能的几个实操点硬盘格式化之后性能好不好,很多时候在分区阶段就决定了。SSD和高级格式化的4K机械盘,都要求分区起始扇区对齐到1MiB,否则跨物理扇区读写,性能直接腰斩。用fdisk交互式分区时,默认值就是对齐好的。但如果你用老版本parted或者自己手工指定扇区起始位置,就容易出问题。怎么检查是否对齐?看起始扇区能不能被2048整除:fdisk -l /dev/sdb输出里Start这一列如果是2048、4096这种数字,就是对齐的。如果看到一个像63这样的数字(老MBR的默认起始),那基本没对齐。重新分一次区就行,分区表错了改起来成本最小。另一个和性能相关的点是TRIM,这主要针对SSD。格式化的时候最好加上discard相关支持。对ext4,可以直接挂载时用discard选项,或者用fstrim定时任务来自动回收。现在的系统普遍推荐用fstrim而不是挂载时带discard,因为实时discard在某些场景下反而影响性能。简单说:fstrim -v /data如果是云主机,大多数云盘的底层已经做了空间回收,这个可以不折腾。5.3 数据盘到底要不要做swap分区最后说一个经常被问到的问题:格式化数据盘时要不要顺便分一个swap区?我的看法是:现在内存普遍够大,swap一般不是必需品。但如果你跑的是一些内存敏感的任务,比如编译、跑容器、或者启动一些吃内存的中间件,在磁盘上留4到8GB的swap备用还是有意义的。做法是单独分一个小分区,比如/dev/sdb2,然后:mkswap /dev/sdb2 swapon /dev/sdb2同样,持久化配置要写到/etc/fstab,这行的类型是swap。如果不想单独占分区,也可以直接用一个swap文件,看个人习惯。不过提醒一句:如果你的数据盘是高延迟的机械盘,swap反复读写会拖累整体性能,多买点内存才是正经事。6. 给新手的完整实操复盘最后我用一个最典型的场景,把整个流程串一遍,你照着操作基本不会出错。场景:一台Linux服务器,加了一块2TB的云数据盘,设备名/dev/vdb,我要把它格式化成xfs并挂载到/data。第一步,确认设备:lsblk看到/dev/vdb确实存在,没有挂载点,大小是2T。这就放心了。第二步,备份检查。新盘不需要备份,但还是用blkid /dev/vdb看了一眼,没有任何输出,代表上面没有文件系统。第三步,分区:fdisk /dev/vdb交互里输入g(新建GPT分区表),n(新建分区),回车默认全盘容量,最后w写盘。执行partprobe /dev/vdb让内核识别新分区,再lsblk确认多了/dev/vdb1。第四步,格式化:mkfs.xfs -L data_disk /dev/vdb1执行完之后blkid /dev/vdb1查看UUID和文件系统类型。第五步,挂载:mkdir -p /data mount /dev/vdb1 /data df -h看到/data挂载成功,总容量正确。第六步,配置开机自动挂载。用blkid拿到UUID,编辑/etc/fstab,加一行:UUID=那个长长的字符串 /data xfs defaults,noatime 0 0然后执行mount -a验证fstab配置没问题。至此,这块盘就能正常使用了。整个流程看起来步骤不多,但每一步背后的判断和隐藏的坑,我在前面都展开了。你以后不管碰到什么盘、什么系统,只要先把“确认设备 → 备份 → 分区 → 格式化 → 挂载 → 持久化”这条链路记在心里,再遇到问题就不会慌。我在实际运维中还有一个习惯,就是每次格式化之前,都会在终端里先敲一行date,记录一下当前时间,然后在做完所有操作之后再敲一次history | tail -20看一眼关键命令有没有敲错。这个习惯看起来没什么技术含量,但它能帮你复盘整个操作过程,尤其是在多台机器并行操作的时候,一份清晰的操作记录比什么文档都管用。格式化这件事,从来不是命令复杂,而是心要细。
1. 格式化前先搞清楚这几件事接到一台机器,客户说数据盘满了,想要重新格式化,我第一句话永远都是:数据备份了吗?这不是客套,是血泪教训。Linux下格式化硬盘这个操作,新手看起来就是一条mkfs.ext4 /dev/sdb的事,但实际上踩过坑的人都知道,真正难的从来不是那一条命令,而是格式化之前和之后的那些细节。你说它难吗?真不难。但你如果没想清楚下面几个问题就动手,轻则分区表写错、文件系统类型选错,重则把系统盘当成数据盘给抹了,那可就真的欲哭无泪了。所以我把这个主题拆成一条完整的链路:从确认设备、规划分区、选择文件系统、执行格式化,到挂载配置和常见故障排查,每一步我都会把背后的原理和取舍逻辑讲清楚,不是单纯把命令抄给你,而是让你知道为什么这么做。这篇文章适合谁?适合刚接触Linux服务器运维、准备自己动手给机器加数据盘、或者遇到“硬盘不识别/需要重新分区”这类问题的朋友。哪怕你之前对格式化一无所知,照着这个流程走完,也能心里有底。已经有一定经验的老手,也可以重点看看第4节和第5节,里面有几个坑我敢说大多数人第一次都踩过。在开始操作之前,有一个原则必须先立住:任何格式化操作都是毁灭性的。格式化会抹掉设备上的所有数据,没有后悔药。下面我就从确认设备这一步开始,把完整流程一步步拆给你看。1.1 先确认你要格式化的是哪块盘这一步看起来多余,但恰恰是事故率最高的环节。很多人一进终端就是lsblk看一眼,然后凭记忆判断“sdb应该是数据盘”,结果sdb其实是另一个系统分区,或者机器上有两块一样的盘,搞混了就麻烦了。我自己的习惯是,动手之前至少用三条命令交叉确认:lsblk blkid lsscsilsblk看的是块设备的层级关系,能一眼看出每块盘的分区情况和挂载点;blkid看的是设备上的文件系统类型和UUID;lsscsi看的是物理设备的SCSI信息,像磁盘型号、序列号这些。然后还要对照/dev/disk/by-id/目录,这里能看到带厂商和序列号的设备链接,用来区分多块同型号硬盘最稳。比如:ls -l /dev/disk/by-id/你能看到类似ata-INTEL_SSDSC2BB800G8_BTCD404 SOMETHING这样的名字,这个就是你物理硬盘的唯一标识。比对一下序列号和机器上贴的标签,确认无误再动手,这个习惯能救你命。另外一个判断要点是:看挂载点。如果某块盘已经挂载到/或者/boot,那绝对不能碰。如果你是在云主机上操作,还要特别注意云厂商的控制台上可能有一块“系统盘”和一块“数据盘”,系统盘的设备名通常是/dev/vda或/dev/sda,数据盘是/dev/vdb、/dev/vdc这类,也要先确认清楚。注意:不要在不确定设备名的情况下执行任何命令,更不要拿dd或者mkfs去试,试错的代价是数据全部丢失。1.2 格式化前必须做的两个动作确认了设备名,接下来就是两个操作:第一,备份数据;第二,卸载分区。备份这个事,我不想多展开,只说一句:如果盘上有业务数据,先拷贝到别处或者做快照,宁可多备份一份也不要有侥幸心理。特别是云主机,在控制台给云盘做快照是非常简单但最有效的保险手段。然后就是卸载。如果这个分区已经挂载,直接格式化通常会失败,因为系统会提示设备忙。卸载命令是:umount /dev/sdb1如果你不确定挂载到哪个目录,可以看df -h或者lsblk的输出。万一提示target is busy,说明有进程正在使用这个挂载点,可以用fuser -m /dev/sdb1查看占用进程,确认没问题后再卸载。还有一个细节:如果这块盘上配了swap分区,格式化之前要用swapoff /dev/sdb2先关掉,否则也会被占用。这些“占坑”的行为不提前处理,后面执行格式化时就会莫名其妙地报错,而且报错信息还特别容易让人误解。2. 分区方案:GPT还是MBR,分区表怎么规划设备确认好、数据搞定之后,第二个决定就是对整块盘做分区规划。很多人格式化失败或者格式化后出现各种别扭问题,根子不在mkfs那一步,而是在分区表的选择和分区大小的规划上。2.1 分区表类型怎么选分区表就是你这块盘的“目录索引”,它决定了系统怎么理解磁盘上的分区结构。目前主流就两种:MBR 和 GPT。MBR 是老标准,最大只支持2TB的磁盘,而且最多只能建4个主分区。想突破4个分区就得用扩展分区+逻辑分区,麻烦且限制多。GPT 是新一代标准,理论上支持超大容量,PB级别都没问题,分区数量也几乎不受限。UEFI引导的系统通常都要求GPT。现在的Linux发行版,两年前装的新机器基本都是GPT了。但如果你的盘是给老机器、老系统、或者一些特殊设备用的,MBR在某些特定兼容场景下还有存在价值。我的建议很直接:除非你有明确的兼容性要求,否则一律用GPT。理由有两点:容量支持无压力,单盘多大都能用;parted和fdisk对GPT的支持都很成熟,不会碰到莫名其妙的坑。实际操作上看一下这块盘当前用的是哪种分区表:fdisk -l /dev/sdb输出的Disk label type字段就是分区表类型。如果是dos,那就是MBR;如果是gpt,那就是GPT。2.2 用 fdisk 还是 partedLinux下分区工具最常用的是fdisk和parted,另外还有一个gdisk,是专门操作GPT的。fdisk的老版本对GPT支持不是太好,容易把GPT盘识别成损坏的MBR,但新版 util-linux 的 fdisk 已经默认支持GPT。我的习惯是:容量小于2TB的盘用fdisk,大于等于2TB的用parted。为什么这样分?因为fdisk是交互式工具,给新手更友好,你用m可以随时查看帮助,不容易误操作。而parted是命令行参数直接操作,写错一个参数可能就真的把分区表搞废了。但parted对超大规模磁盘和GPT的处理更稳重,大容量场景下我比较信赖它。简单说:工具优点适合场景fdisk交互友好、内置帮助完善新手、2TB以下磁盘parted参数化操作、支持GPT/UEFI大容量磁盘、自动化脚本gdisk专为GPT设计纯GPT操作、排查GPT问题如果是新盘,我通常直接用fdisk就够了,几分钟能搞定。下面用一个例子演示。2.3 实际分区操作演示假设我们要把一块/dev/sdb的2TB数据盘分成一个整分区:fdisk /dev/sdb进入交互模式后,按顺序操作:输入g,创建GPT分区表;输入n,新建分区,一路回车使用默认的起始和结束扇区;输入w,写入分区表并退出。结束之后验证一下:lsblk /dev/sdb你应该能看到/dev/sdb1了。如果只是想分一个区,这样操作就完成了。如果要做成多分区,比如一个数据分区一个备份分区,就在n的时候指定起始和结束位置的空间大小,按+500G这种格式输入即可。这里有个特别重要的提醒:分区操作完成后,在一定情况下内核并没有马上重读分区表,尤其是你在系统运行状态下操作一块已经存在过分区表的盘,可能会出现/dev/sdb1不存在的现象。这时候不需要重启,执行下面的命令让内核重新读取:partprobe /dev/sdbpartprobe是让内核重新识别分区表的工具,能解决大部分“分区建了但看不到”的问题。3. 文件系统选型与格式化实操分区搞定了,下面就是重头戏:格式化,也就是创建文件系统。这一步要做两个决定:用什么文件系统类型,以及用什么参数。3.1 文件系统类型怎么选Linux下常用的文件系统有这么几种:ext4、xfs、btrfs,还有比较新的f2fs(主要给闪存用)。ext4:最老牌、最稳,兼容性最好。几乎所有Linux发行版默认都支持,出问题也好修复。适合通用场景,比如系统盘、普通数据盘。xfs:高性能大文件读写是其强项,特别适合大容量数据存储、数据库文件目录这类场景。RHEL系、一些云服务器的默认数据盘文件系统就是xfs。它最大的坑是:缩容极难,只能扩大不能缩小(或者说缩小非常麻烦)。btrfs:功能多,支持快照、压缩、校验和,适合做复杂存储,但对新手来说坑也比较多,日常普通使用没有必要选它。如果你不想想太多,我给的默认答案就是:小容量盘和通用场景用 ext4,大容量数据盘和性能敏感场景用 xfs。这个组合在业界经过了最广泛的验证,不会出幺蛾子。顺便说一个查看当前系统支持哪些文件系统的办法:cat /proc/filesystems比如里面列了ext4、xfs、btrfs、vfat等。如果你需要兼容Windows和Linux双系统访问的U盘,那就要选vfat(即FAT32)或者exFAT,这个不在我们服务器场景的讨论范围内。3.2 mkfs 命令实操创建文件系统的命令就是mkfs,它有很多家族成员:mkfs.ext4、mkfs.xfs、mkfs.btrfs。命令本身非常简单:mkfs.ext4 /dev/sdb1或者:mkfs.xfs /dev/sdb1但直接执行这个有个小隐患:如果/dev/sdb1上已经存在文件系统,mkfs会询问你确认,有些脚本场景下会卡住。这时可以用-F强制,但我不建议一开始就这么干,手动操作时多个确认反而是好事。mkfs.ext4 -F /dev/sdb1格式化的过程中,终端会刷一些进度信息,等它回到命令行提示符,文件系统就创建好了。接着用blkid验证:blkid /dev/sdb1输出里会看到TYPE="ext4"或者TYPE="xfs",以及一串UUID。这个UUID就是这块文件系统的唯一身份标识,后面配置开机自动挂载时要用。3.3 几个值得加的参数如果你只是跑一条裸命令能用,但生产环境里我通常建议加几个参数,尤其是ext4:mkfs.ext4 -L data_disk -m 1 -T largefile /dev/sdb1这里的含义:-L data_disk:给这个文件系统打一个卷标,叫data_disk。卷标可以用blkid或者e2label查看,管理多块盘时非常方便。-m 1:把保留给root用户的空间比例从默认的5%降为1%。默认5%的意思是,一个1TB的盘,格式化完会“少掉”50GB,root保留用。如果是纯数据盘,这个5%纯属浪费,设成1%就能多出4%的可用空间。-T largefile:告诉mkfs这个文件系统预期存储大文件,会适当调整inode数量——大文件数量多的时候,默认inode会太多用不完,浪费空间。xfs的参数相对少一些,我一般加-L卷标就够了:mkfs.xfs -L data_disk /dev/sdb1如果你是给SSD建文件系统,建议留意一下基础对齐问题。用fdisk建分区时,默认起始扇区已经是1MiB对齐了,不需要特别设置。这一点老教程里经常不写,但如果你用的系统和内核比较老,或者用了一些不规范的脚本分区,对齐出问题会直接导致性能严重下降。后面第5节我再细说。4. 挂载与开机自动挂载配置格式化完成并不等于这块盘能用了,你还需要把它挂载到某个目录,Linux系统才能往里写数据。4.1 手动挂载先建一个目录作为挂载点:mkdir -p /data mount /dev/sdb1 /datamount之后用df -h检查,你应该能看到/dev/sdb1挂载到了/data。如果这一步报错,最常见的原因是文件系统类型识别错误,比如你格的是xfs,但没指定-t xfs,系统自动识别应该没问题,但遇到老内核就可能失败。稳妥做法是:mount -t ext4 /dev/sdb1 /data手动挂载的问题是:重启机器之后它就失效了,你还得再来一次。所以接下来要配置开机自动挂载。4.2 修改 /etc/fstab 的正确姿势持久化挂载要改/etc/fstab文件。这个文件里每一行是一个挂载配置,格式是:设备标识 挂载点 文件系统类型 挂载选项 是否dump 是否fsck我强烈建议是用UUID而不是设备名,因为设备名可能在重启之后发生变化(比如新插了一块盘,原来的sdb可能变成sdc),而UUID是跟着文件系统走的,不会变。先用blkid查到UUID:blkid /dev/sdb1假设返回UUID="4a2f2afe-7aa0-4c2f-bd53-ae5c1234abcd" TYPE="ext4",那在/etc/fstab里追加一行:UUID=4a2f2afe-7aa0-4c2f-bd53-ae5c1234abcd /data ext4 defaults 0 2如果文件系统是xfs,最后那个检查数字建议写成 0,因为xfs不参与常规fsck:UUID=4a2f2afe-7aa0-4c2f-bd53-ae5c1234abcd /data xfs defaults 0 0关于挂载选项,defaults已经包含rw,suid,dev,exec,auto,nouser,async这些常用组合。数据盘我会额外加一个noatime,意思是访问文件时不去更新时间戳,减少写入频率,对SSD和机械盘都有轻微的性能提升:UUID=... /data ext4 defaults,noatime 0 2改完这个文件,千万别直接重启来验证,那样太慢了。用下面这个命令校验配置是否正确:mount -a这个命令会重新读取/etc/fstab并挂载所有尚未挂载的分区。如果配置有问题,它会立刻报错,而且不会等重启才暴露。这是我一直强调的做法:改fstab后第一时间用 mount -a 验证,不要盲目重启。注意:fstab配置写错是启动崩溃的经典原因。最常见的坑是UUID写错了一个字母,或者文件系统类型不匹配,导致开机时挂载失败进入emergency mode。如果出现了这种情况,在emergency模式下手动修正/etc/fstab即可。5. 常见问题、性能优化与避坑心得到这一步,基本流程已经走完。但真正让一篇博文有价值的地方,是那些你不会在官方文档里看到的坑和排查思路。我把我这些年遇到的高频问题做一个汇总。5.1 常见问题速查现象原因解决办法mkfs提示设备忙分区已挂载或swap在使用umount或swapoff,必要时fuser -m查占用分区之后/dev/sdb1不存在内核未重新读取分区表执行partprobe /dev/sdbblkid看不到UUID设备未正确格式化重新mkfs,用blkid -p /dev/sdb1强制读取挂载后内容为空或异常文件系统损坏或选错类型fsck检查文件系统,确认mount -t类型fstab配错导致开不了机UUID或格式错误进入紧急模式修复fstab后重启df -h显示容量偏小文件系统保留块太多或对齐问题ext4用-m 1重新格式化;检查分区起始扇区是否1MiB对齐格式化整块盘总失败盘上有旧分区表或正在使用清空分区表wipefs -a /dev/sdb后重新分区无法向挂载点写入权限或SELinux上下文问题检查目录权限;用chmod或调整SELinux策略这里特别想说一个命令:wipefs。如果你拿到一块旧盘,上面有历史分区表或文件系统残留,直接fdisk分区会报一些很奇怪的错。用wipefs -a /dev/sdb可以干净地擦除这个设备上的签名,然后再分区格式化就清爽了。注意wipefs也是毁灭性的,先确认设备名再执行。5.2 关于对齐和性能的几个实操点硬盘格式化之后性能好不好,很多时候在分区阶段就决定了。SSD和高级格式化的4K机械盘,都要求分区起始扇区对齐到1MiB,否则跨物理扇区读写,性能直接腰斩。用fdisk交互式分区时,默认值就是对齐好的。但如果你用老版本parted或者自己手工指定扇区起始位置,就容易出问题。怎么检查是否对齐?看起始扇区能不能被2048整除:fdisk -l /dev/sdb输出里Start这一列如果是2048、4096这种数字,就是对齐的。如果看到一个像63这样的数字(老MBR的默认起始),那基本没对齐。重新分一次区就行,分区表错了改起来成本最小。另一个和性能相关的点是TRIM,这主要针对SSD。格式化的时候最好加上discard相关支持。对ext4,可以直接挂载时用discard选项,或者用fstrim定时任务来自动回收。现在的系统普遍推荐用fstrim而不是挂载时带discard,因为实时discard在某些场景下反而影响性能。简单说:fstrim -v /data如果是云主机,大多数云盘的底层已经做了空间回收,这个可以不折腾。5.3 数据盘到底要不要做swap分区最后说一个经常被问到的问题:格式化数据盘时要不要顺便分一个swap区?我的看法是:现在内存普遍够大,swap一般不是必需品。但如果你跑的是一些内存敏感的任务,比如编译、跑容器、或者启动一些吃内存的中间件,在磁盘上留4到8GB的swap备用还是有意义的。做法是单独分一个小分区,比如/dev/sdb2,然后:mkswap /dev/sdb2 swapon /dev/sdb2同样,持久化配置要写到/etc/fstab,这行的类型是swap。如果不想单独占分区,也可以直接用一个swap文件,看个人习惯。不过提醒一句:如果你的数据盘是高延迟的机械盘,swap反复读写会拖累整体性能,多买点内存才是正经事。6. 给新手的完整实操复盘最后我用一个最典型的场景,把整个流程串一遍,你照着操作基本不会出错。场景:一台Linux服务器,加了一块2TB的云数据盘,设备名/dev/vdb,我要把它格式化成xfs并挂载到/data。第一步,确认设备:lsblk看到/dev/vdb确实存在,没有挂载点,大小是2T。这就放心了。第二步,备份检查。新盘不需要备份,但还是用blkid /dev/vdb看了一眼,没有任何输出,代表上面没有文件系统。第三步,分区:fdisk /dev/vdb交互里输入g(新建GPT分区表),n(新建分区),回车默认全盘容量,最后w写盘。执行partprobe /dev/vdb让内核识别新分区,再lsblk确认多了/dev/vdb1。第四步,格式化:mkfs.xfs -L data_disk /dev/vdb1执行完之后blkid /dev/vdb1查看UUID和文件系统类型。第五步,挂载:mkdir -p /data mount /dev/vdb1 /data df -h看到/data挂载成功,总容量正确。第六步,配置开机自动挂载。用blkid拿到UUID,编辑/etc/fstab,加一行:UUID=那个长长的字符串 /data xfs defaults,noatime 0 0然后执行mount -a验证fstab配置没问题。至此,这块盘就能正常使用了。整个流程看起来步骤不多,但每一步背后的判断和隐藏的坑,我在前面都展开了。你以后不管碰到什么盘、什么系统,只要先把“确认设备 → 备份 → 分区 → 格式化 → 挂载 → 持久化”这条链路记在心里,再遇到问题就不会慌。我在实际运维中还有一个习惯,就是每次格式化之前,都会在终端里先敲一行date,记录一下当前时间,然后在做完所有操作之后再敲一次history | tail -20看一眼关键命令有没有敲错。这个习惯看起来没什么技术含量,但它能帮你复盘整个操作过程,尤其是在多台机器并行操作的时候,一份清晰的操作记录比什么文档都管用。格式化这件事,从来不是命令复杂,而是心要细。