你在这里


硬盘

Linux下查看硬盘状态及性能

James Qi 2014年5月21日 - 20:14 发布

  硬盘确实是现在服务器或者电脑中虽容易损坏的部件了,我们的Linux服务器上安装了比较多的硬盘,每台上面有8颗硬盘,使用的头1、2年还好,到3、4年就逐步出现问题了,常见的是:

  • 硬盘变为只读,需要重启;
  • 数据库报错,需要修复;
  • 数据库报错,无法修复,换文件重建;
  • 彻底无法使用。

  几个月前让同事把国内外服务器上的硬盘全部检查了一遍,将通电时间、报错次数、坏道数量等列出来,对损坏严重的硬盘弃用。

  随着硬盘损坏越来越多,最近又撤换了一部分弃用的硬盘,增加新购入的企业级硬盘,然后再次对所有硬盘的情况进行全面检查、汇总。

  这次我自己查了点资料,然后自己去运行命令来进行测试的,虽然这个工作很琐碎、本来也不想管,但这个事情对于网站稳定性还是很重要的,所以也值得自己花一些时间。现在把一些要点记录如下:

更换一批服务器损坏硬盘

James Qi 2014年5月2日 - 22:49 发布

  最近在增加新的国外服务器以及对国内服务器进行硬盘的替换升级,国内服务器的硬盘经过几年的使用后逐步损坏,去年让同事进行过详细和全面的磁盘检查和扫描,都进行了记录:

  • 有一些硬盘完全损坏,不能用了;
  • 有些经常变为只读状态的也不敢继续用,主动转移数据到好的硬盘,然后修改/etc/fstab禁用;
  • 有些硬盘从ext3改为ext2后重新修复、格式化,继续勉强使用;
  • 还有一些发现有坏道,但也依然用在不是非常重要的情况下,例如做专门的文件缓存硬盘用。

  以前每台服务器将8个硬盘接口全部占满挂8块硬盘,除了系统盘是厂商配的1T或者500G蓝盘以外,我们基本上都是添加的10000转的300G迅猛龙硬盘,但从目前来看,也是这些迅猛龙硬盘坏得最多。中途还曾尝试添加过笔记本电脑用的64G固态硬盘,但很快这些固态硬盘就坏掉了,无法适应服务器的使用坏境。这说明在大IO吞吐量下,对无论是固态硬盘还是机械硬盘,都还是损害很大的。

  这次准备在5台服务器上把没有在使用的坏硬盘撤下,添置上新采购的1T企业级黑盘(目前性价比最好):

自由标签:

服务器硬盘故障,恢复备份数据

James Qi 2012年8月13日 - 15:09 发布

  今年新购入的服务器上的硬盘时常有些毛病,在导入数据的时候就多次出现故障,用了2、3个月的时间导入数据后,算是稳定了几个月,但最近随着我们添加手机版工作的开展,硬盘又开始忙起来,服务器负载明显增加。两周前出现了几次服务器死机情况,每次重启后都会导致数据库保存,需要检查、修复,这样的情况持续出现后,终于有一次服务器重启不了了,好在数据都已经备份、复制出来了。这些备份数据就直接在新购的美国服务器上恢复,站点启用后,发现普通内页可以打开,但数据量大网站的分类页却频频出现报错,服务器8核CPU长期都被占用100%,而硬盘IO看上去还不是那么满,问题原因还在查找中。我们把情况向服务商反映后,他们检查说是有一块硬盘有问题,给我们更换了硬盘,raid 1的resync过程很慢,已经有两天了还没有完成。
  新服务器还没有搞定,有一台老服务器又出问题了,周末有块硬盘找不到了,不得不恢复备份,而这些备份文件非常大,都是一个10G以上,查看有好多个星期的备份都是不完整的,从前面几个月的备份中查找相对完整的来恢复。唉,这个过程太漫长、痛苦了,网站也停了几十个小时。后面还要修改完善备份的脚本,及时反映出备份中出现的报错信息,以便备份数据得到充分保障。
 

慢速删除大批量文件,降低服务器硬盘负载压力

