CentOS 出现 dropped 的磁盘问题定位与修复
一、先确认“dropped”的具体含义
ip -s link、ethtool -S <iface>、journalctl -u NetworkManager -b、ping/traceroute。二、快速定位磁盘与文件系统问题
df -h、find / -xdev -size +100M -ls(定位异常暴涨目录)。dmesg -T | egrep -i "I/O|error|reset|timeout|sda|xfs|ext4";系统日志:journalctl -k -b | tail -n 200。iostat -dxm 2(关注 %util≈100%、await 高、svctm/r_await/w_await 异常)、vmstat 1 10、iotop -oPa(定位进程级I/O占用)。pvs、vgs、lvs、lsblk -f、blkid;必要时 partprobe /dev/sdX 刷新分区表。三、常见场景与对应修复
| 症状 | 可能原因 | 修复要点 |
|---|---|---|
| 文件系统变为只读 | 内核检测到写入错误,触发只读保护 | 1) 先备份:rsync -av /data/ user@backup:/data/backup/ 2) 尝试重挂载:mount -o remount,rw / 3) 失败则进救援模式修复(见下节) |
| 无法启动,提示 XFS/EXT4 错误 | 文件系统不一致或超级块损坏 | 救援模式对相应分区执行修复:XFS 用 xfs_repair /dev/mapper/vg-root(必要时先卸载);EXT4 用 fsck -y /dev/sda1 |
| LVM 卷组/逻辑卷丢失 | 配置变更、磁盘更换、元数据损坏 | 救援模式:vgcfgrestore -f /etc/lvm/backup/<vg> <vg>;pvcreate /dev/sdX;vgchange -ay 激活卷组 |
| 分区表丢失或误删分区 | 误操作、异常关机 | 用 testdisk /dev/sdX 分析并“Write”恢复分区,或“P→C”直接恢复关键文件;完成后 partprobe 并挂载验证 |
| 云盘/虚拟机磁盘扩容后未识别 | 分区未扩展、文件系统未扩容 | 扩展分区后:growpart /dev/vda 1;文件系统扩容:XFS 用 xfs_growfs /mount_point,EXT4 用 resize2fs /dev/sda1 |
以上步骤涉及的救援模式进入、只读重挂载、XFS/EXT4 修复、LVM 元数据恢复与分区恢复,均为 CentOS 常见且安全的处置路径。
四、进入救援模式修复的实操步骤
chroot /mnt/sysimage。umount /dev/mapper/<vg>-<lv>(若已挂载),xfs_repair /dev/mapper/<vg>-<lv>;必要时先 xfs_repair -L(会清日志,谨慎)。fsck -y /dev/sda1(或相应分区)。vgcfgrestore -f /etc/lvm/backup/<vg> <vg>;pvcreate /dev/sdX;vgextend <vg> /dev/sdX;lvextend -l +100%FREE /dev/<vg>/<lv>;随后用 xfs_growfs 或 resize2fs 扩容文件系统。exit → reboot。如仍异常,优先保全数据后更换磁盘或回滚快照再处理。五、修复后的性能与稳定性优化
cat /sys/block/sda/queue/schedulerecho deadline > /sys/block/sda/queue/schedulergrubby --update-kernel=ALL --args="elevator=deadline" && rebootsysctl -w vm.dirty_ratio=10sysctl -w vm.dirty_background_ratio=5sysctl -w vm.dirty_writeback_centisecs=100sysctl -w vm.dirty_expire_centisecs=3000echo 256 > /sys/block/sda/queue/nr_requestsecho 8192 > /sys/block/sda/queue/read_ahead_kbnoatime,nodiratimemount -o discard,defaults /dev/sda1 /data,或使用 fstrim -v /mount_point 定期执行)iostat -dxm 2、iotop -oPa、vmstat 1 10,结合业务高峰做压测与参数回看。