代码改变世界

在linux下成功使用西部数据高级格式化的硬盘

2012-09-24 00:44  游乐场123  阅读(920)  评论(0编辑  收藏  举报

最近购入两个1T的ears 西部数据绿盘。这两个绿盘使用高级格式化,即硬盘扇区大小4096个字节。普通的硬盘扇区大小是512个字节。理论上采用4k字节扇区的硬盘性能会更好,但从google搜索来看,很多人反映西部数据的绿盘存在速度慢、系统卡的问题。
    安装了系统后,不论在windows7 还是 linux 系统确实很卡,每隔一会就卡一下,硬盘红灯一直亮着,系统没反应,直到读完数据。同时用smartctl查看硬盘的load cycle count 值增长很快,才一两个星期就到1万5左右了。而从google搜索来看,西数公开的数据表明硬盘寿命期限内能承受的 load cycle count 的值为30万左右,超过这个值硬盘就很容易损坏,变得不稳定。
    出现问题的原因主要有两个:
一、分区时没有按4k字节对齐。由于硬盘内部实际每次读取是读写4k字节的物理扇区,但是该硬盘却欺骗操作系统,报告给操作系统的物理扇区大小为512字节。换句话说虽然采用高级格式化硬盘,却自动模拟成为非高级格式化硬盘来兼容当前的各种软件。如果分区时没有按4k字节对齐,每次读写4k字节的数据时,硬盘内部实际上需要读写至少两个4k字节的物理扇区,比4k字节对齐的情况至少慢了一半。从而导致访问速度很低。实际上linux是支持4k字节的物理扇区的,但是该款硬盘没有报告真实的物理扇区大小给操作系统,这应该算是这款硬盘最大的问题,可以算作一个bug吧。

二、绿盘具有节能功能,空闲时自动将转速降低,并将磁头移动到启停区域,防止磁头划伤盘片。
       绿盘设置的空闲时间为8秒,也就是空闲8秒钟就会将硬盘速度降低,磁头重置到硬盘的起始启停区域。从而导致系统读取数据时,磁头要加速,并从启停区域移到数据区域,从而导致系统一卡一卡的。尤其是linux系统的日志文件系统,以及日志程序每隔一段时间就要写一次硬盘,从而导致系统很卡,一顿一顿的。同时磁头反复伸出从而导致硬盘的load cycle  count 计数不断增加,导致硬盘在预计两年左右的时间就很快报废。

解决问题的方法:1。分区时按4k字节对齐,要求每个分区的开始扇区从是8的倍数的扇区开始,这样就能保持4k字节对齐。 以 /dev/sdc 为例。
                           分区时 采用   fdisk -H 224 -S 56   -u   /dev/sdc
                        /dev/sdc1   *          64  1953525167   976762552   8e  Linux LVM.
建议第一个分区从64开始。
                           2.建立文件系统时 指定扇区大小为4k。
                          比如对/dev/sda1 建立ext4文件系统  :   mkfs.ext4  -b 4096  -O has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize -I 512  /dev/sda1
                                                    建立xfs 文件系统:  mkfs.xfs  -i size=512  -s size=4096  /dev/sda1
                          具体的其他文件系统的参数请用man 手册查看。

                        3.调节硬盘空闲时间  为1分钟以上。
                             到西数公司主页上下载  wdidle.exe这个工具。该工具只能在纯dos环境下运行。如果你没有纯dos环境的话,利用grub很容易进入纯dos环境。首先要syslinux 的memdisk这个文件。一般发行版都安装又syslinux,如果没有可以到其主页(http://syslinux.zytor.com)下载memdisk这个文件。同时到网络上下载一个dos系统的软盘镜像文件。我下载的是 MSDOS71B.IMG 这个文件,该文件可以用google搜索就能找到。 挂载 MSDOS71B.IMG镜像:
  mkdir /mnt/tmp
  mount -o loop  MSDOS71B.IMG /mnt/tmp  
然后将从西数公司下载的wdidle.exe程序复制到镜像文件里:  
cp  wdile.exe /mnt/tmp
umount /mnt/tmp

将镜像文件   MSDOS71B.IMG  memdisk这两个文件放到 /boot/dos目录下(没有就创建)
,然后修改/boot/grub/menu.lst文件,添加
title freedos  
kernel (hd0,2)/boot/dos/memdisk
initrd (hd0,2)/boot/dos/MSDOS71B.IMG

这里(hd0,2)是我的启动文件所在的分区(我没有单独分boot分区),要根据你硬盘实际分区情况确定。
开机时选择freedos就可以进入纯dos系统了。
  在dos环境里运行
  wdidle.exe 就可以查看硬盘当前默认设置的空闲值。
   wdidle.exe /s   xxxx       命令可以将空闲值设置为xxxx秒。我的硬盘目前设置成2分钟。
  不要用 wdidle.exe  /D 命令  禁止 硬盘的自动节能功能。否则硬盘的load cycle count 值差不多每秒钟涨一次,你的硬盘很快完蛋。

  重启进入linux 后,可以用smartctl --all /dev/sda 命令查看硬盘  /dev/sda的load cycle count 技术及温度值。目前
我的硬盘一切工作正常,系统不再卡,速度也不错,load cycle count的值每天才增加几个,很正常。


以上是我的亲身体会,供大家参考。不确保安全性和正确性。请谨慎使用,后果自负。