• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >windows > 大数据环境下的磁盘脚本思考和实现

大数据环境下的磁盘脚本思考和实现

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含监控磁盘脚本,磁盘清理bat脚本,磁盘清理脚本,数据磁盘阵列设备厂家,数据磁盘阵列设备等服务器相关知识,网友希望可以进行参考

需求:

考虑一种场景,譬如hdfs中的存储节点(datanode)所需的磁盘,当集群规模变大,假设每个节点有20块盘,集群有200个节点,那么实际物理磁盘为4000块;假设磁盘年故障率为1%,那么,我们是不是可以认为每天都有1块盘出现故障需要更换或修复?

现在,为了解放生产力,具体需求是:当发现磁盘故障后,仅需更换物理磁盘,系统级别的操作全部自动化。


一些问题思考:

1):删除其信息写入fstab的故障盘信息

2):新磁盘是不需要分区的,直接格式化

3):故障盘如果修复后,又放回来,如果磁盘数据还保留,不得对其格式化

4):不能对有分区的盘进行操作

5):不能对已挂载的盘操作(考虑故障盘热插拔的情况)

6):假设磁盘总数是不确定的,因此挂载点的数量,应当和磁盘数量对应

7):不能对有数据的可用进行格式化操作

8):对磁盘操作的前提必须是该磁盘是没有分区的,没有数据的

9):对已格式化但未挂载,并符合的磁盘做挂载操作

10):在为了数据的安全的情况下,欢迎补充…


系统环境:CentOS 6.3  x86_64


shell代码如下:


