You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

副SSD读取目录树速度极慢问题求助

副SSD读取目录树速度极慢问题求助

问题描述

我有两块SSD,都是近4年购买的,插在主板的SATA接口上,均格式化为ext4格式。当前挂载信息如下:

$ df -h | grep sd
/dev/sda2       916G  130G  740G  15% /
/dev/sdb3       916G  346G  523G  40% /media/olddisk

其中sdb3是我的旧盘,之前是唯一的系统盘(当时识别为sda2)。后来我加装了新SSD作为主盘,把旧盘换到第二个SATA接口,新盘则插在第一个接口上,并安装了全新的Ubuntu 24.04.1 LTS系统。

现在遇到的问题是:从sdb3sda2拷贝单个2GB大文件时速度正常,约2秒就能完成;但拷贝一个包含400个文件、总大小同样为2GB的目录树时,速度却慢得离谱,需要大约3分钟!

经过观察,耗时主要集中在读取sdb3的目录树环节,而非写入sda2。比如单独执行读取该目录树信息的命令,耗时也很长...

排查与解决建议

针对这个问题,我整理了几个实用的排查方向,你可以逐一尝试:

  • 检查磁盘健康状态:先用smartctl -a /dev/sdb查看旧盘的SMART数据,重点关注坏块计数、读写错误、磨损程度这些指标——毕竟是用了几年的老盘,潜在硬件问题可能会影响小文件读取性能。
  • 修复文件系统与碎片整理:ext4长期使用后可能产生碎片,尤其是曾经作为系统盘的旧盘。先确保没有程序在访问sdb3,然后卸载它:sudo umount /media/olddisk,接着执行e2fsck -f /dev/sdb3检查并修复文件系统,完成后重新挂载再测试速度。
  • 调整系统缓存参数:Ubuntu默认的vm.vfs_cache_pressure参数(默认值100)可能对小文件目录的缓存不够友好,你可以临时调低这个值试试:sudo sysctl -w vm.vfs_cache_pressure=50,这个参数调小后,系统会更优先缓存目录和inode信息,可能提升小文件批量读取的效率。如果有效,可以把这个配置写到/etc/sysctl.conf里永久生效。
  • 排查硬件连接问题:虽然单个大文件读取正常,但小文件读取对接口稳定性要求更高。试试把旧盘换到其他SATA接口,或者更换一根SATA线缆,排除接触不良或线缆老化的问题。
  • 换用高效拷贝工具:默认的cp命令在批量小文件拷贝上效率一般,你可以试试rsyncrsync -av --progress /media/olddisk/源目录 /目标目录,或者用tar打包后再传输:tar -cf - /media/olddisk/源目录 | (cd /目标目录 && tar -xf -),这类工具在处理大量小文件时通常更高效。
  • 实时监控IO状态:在拷贝目录树时,用iostat -x 1或者iotop工具实时查看磁盘的IO情况,重点看sdb3%util(设备利用率)和await(IO等待时间),如果这两个指标很高,说明磁盘正在处理大量随机IO等待,能帮你更精准定位问题。

备注:内容来源于stack exchange,提问作者Klitos Kyriacou

火山引擎 最新活动