James Qi 2012年7月18日 - 10:24 发布

  在我们一些用Drupal搭建的大数据量网站中,Boost模块产生的缓存文件数量非常多,以至于运行cron期间无法更新完毕,我们后来就采用了不自动更新缓存文件,而是人工根据需要在服务器上直接删除缓存文件的办法。

  但当缓存文件数量达到数十、上百万的时候,需要很长时间删除,在这个过程中如果还有用户访问、产生新的缓存文件,将导致硬盘占用达到100%,长期这样的话,可能让服务器硬盘不堪重负、服务器出现负载上升、网站无法访问的情况。

  这个问题一直困扰了我们好长时间,以前都是采取人工每次删除少量文件,逐步试着来进行,这导致要花费好些时间精力。昨天在网上查找了一些资料,然后改动了一下,做了一个批处理:

#!/bin/bash

for name in `find /mnt/gb3/will-delete -name "*" -print`
do
    echo $name
    rm -f $name
    sleep 0.01
done

  根据实际情况修改其中的路径、名称、延时,把这个命名为slowremove.sh,运行就可以了。

对待机械硬盘和固态硬盘都不能太“暴力”

James Qi 2012年4月13日 - 13:32 发布

  因为我们一些网站的数据量都很大,所以在发现硬盘io过高后,增加了多块硬盘,有万转的机械硬盘,也尝试过现在逐步流行的固态硬盘。
  经过这几个月的试用,我们发现只要是负载不太高,机械硬盘、固态硬盘都工作良好,但如果负载很高的话,无论是机械硬盘和固态硬盘,都容易出故障。
  我们先以为固态硬盘的io吞吐量可以比机械硬盘高很多,但实际使用中,用iostat观察,发现在高负载情况下,一些参数甚至比机械硬盘都不如,用的几块固态硬盘已经出过几次问题了,现在已经不敢再过度使用固态硬盘,只当作普通硬盘使用还行。
  最近在新服务器上有大量数据需要导入,而服务器上的硬盘初始没有放太多块,于是在大量数据同时导入的时候,机械硬盘的负载可能长期在90%以上,await的值也长期在几百毫秒以上,本周一台服务器的硬盘已经多次出现变为只读的情况了,每次都要重新挂载并修复受损的MySQL数据库,耽误了大量时间!
  昨天再次采购了6块迅猛龙硬盘,今天中午已经到货,下午同事就到机房安装,希望能让负载分散一些,加快数据导入速度以及缩短用户访问等待时间。

服务器上安装8块硬盘的配置情况、用途分配及IO记录

James Qi 2012年1月2日 - 17:55 发布

  为了赶上元旦前拿到购买的硬盘,我们都采用了快递到付的方式,顺丰速递还算给力,12月28日中午在淘宝上下的单,12月30日早上2块固态硬盘送到了,12月31日早上6块迅猛龙硬盘也送到了,同事马上赶去机房添加到服务器上,让我可以利用元旦期间的时间来迁移数据、调配硬盘的使用。

  现在3台服务器上每台都是8块硬盘,加上4颗4核CPU、64G或48G内存,真是扩充到了极致,这3台服务器的配置来做网站算是超强了。下面把3台服务器上硬盘的配置和用途进行记录:

服务器一

自由标签:

用iostat仔细分析Linux服务器上硬盘性能瓶颈

James Qi 2011年12月30日 - 10:42 发布

  前一阵子在服务器上更换、添加了硬盘后,感觉负载下降了一点、访问速度快了一点,但似乎还是不能令人满意,导入和更新数据的速度依然很慢,用户浏览也是有迟缓的感觉。

  从Linux服务器上运行top观察,4枚4核的CPU总有空闲,高达64G或者48G的内存也很富余,磁盘IO占用也不算多,究竟问题出在什么地方呢?

  我们以前就用iostat观察过硬盘io情况,一般都是在出现明显问题的时候,临时用iostat每隔1秒刷新来观察实时情况。前天开始我们用iostat -x 3600的命令让其3600秒(也就是1小时)为间隔来显示一段时间内的io情况,并对显示的参数进行详细分析。

  其中一台服务器的记录数据如下:

