Tegyük fel, hogy van egy önálló Dell szerverünk, amelyben található egy hardveres RAID (DELL PERC). A linuxos rendszerek általában csak a hozzájuk közvetlenül csatlakoztatott háttértárolókat tudják lekezelni, és ennek következtében az állapotadatokat sem tudják lekérni olyan könnyen, ha virtuális lemezekkel kell dolgozni.

Például az alábbi eredményt kaphatjuk a smartctl használatakor:

smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.15.0-130-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               Dell
Product:              VIRTUAL DISK
Revision:             1028
User Capacity:        146,163,105,792 bytes [146 GB]
Logical block size:   512 bytes
Logical Unit id:      0x600508e0000000005ac5256080931c09
Device type:          disk
Local Time is:        Sun Jan 31 14:44:49 2021 CET
SMART support is:     Unavailable - device lacks SMART capability.

=== START OF READ SMART DATA SECTION ===
Current Drive Temperature:     0 C
Drive Trip Temperature:        0 C

Error Counter logging not supported

Device does not support Self Test logging

Ilyenkor jól jöhet a Dell OpenManage megoldása, ám könnyen előfordulhat, hogy nem támogatott az általunk használt hardver, vagy éppen csak egy egyszerűbb megoldást szeretnénk igénybevenni.

Amennyiben LSI-vezérlőről van szó, a problémát könnyedén áthidalhatjuk az mpt-status használatával.

Először is győződjünk meg arról, hogy a RAID-vezérlőnk az LSI technológiájára épül:

sudo lspci | grep SAS

Ha az eredmény ehhez hasonló, akkor érdemes folytatnunk az alábbi lépésekkel:

01:00.0 SCSI storage controller: LSI Logic / Symbios Logic SAS1068E PCI-Express Fusion-MPT SAS (rev 08)

Elsőként is telepítsük a szükséges csomagot:

sudo apt-get update -y
sudo apt-get install -y mpt-status

Majd pedig futtassuk az alábbi parancsot:

sudo mpt-status

Ha a válasz az alábbihoz hasonló, akkor már látjuk is a RAID és az egyes virtuális lemezek állapotát:

ioc0 vol_id 0 type IM, 2 phy, 136 GB, state OPTIMAL, flags ENABLED
ioc0 phy 0 scsi_id 9 SEAGATE ST3146855SS S528, 136 GB, state ONLINE, flags NONE
ioc0 phy 1 scsi_id 1 SEAGATE ST3146855SS S528, 136 GB, state ONLINE, flags NONE

Most már nincs más hátra, mint létrehozni egy egyszerű szkriptet, amelyik figyeli a RAID állapotát, és értesítést küld (az alábbi példában e-mailben és Pushover-üzenetben), ha valami nem stimmel:

sudo nano /usr/sbin/checkmpt

Majd írjuk be az alábbi kódot (természetesen a saját e-mail-címünket és Pushover-adatainkat használva):

#!/usr/bin/perl
# With credit to :
#   => check_mpt.pl Copyright (C) 2006 Claudio Messineo 

$mpt_path="/usr/sbin/mpt-status";
$num_raid=2;
$enabled=1;
$sendto="admin";
$sendfrom="admin";

`/sbin/modprobe mptctl`;
sleep 1;

if ( ! open( MPT_STAT, " $mpt_path | " ) ) {
    print "ERROR: could not open $mpt_path\n";
    exit 1;
} else {
    while () {
        if ( $_ =~ m/ENABLED/ ) {
            # print "$_";
            $enabled--;
        }
        if ( $_ =~ m/ONLINE/ ) {
            #  print "$_";
             $num_raid--;
        }
        next;
    }

    my $hostname=`/bin/hostname -f 2>&1`;
    chomp($hostname);
    if (($num_raid==0) and ($enabled==0)) {

        #sendEmail( $sendto, $sendfrom, "$hostname Mpt-status OK", "$results" );
        #print "$hostname Mpt-status OK\n";
        exit 0;
    } else {

        sendEmail( $sendto, $sendfrom, "$hostname Mpt-status Alert", "$results" );
        print "$hostname Mpt-status Alert\n";

        use LWP::UserAgent;

        LWP::UserAgent->new()->post(
          "https://api.pushover.net/1/messages.json", [
          "token" => "user key",
          "user" => "app token",
          "message" => "$hostname Mpt-status Alert",
        ]);
        exit 1;
    }
}

# Simple Email Function
# ($to, $from, $subject, $message)
sub sendEmail {
    my ($to, $from, $subject, $message) = @_;
    my $sendmail = '/usr/sbin/sendmail';
    open(MAIL, "|$sendmail -f $from -oi -t");
        print MAIL "From: $from\n";
        print MAIL "To: $to\n";
        print MAIL "Subject: $subject\n\n";
        print MAIL "$message\n";
    close(MAIL);
}

Végül pedig tegyük futtathatóvá:

sudo chmod 755 /usr/sbin/checkmpt

Ha pedig szeretnénk rendszeresen futtatni az ellenőrzést, akkor egy crontab-bejegyzést kell létrehoznunk:

sudo nano /etc/crontab

És beírnunk az alábbi sort (a saját ütemezésünk szerint módosítva):

# mpt-status
00 3    * * 7   root    /usr/sbin/checkmpt
Chilly

Chilly 1997 óta foglalkozik webhelyek üzemeltetésével és programozással, valamint különböző kütyük kipróbálásával, és azóta folyamatosan nyomon követi a technikai újításokat. Elsődlegesen Linux-rendszerekkel dolgozik, de az évek során rengeteg tapasztalatra tett szert a Windows-gépek üzemeltetése terén is, hobbiszinten pedig az utóbbi időben egyre több időt tölt a Raspberry Pi módosítgatásával.
Mesterfokon beszél angolul, és műszaki szakfordítói vizsgával rendelkezik. Korábban sokáig újságíróként dolgozott nyomtatott és online magazinoknál.

Visit Us On LinkedinCheck Our Feed