빅 데이터 환경 에서 의 디스크 스 크 립 트 사고 와 실현
hdfs 의 저장 노드 (datanode) 에 필요 한 디스크 와 같은 장면 을 고려 합 니 다. 클 러 스 터 규모 가 커지 면 각 노드 에 20 개의 디스크 가 있 고 클 러 스 터 에 200 개의 노드 가 있다 고 가정 하면 실제 물리 디스크 는 4000 개 입 니 다.디스크 의 연간 고 장 률 이 1% 라 고 가정 하면 우 리 는 매일 1 개의 디스크 가 고장 이 나 면 교체 하거나 복구 해 야 한다 고 생각 할 수 있 습 니까?
현재 생산력 을 해방 시 키 기 위해 구체 적 인 수 요 는 디스크 고장 이 발견 되면 물리 디스크 만 교체 하고 시스템 등급 의 조작 이 모두 자동화 되 어야 한 다 는 것 이다.
몇 가지 문제 에 대해 생각 하 다.
1): fstab 에 기 록 된 고장 난 디스크 정 보 를 삭제 합 니 다.
2): 새 디스크 는 파 티 션 이 필요 없 이 직접 포맷 합 니 다.
3): 고장 난 디스크 를 복구 한 후 다시 놓 습 니 다. 디스크 데이터 가 남아 있 으 면 포맷 할 수 없습니다.
4): 파 티 션 이 있 는 디스크 를 조작 할 수 없습니다.
5): 마 운 트 된 디스크 를 조작 할 수 없습니다. (고장 난 디스크 핫 플러그 의 경우 고려)
6): 디스크 총수 가 불확실 하 다 고 가정 하기 때문에 마 운 트 지점 의 수 는 디스크 수량 과 대응 해 야 합 니 다.
7): 데이터 가 있 는 포맷 작업 을 할 수 없습니다.
8): 디스크 작업 의 전 제 는 이 디스크 가 파 티 션 이 없고 데이터 가 없어 야 합 니 다.
9): 포맷 되 었 으 나 마 운 트 되 지 않 았 으 며 디스크 에 맞 는 마 운 트 작업 을 합 니 다.
10): 데이터 의 안전 을 위해 보충 을 환영 합 니 다...
시스템 환경: CentOS 6.3 x86_64
셸 코드 는 다음 과 같 습 니 다:
#!/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
" >> $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, 형식:./checkdisk. sh - s, 스 크 립 트 는 첨부 파일 로 다운로드 할 수 있 습 니 다.
글 을 쓰 는 것 이 쉽 지 않 으 니, 그럭저럭 좋다 면 칭찬 을 해라, 고맙다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.