#!/bin/bash
# Script name: check_disk.sh
# Date & Time: 2013-07-08/21:06:08
# Description:
# Author: MOS
Mlog=${Mlog:-/var/log/check_disk.log}
Date="/bin/date +%k:%M:%S/%Y-%m-%d"
NUL=/dev/null
# 挂载点的父目录,会自动创建
SDIR=/mpoint
# Umt函数:卸载无效磁盘
Umt(){
    Ut=(`grep "$SDIR" /etc/fstab|awk '{print $2}'`)
    Ud=(`grep "$SDIR" /etc/fstab|awk -F\" '{print $2}'`)
    for d in ${Ut[@]};do
        if [ -d $d ];then
            #Dk=`df $d|awk '{print $1}'|/usr/bin/tail -1`
            Dk=`mount|grep "$d\>"|awk '{print $1}'`
            Ud=`/sbin/blkid $Dk|awk -F\" '{print $2}'`
            Td=`grep $d /etc/fstab|awk -F\" '{print $2}'`
            [ -b "$Dk" ] && Uft=`/sbin/parted $Dk print|/usr/bin/tail -2|/usr/bin/head -1|awk '{print $5}'`
            Tft=`grep $d /etc/fstab|awk '{print $3}'`
            if [[ $Ud != $Td || $Uft != $Tft ]];then
                /bin/umount $d &> $NUL
                /bin/sed -i "/$d/d" /etc/fstab &> $NUL
            fi    
        fi
    done
    for d in ${Ud[@]};do
        Unull=`/sbin/blkid|grep $d`
        if [[ -z $Unull ]];then
            Mpit=`grep $d /etc/fstab|awk '{print $2}'`
            /bin/umount $Mpit &> $NUL
            /bin/sed -i "/$d/d" /etc/fstab &> $NUL
        fi
    done
}
# Mmu函数:挂载有效磁盘
Mmu(){
    declare -i P=1
    Tb=/etc/fstab
    Ftb(){
        Sft=`/sbin/blkid $Fph|awk -F\" '{print $2}'`
        Ft=`grep "\<disk$P\>" $Tb`
        Gud=`grep "\<$Sft\>" $Tb`
        [[ -n $Ft ]] && /bin/sed -i "/\<disk$P\>/"d $Tb
        [[ -n $Gud ]] && /bin/sed -i "/\<$Sft\>/"d $Tb
    }
    Add(){
        Ef=`/sbin/blkid $Fph`
        [[ -z $Ef ]] && /bin/echo y|/sbin/mkfs.ext4 $Fph &> $NUL
        Uuid=`/sbin/blkid -s UUID $Fph|awk '{print $2}'`
        Fs=`/sbin/blkid -s TYPE $Fph|awk -F\" '{print $2}'`
        Fr="defaults,noatime"
        echo -en "$Uuid\t"$SDIR"/disk$P\t$Fs\t$Fr\t0 0\n" >> $Tb
        /bin/mount -a &> $NUL
        break
    }
    Fe(){
        Mtp=`mount|grep ""$SDIR"/disk$P\>"`
        if [[ -n "$Mtp" ]];then
            echo "`$Date` $Mp is used." >> $Mlog
        else
            Ftb
            Add
        fi
    }
    while : ;do
        if [[ -d "$SDIR"/disk$P ]];then
            Fe
        else
            /bin/mkdir -p "$SDIR"/disk$P && Ftb
            Add
        fi
                                                                                                  
        P=P+1
    done
}
# Chech_disk函数:区分磁盘的有效性并调用对应的函数处理
Check_disk(){
    [ -x /sbin/partprobe ] && /sbin/partprobe &> $NUL
    Umt
    /bin/mount -a &> $NUL
    for b in ${Exist[@]};do
        Fph="$Dph$b"
        [[ ! -b "$Fph" ]] && echo "`$Date` $Fph is not block device !!!" >> $Mlog && continue
        CTE=`ls "$Fph"*|/usr/bin/wc -l`
        [[ "$CTE" -ne 1 ]] && echo "`$Date` $Fph mismatches." >> $Mlog && continue
        DFM=`mount|awk '{print $1}'|grep "^$Fph$" 2>$NUL`
        [[ -n "$DFM" ]]  && echo "`$Date` $Fph is used." >> $Mlog && continue
        Ugd=`/sbin/parted $Fph print|/usr/bin/wc -l`
        [[ "$Ugd" -ge 8 && -n "$DFM" ]] && echo "`$Date` parted $Fph >= 8 ." >> $Mlog && continue
        Lvm=`/sbin/blkid $Fph|grep -E "LVM2_member|swap"`
        [[ -n "$Lvm" ]] && echo "`$Date` $Fph is LVM or swap." >> $Mlog && continue
        Fgd=`/sbin/fdisk -l $Fph|/usr/bin/wc -l`
        [[ "$Fgd" -ge 10 ]] && echo "`$Date` fdisk -l $Fph >=10 ." >> $Mlog && continue      
        Mmu
    done
}
if [[ "$1" == "-s" && -z "$2" ]];then
    if [[ -b /dev/cciss/c0d0 ]];then
        Ah=hp
        Dph=/dev/cciss/
        Exist=(`ls /dev/cciss/|grep "^\<c0d[0-9][0-9]\{0,1\}\>"`)
        Check_disk
    else
        Exist=(`ls /dev/|grep -E "^\<sd[a-z]{0,1}\>|^\<hd[a-z]{0,1}\>|^\<vd[a-z]{0,1}\>"`)
        Dph=/dev/
        Check_disk
    fi
fi



使用时记得加-s,格式: ./check_disk.sh -s,脚本可直接附件下载。

写东西不易,觉得凑合就给个赞吧,谢啦


本文出自 “自强不息” 博客,请务必保留此出处http://mos1989.blog.51cto.com/4226977/1243650

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 大数据环境下的磁盘脚本思考和实现

相关文章

  • Opera 10 为低速网络优化的优秀浏览器
  • iis httpd.ini中IIS图片防盗链
  • Bind+DLZ+MySQL智能DNS的正向解析和反向解析实现方法
  • 解决Backup Exec无法显示Oracle实例
  • 【虚拟化实战】Cluster设计之三HA
  • liunx服务使用(squid 代理服务器)
  • Serv-U6.4管理密码忘了怎么办
  • 根据 Windows 系统事件日志查询解决方法
  • 病毒交叉感染
  • 关于nginx中的fastcgi_param

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • 基本信息查看总结
    • cut、tr、wc、sort4
    • VMware上模拟实现windows 2003集群环境
    • windows服务器最基本安全权限配置方法
    • Windows Server 2008 的十种新特性
    • SoluVM ISO安装Windows 2003图文详解
    • iis网站默认首页设置方法
    • 关于apache应用,受到攻击的一些处理办法
    • win7中的Uac与开机自动启动解决方法
    • WMS中添加默认发布点的方法[图文教程]

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有