资讯详情

资讯详情

Linux数据盘格式化实战:设备确认、分区、mkfs与挂载避坑指南

1. 格式化前先搞清楚这几件事接到一台机器客户说数据盘满了想要重新格式化我第一句话永远都是数据备份了吗这不是客套是血泪教训。Linux下格式化硬盘这个操作新手看起来就是一条mkfs.ext4 /dev/sdb的事但实际上踩过坑的人都知道真正难的从来不是那一条命令而是格式化之前和之后的那些细节。你说它难吗真不难。但你如果没想清楚下面几个问题就动手轻则分区表写错、文件系统类型选错重则把系统盘当成数据盘给抹了那可就真的欲哭无泪了。所以我把这个主题拆成一条完整的链路从确认设备、规划分区、选择文件系统、执行格式化到挂载配置和常见故障排查每一步我都会把背后的原理和取舍逻辑讲清楚不是单纯把命令抄给你而是让你知道为什么这么做。这篇文章适合谁适合刚接触Linux服务器运维、准备自己动手给机器加数据盘、或者遇到“硬盘不识别/需要重新分区”这类问题的朋友。哪怕你之前对格式化一无所知照着这个流程走完也能心里有底。已经有一定经验的老手也可以重点看看第4节和第5节里面有几个坑我敢说大多数人第一次都踩过。在开始操作之前有一个原则必须先立住任何格式化操作都是毁灭性的。格式化会抹掉设备上的所有数据没有后悔药。下面我就从确认设备这一步开始把完整流程一步步拆给你看。1.1 先确认你要格式化的是哪块盘这一步看起来多余但恰恰是事故率最高的环节。很多人一进终端就是lsblk看一眼然后凭记忆判断“sdb应该是数据盘”结果sdb其实是另一个系统分区或者机器上有两块一样的盘搞混了就麻烦了。我自己的习惯是动手之前至少用三条命令交叉确认lsblk blkid lsscsilsblk看的是块设备的层级关系能一眼看出每块盘的分区情况和挂载点blkid看的是设备上的文件系统类型和UUIDlsscsi看的是物理设备的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输出里会看到TYPEext4或者TYPExfs以及一串UUID。这个UUID就是这块文件系统的唯一身份标识后面配置开机自动挂载时要用。3.3 几个值得加的参数如果你只是跑一条裸命令能用但生产环境里我通常建议加几个参数尤其是ext4mkfs.ext4 -L data_disk -m 1 -T largefile /dev/sdb1这里的含义-L data_disk给这个文件系统打一个卷标叫data_disk。卷标可以用blkid或者e2label查看管理多块盘时非常方便。-m 1把保留给root用户的空间比例从默认的5%降为1%。默认5%的意思是一个1TB的盘格式化完会“少掉”50GBroot保留用。如果是纯数据盘这个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查到UUIDblkid /dev/sdb1假设返回UUID4a2f2afe-7aa0-4c2f-bd53-ae5c1234abcd TYPEext4那在/etc/fstab里追加一行UUID4a2f2afe-7aa0-4c2f-bd53-ae5c1234abcd /data ext4 defaults 0 2如果文件系统是xfs最后那个检查数字建议写成 0因为xfs不参与常规fsckUUID4a2f2afe-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看一眼关键命令有没有敲错。这个习惯看起来没什么技术含量但它能帮你复盘整个操作过程尤其是在多台机器并行操作的时候一份清晰的操作记录比什么文档都管用。格式化这件事从来不是命令复杂而是心要细。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →