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

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, illetve otthoni automatizált és biztonságtechnikai rendszerek kiépítésével.
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