avg-cpu: %user %nice %system %iowait %steal %idle
          58.04 0.01 12.27 3.46 0.00 26.23

继续在服务器中添加高速硬盘和固体硬盘

James Qi 2011年12月12日 - 17:08 发布

  前一阵子在一部分大数据量的Drupal网站添加了Views,以便让浏览者得到更清晰、方便的索引页面,但很快就引起服务器负载急剧升高,让网站都无法正常访问,结果不得不马上去掉新增的Views,还原一些设置。

  但即使不增加Views,只是在修改模板后清除以前的缓存,在一些数据量大的站中重建缓存也需要很长时间,同时重建多了也一样导致负载过高。

  从iostat的监控中看到主要还是MySQL数据所在的硬盘太忙,占用率长时间维持在100%附近。

  明年为了让访问量、收入更上一个台阶,准备继续增加服务器,而现阶段感觉可以通过增加硬盘数量、把多个子网站的数据库分散到不同的硬盘来缓解瓶颈,这也是最简单、最经济的办法,效果应该也不错。

  于是今天和同事商量后,就再次订购了3块西部数码的迅猛龙300G万转硬盘,还购买了一块64G固态硬盘准备用于访问最密集、负载最高的子网站,看看固态硬盘与高速机械硬盘的对比。为了在服务器中添加更多的硬盘,又去购置了加长的数据线、一分二的电源线。等本周晚些时候到货就可以去机房安装上去了,然后再用周末或者夜间的时间来迁移数据。

Linux机器硬盘自动变为只读(Read Only)的解决办法

James Qi 2011年11月1日 - 10:24 发布

  Linux机器的硬盘本来都是设置成读写(Read/Write)方式的,不过偶尔会发现自动变成了只读(Read Only),这半年来已经发生过好几次了,当时解决后忘记记录了,现在补记一下。

  查了一些资料,发生这种情况的原因有多种,可能的问题:

  • 文件系统错误
  • 内核相关硬件驱动bug
  • FW固件类问题
  • 磁盘坏道
  • 硬盘背板故障
  • 硬盘线缆故障
  • HBA卡故障
  • RAID卡故障
  • inode资源耗尽

  解决的办法:

  • 重启服务器(命令reboot)
  • 重新mount硬盘
  • fsck尝试修复
  • 更换硬盘

  重新mount硬盘的命令:

umount /dev/sdd1
mount /dev/sdd1 /mnt/gb2

  如果在删除挂载时遇到报错,要停正在进行的服务,例如apache

自由标签:

服务器磁盘文件统计数据,准备购置高速硬盘

James Qi 2011年4月3日 - 17:50 发布

  前一阵子新换了3台服务器,都是配置的16核(4路4核)CPU、16G内存,算是很强大了,不过配置的硬盘只是2个1T普通7200转台式机硬盘,根据这些天的观察,在添加数据、更新模板的时候,用iostat查看会遭遇明显的IO瓶颈,在cpu、内存富余很多的情况下,磁盘的利用率长期100%。

  我们把MySQL和Web(包括Squid和Apache)服务的数据放在两块不同的硬盘上,先以为只是MediaWiki网站全文检索时MySQL的MyISAM数据库大文件频繁读写使硬盘应付不过来,后来根据仔细观察,发现MySQL的全文检索本身性能不好,在处理大量数据的时候容易使CPU卡住,同事调试了Sphnix来做全文检索可以轻易对付一个网站目前平均每分钟2次的搜索量。不过在Drupal网站新建全文索引表的过程中,确实还是遇到明显的硬盘瓶颈,平均每秒只能生成5条左右,当网站数据量在数十万以上时需要耗费以几十小时来记的时间,这个过程中硬盘处于繁忙状态,无法多个网站同时生成。

  后来又在MediaWiki模板更新中也感觉硬盘处理不过来,今天详细统计了目前几个主要服务(Squid, Apache, MySQL)的磁盘使用情况,列表如下:

页面

订阅 RSS - 硬盘