1. 认识Linux磁盘管理基础刚接触Linux服务器运维时第一次给服务器加硬盘的经历让我记忆犹新。当时看着新安装的硬盘在系统中消失完全不知道如何让它发挥作用。后来才明白Linux的磁盘管理逻辑与Windows完全不同——它需要我们手动完成从识别到使用的全过程。块设备是Linux对磁盘的抽象表示。当你在服务器上插入新硬盘时系统会为它分配一个设备文件通常位于/dev目录下。传统机械硬盘的命名规则很简单/dev/sda第一块SCSI/SATA硬盘/dev/sdb第二块硬盘/dev/sdc第三块硬盘 以此类推。如果是NVMe固态硬盘命名则是/dev/nvme0n1、/dev/nvme0n2等形式。每个硬盘可以划分为多个分区分区号追加在设备名后。例如/dev/sdb1第二块硬盘的第一个分区/dev/sdb2第二个分区我曾犯过一个典型错误直接对/dev/sdb进行格式化而没有先分区。这导致后续操作全部失败因为大多数文件系统需要基于分区工作。记住这个教训新磁盘必须先分区再格式化。查看磁盘状态的黄金命令是lsblklist block devices的缩写。它用树状结构清晰展示设备关系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 99G 0 part ├─centos-root 253:0 0 50G 0 lvm / └─centos-swap 253:1 0 4G 0 lvm [SWAP] sdb 8:16 0 2T 0 disk这个输出告诉我们sda是100G的系统盘已分成sda1(启动分区)和sda2(LVM物理卷)sdb是新增的2T硬盘尚未分区TYPE字段显示设备是disk(整块硬盘)还是part(分区)2. 分区实战fdisk的深度使用给新磁盘分区就像给新房划分房间。我常用fdisk这个经典工具虽然它交互式界面看起来有些古老但功能非常可靠。以/dev/sdb为例fdisk /dev/sdb进入交互界面后新手建议先按m查看帮助菜单。创建分区的核心步骤是输入n新建分区选择p创建主分区最多4个或e创建扩展分区设置分区号通常选默认值1指定起始扇区直接回车使用默认值设置结束扇区或大小比如500G表示分配500GB关键技巧当需要创建超过4个分区时必须先建一个扩展分区然后在扩展分区内创建逻辑分区。我曾遇到一个存储服务器需要划分12个分区就是靠这个方法实现的。分区方案设计要考虑实际用途。比如数据库服务器建议单独分区给/var/lib/mysql交换分区大小设置为内存的1.5-2倍保留10%空间不分配供后期调整完成分区后必须执行w命令写入更改。这里有个血泪教训有次我分区后忘记写盘就直接断电导致分区表损坏。现在我的习惯是先用p命令预览分区表确认无误后再w保存立即运行partprobe让内核重新读取分区表partprobe /dev/sdb验证分区是否成功lsblk /dev/sdb # 应该显示类似 # sdb 8:16 0 2T 0 disk # └─sdb1 8:17 0 2T 0 part3. 文件系统选择与格式化分区就像毛坯房文件系统则是装修方案。常见的Linux文件系统有文件系统特点适用场景ext4稳定可靠兼容性好通用文件存储XFS高性能支持超大文件数据库、视频处理Btrfs支持快照、压缩需要高级功能的存储ZFS数据完整性保障关键数据存储格式化命令很简单但有几个易错点需要注意# 格式化为ext4-t指定文件系统类型 mkfs -t ext4 /dev/sdb1 # 或者直接使用专用命令 mkfs.ext4 /dev/sdb1 # 格式化为XFS mkfs.xfs /dev/sdb1特别提醒格式化会永久删除分区所有数据务必确认设备名正确大容量硬盘格式化需要时间可以用-T选项显示进度企业级环境建议添加-m 0.5参数只保留0.5%空间给root用户我曾误将mkfs.ext4 /dev/sdb执行成mkfs.ext4 /dev/sda差点酿成灾难。现在每次格式化前都坚持三步确认lsblk查看设备列表blkid确认目标分区无重要数据执行命令前再次检查设备名格式化完成后可以用blkid查看成果blkid /dev/sdb1 # 输出示例 # /dev/sdb1: UUIDd3b12f8e-5a7b-487f-89a2-92a1f2d3e4c5 TYPEext4这个UUID非常重要后续挂载时会用到。相比设备名UUID具有唯一性不会因硬盘插拔顺序变化而改变。4. 挂载的艺术临时与永久配置挂载是将分区链接到目录树的过程。临时挂载很简单mkdir /data # 创建挂载点目录 mount /dev/sdb1 /data # 建立关联但临时挂载有个致命缺点重启后失效。生产环境必须配置永久挂载这就需要编辑/etc/fstab文件。这个文件控制着系统启动时的自动挂载行为格式如下UUIDd3b12f8e... /data ext4 defaults 0 0每个字段的含义设备标识推荐用UUID挂载点目录文件系统类型挂载选项defaults包含rw,suid,dev,exec,auto,nouser,asyncdump备份标志0表示不备份fsck检查顺序0表示不检查经验之谈fstab编辑错误可能导致系统无法启动。我的安全操作流程是先备份原文件cp /etc/fstab /etc/fstab.bak使用vim等可靠编辑器修改保存后执行mount -a测试配置用df -h确认挂载成功如果遇到mount: wrong fs type错误可能是文件系统类型填写错误缺少对应的工具包如xfsprogs、btrfs-progs对于NFS、SMB等网络存储挂载选项更为复杂。比如安全要求高的环境可以添加nosuid,nodev,noexec选项防止执行远程文件。5. 高级技巧与故障排查实际运维中我们经常需要处理更复杂的情况。比如扩容现有分区的步骤用growpart扩展分区边界用resize2fsext4或xfs_growfsXFS调整文件系统验证可用空间df -h数据安全提醒扩容前务必先备份有次我扩容时服务器意外断电导致文件系统损坏。另一个常见需求是移动挂载点。正确做法是umount /old_pathmount /dev/sdb1 /new_path更新/etc/fstab如果遇到device is busy错误表示有进程正在访问该挂载点。可以用lsof或fuser命令找出罪魁祸首lsof D /data # 列出访问/data的进程 fuser -vm /data # 显示更简洁的进程信息对于多硬盘环境建议采用一致的命名方案。比如/data/pgdataPostgreSQL数据库/data/esdataElasticsearch索引/data/backup备份存储这样即使几年后维护也能快速理解存储结构。我在某次数据迁移中就受益于这种规范半小时完成了20TB数据的重组。最后分享一个性能优化技巧对于SSD设备可以在fstab中添加discard选项启用TRIM功能延长使用寿命。但要注意这可能导致轻微性能下降高负载数据库可能需要权衡。