SATA Q&A
Q1: 如何测量硬盘读写速度?
用命令测试一下磁盘性能,下面介绍两个常用命令:
Hdparm
用法如下:
Hdparm --t /dev/sda
dd
dd 指令 主要是对整个HD进行测试,而不是partition。
dd if=/dev/zero of=/dev/sda bs=4k count=1000000
两个命令的差别:
在测试HD IO performance ,建议用 "hdparm" 比用 dd 好,減少误判狀況 。
不建议dd 对 partition 操作,若是 dd partition 会有不准的情况。
使用举例如下:
测试sda
测试它的分区sda1
测试sda节点,两者的速度差了15M左右。而测试它的分区sda1,两者差了50M左右了。
dd命令只是对速度进行简单的评估,但如果要测比较准确的测试,还是建议使用Hdparm工具来测吧。
Q2: 硬盘disk在运行过程中出现问题,重启以后再也无法识别,但是使用工具在pc上是可以识别的,第一次出现问题时打印日志如下,这是什么问题?
从日志看,SATA已经读取硬盘失败了,而且retry了5次都是失败的,说明硬盘确实已经无法操作了,导致硬盘出现问题的情况比较多,典型的是:硬盘高速运行期间,磁盘发生震荡,或强制拔掉硬盘的电源线或数据线,或者外部供电不稳定,导致的硬盘操作io异常。
第一个要重点注意的就是,保证硬盘的外部环境正常,不要在运行期间,随意的移动硬盘。
第二个就是排查电路,是否供电正常。
因为pc上还可以识别,排除物理性的损坏,所以,不是运行期间震荡或者拔线导致的。
然后排查电路,用硬件工具排查一下,看sata供电是否正常,是否稳定。如果电流长期在硬盘工作需求之下,有可能当时不会出问题,但运行一段时间就会出现题中所述的这种情况。
把电源换成6A的电源,继续煲机一周,没再出现该问题。
所以,最终确认该问题为硬盘供电电流不足导致的异常。
解决方案: 电源长期供电不足会导致硬盘异常。需要找硬件设计的确定硬盘能获取到多少电流,是否能满足硬盘电流需求,然后换一个合适的供电电源,以确保硬盘供电正常。
Q3:APP对硬盘节点进行操作后(如格式化),出现读取不到硬盘的节点(ex: /dev/sda1)的问题
如果出现这种情况,请用命令试一下 mdev -s
如果使用命令后,能出现相应的节点,可以将该命令写入到程序中。
Q4:如何查看查看HD相关信息?
使用smartctl命令:
-
使能SMART support的指令:
./smartctl --smart=on /dev/sda
-
查看HD温度:
./smartctl -a /dev/sda -s on
-
查看HD 全部信息: (这个最全) ,整颗HD好坏,这个信息最准
./smartctl -i /dev/sda
Q5:我们系统是否支持2T以上的硬盘?
支持,默认系统已经开启。
如果没有开启,请确认kernel编译时(make menuconfig)是否有打开以下两个选项:
同时配置make依赖的配置文件也要修改支持,配置:CONFIG_LBDAF=y,例如使用配置文件:mercury6_ssc016a_s01a_spinand_defconfig,配置如下:
然后再make config,重新编译烧写替换。
此外,2T以上的硬盘,不要使用MBR进行分区,请使用gpt方式进行分区。
Q6:使用fdisk -l命令查看硬盘信息,发现2T以上的硬盘识别成2T容量,如下图
fdisk命令只能对2T的硬盘进行操作,超过2T的是识别不到的,也无法进行分区操作;属于工具的限制。
可以使用parted工具进行操作,parted命令查看正常,如下图:
Q7: 使用dd命令测试硬盘写的速率时,与磁盘的实际速度相差太大(50Mbps以上),磁盘读写命令:dd if=/dev/zero of=/dev/sda count=50000 bs=64000
在写磁盘数据时,要注意对齐,一次写入的数据(bs)最好是4k的整数倍,可以将题中的读写命令改为:dd if=/dev/zero of=/dev/sda count=50000 bs=64k
,再进行测试。
使用上述命令及修改后的命令测试,在demo板上测试情况如下:
使用64k速度明显大幅提升。
Q8:如何修改sata速率?
在 kernel\arch\arm64\boot\dts\sstar\infinity7.dtsi 文件中sata节点 phy_mode进行修改:
phy_mode = <0>; 表示 1.5 Gbps
phy_mode = <1>; 表示 3.0 Gbps
phy_mode = <2>; 表示 6.0 Gbps
例如:如下设定表示sata速率是 6.0 Gbps。
sata { ... ... phy_mode = <2>; ... ... };
Q9:创建raid5后,可以只做resync,不做recovery吗?
在创建raid5时,一般不需要做recovery,如果是直接使用命令mdadm进行创建的,可以添加–force命令,这样就只做resync,不做recovery了。
Q10:raid5在recovery时,此时读写效率比较低,怎么样提高读写速率呢?
可以降低recovery的读写速率,使用命令进行设置:
sysctl -w dev.raid.speed_limit_max=30000
设置后,recovery的速率就变成了30MBps(默认200MBps),此时进行读写操作,影响就会比较小。
设置值的大小,需要按照实际情况进行调整。
Q11:创建raid5,可以用不同容量的盘进行组建吗?
可以。
但是建议使用相同的容量的盘,因为如果容量不一样,总的的容量不是简单的所有盘容量的相加,而是所有的盘都会按照最小的盘的容量进行组合,而多余的那部分则没法使用,造成浪费。