আমি জানি এটি একটি পুরানো প্রশ্ন, তবে এটি আমার একসাথে করা কয়েকটি টুকরো আমাকে দিয়েছিল, এবং আমি ভেবেছিলাম যে স্ক্রিপ্টটি আমি সামনে এনেছি তা পুনরায় গুলি করব, যেহেতু এটি আমার পরিস্থিতির সাথে প্রায় সঠিক মিল: এটি sas2ircu প্রয়োজন : http://www.avagotech.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_6g_p20/SAS2IRCU_P20.zip
এবং বন্দর থেকে, ব্যাশ এবং এসজি 3_উটিলেটস
এটি কয়েকটি অনুমান করে, আমার মনে হয় যে প্রধানটি হ'ল এটি নিয়ামক 0 এর সাথে সংযুক্ত you আপনি sas2ircu list
নিজের কন্ট্রোলার নম্বর সনাক্ত করতে ব্যবহার করতে পারেন ।
এটি নির্বাচিত পুলটি পরীক্ষা করবে (zpool স্থিতির মাধ্যমে)। যদি কোনও ত্রুটি না থাকে তবে এটি হবে:
- ঘের স্লটগুলিতে ডিভাইসের নামের ম্যাপিংয়ের সাহায্যে একটি ফাইল (/root/.sas2ircu/drives এ) সংরক্ষণ করুন
- এই স্ক্রিপ্ট দ্বারা পূর্বে সক্রিয় কোন নেতৃত্ব বন্ধ করুন (এটি /root/.sas2ircu/locs এ সঞ্চিত)
ত্রুটি থাকলে এটি হবে:
- zpool স্থিতির সম্পূর্ণ আউটপুট সহ একটি ইমেল প্রেরণ করুন
- কোনও ব্যর্থ ড্রাইভের নেতৃত্ব সক্রিয় করুন (এবং অবস্থানগুলি /root/.sas2ircu লোকগুলিতে সক্রিয় করুন যাতে তারা পরে নিষ্ক্রিয় করা যায়)
যাইহোক এখানে স্ক্রিপ্ট। আমি এটি একটি ঘন্টা হিসাবে ক্রোন কাজ হিসাবে চালানো।
#! /usr/local/bin/bash
if [ ! "$1" ]; then
echo "Usage: zpscan.sh pool [email]"
echo "Scan a pool, send email notification and activate leds of failed drives"
exit
fi
if [ ! -d /root/.sas2ircu ]; then
mkdir /root/.sas2ircu
touch /root/.sas2ircu/drives
touch /root/.sas2ircu/locs
fi
if [ "$2" ]; then
email="$2"
else
email="root"
fi
condition=$(/sbin/zpool status $1 | egrep -i '(DEGRADED|FAULTED|OFFLINE|UNAVAIL|REMOVED|FAIL|DESTROYED|corrupt|cannot|unrecover)')
if [ "${condition}" ]; then
emailSubject="`hostname` - ZFS pool - HEALTH fault"
mailbody=$(zpool status $1)
echo "Sending email notification of degraded zpool $1"
echo "$mailbody" | mail -s "Degraded Zpool $1 on hostname" $email
drivelist=$(zpool status $1 | grep -E "(DEGRADED|FAULTED|OFFLINE|UNAVAIL|REMOVED|FAIL|DESTROYED)" | grep -vE "^\W+($1|NAME|mirror|logs|spares)" | sed -E $'s/.*was \/dev\/([0-9a-z]+)/\\1/;s/^[\t ]+([0-9a-z]+)[\t ]+.*$/\\1/')
echo "Locating failed drives."
for drive in $drivelist;
do
record=$(grep -E "^$drive" /root/.sas2ircu/drives)
location=$(echo $record | cut -f 3 -d " ")
echo Locating: $record
sas2ircu 0 locate $location ON
if [ ! "$(egrep $location /root/.sas2ircu/locs)" ]; then
echo $location >> /root/.sas2ircu/locs
fi
done
else
echo "Saving drive list."
drivelist=$(zpool status $1 | grep -E $'^\t ' | grep -vE "^\W+($1|NAME|mirror|logs|spares)" | sed -E $'s/^[\t ]+//;s/([a-z0-9]+).*/\\1/')
saslist=$(sas2ircu 0 display)
printf "" > /root/.sas2ircu/drives
for drive in $drivelist;
do
sasaddr=$(sg_vpd -i -q $drive 2>/dev/null | sed -E '2!d;s/,.*//;s/ 0x//;s/([0-9a-f]{7})([0-9a-f])([0-9a-f]{4})([0-9a-f]{4})/\1-\2-\3-\4/')
encaddr=$(echo "$saslist" | grep $sasaddr -B 2 | sed -E 'N;s/^.*: ([0-9]+)\n.*: ([0-9]+)/\1:\2/')
echo $drive $sasaddr $encaddr >> /root/.sas2ircu/drives
done
for loc in $(cat /root/.sas2ircu/locs);
do
sas2ircu 0 locate $loc OFF
done
printf "" > /root/.sas2ircu/locs
fi
for loc in $(cat /root/.sas2ircu/locs);
do
sas2ircu 0 locate $loc OFF
done
printf "" > /root/.sas2ircu/locs
fi
/dev/sdX
শৈলীর নামের সাথে সিমলিংকযুক্ত / dev / ডিস্ক / বাই-আইডি / ডিরেক্টরি থাকে । কোনও ধারণা নেই, যদি ফ্রিবিএসডি এর মতো কিছু থাকে।