解析Linux下磁盘乱序的问题

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:
大家在使用linux过程当中肯定遇到过磁盘乱序的问题。一般情况下引起磁盘乱序有几种可能,比如磁盘是通过raid卡连接到服务器的,raid卡电池没电来,这时候如果服务器掉电的情况下可能会引起磁盘乱序。再就是比如新的服务器,但raid驱动是比较老的版本,一旦重启也经常会有乱序的可能。再就是服务器磁盘较多,sata/ssd存在混用的情况下也会有乱序的可能。
  针对这种乱序的情况应该如何解决呢?这里我总结了一种比较好的结局方法。下面这个脚本的目的是通过udevinfo(centos5)或者udevadm(centos6)来获得磁盘的设备号,这个设备号是不会随着服务器的重启而改变的。获得这个设备号后在/dev/下生成以slot0开通的相应的设备,比如有5块磁盘则生成slot0-4这样5个设备。这时候再挂载的时候用这些槽号来挂载就ok来。脚本如下:
#!/bin/bash
#set -x
function get_release()
{
while read i
do
release=`echo "$i" |grep"release" |awk '{print $3;}'`
main_version=${release:0:1}
if [ ! -z $main_version ]
then
echo $main_version
return 0
fi
done < "/etc/redhat-release"
return 1
}
function get_id_serial()
{
device=$1;
if [ -z "$device" ]
then
return -1
fi
device=`basename $device`
main_version=`get_release`
if [ $? -ne 0 ]
then
echo "get centos release versionerror" 1>&2
return $?
fi
case $main_version in
"5" ) cmd="/usr/bin/udevinfo-q all -n $device" ;;
"6" ) cmd="/sbin/udevadminfo --query=all --name=$device" ;;
esac
ID_SERIAL=$( $cmd |grep"ID_SERIAL=" |awk -F '=' '{print $2;}')
if [ -z $ID_SERIAL ]
then
return 1
fi
echo -n "$ID_SERIAL"
return 0
}
diskctl_config="/etc/udev/rules.d/99-hd.rules"
rm -rf $diskctl_config
diskctl_db="/usr/diskctl/diskctl.db"
rm -rf $diskctl_db
mkdir -p /usr/diskctl
touch $diskctl_db
index=0
for i in /dev/sd*[a-z]
do
device=`basename $i`
ID_SERIAL=`get_id_serial $i`
if [ $? -ne 0 ]
then
echo "FATAL: get ID_SERIAL error" 1>&2
exit 1
fi
slot=`printf "slot%02d"  $index`
echo"KERNEL==\"sd*[a-z]\",ACTION==\"add\",ENV{ID_SERIAL}==\"$ID_SERIAL\",SYMLINK+=\"$slot\"">> $diskctl_config
echo"KERNEL==\"sd*[0-9]\",ACTION==\"add\",ENV{ID_SERIAL}==\"$ID_SERIAL\",SYMLINK+=\"$slot-part%n\"">> $diskctl_config
echo"KERNEL==\"sd*[a-z]\",ACTION==\"remove\",ENV{ID_SERIAL}==\"$ID_SERIAL\",RUN+=\"/bin/rm-f /dev/$slot /dev/$slot-part*\"" >> $diskctl_config
echo "#split$ID_SERIAL#############################" >> $diskctl_config
ID_SN=`smartctl -i $i 2>/dev/null |grep"Serial\s*number" -i |awk '{print $3;}'`
if [ -z "$ID_SN" ]
then
ID_SN="error"
fi
echo "$slot $ID_SERIAL $ID_SN"  >> $diskctl_db
((index=index+1))
Done
/sbin/udevcontrolreload_rules
/sbin/start_udev
/etc/fstab里面以类似下面的方式来挂载:
/dev/slot02    /data02   ext4   defaults        0 0
/dev/slot03    /data03   ext4   defaults        0 0
/dev/slot04    /data04   ext4   defaults        0 0

最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
|
5天前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
21 11
|
8天前
|
Ubuntu Linux 网络安全
Linux磁盘挂接教程
Linux磁盘挂接教程
38 14
|
16天前
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
40 5
|
3月前
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
69 2
|
3月前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
89 4
|
3月前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
4月前
|
弹性计算 网络协议 Ubuntu
如何在阿里云国际版Linux云服务器中自定义配置DNS
如何在阿里云国际版Linux云服务器中自定义配置DNS
|
4月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
95 0
|
3月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
122 2
|
2月前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是"将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为5种:单例模式、工厂方法模式抽象工厂式、原型模式、建造者模式。
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析