Mam serwer domowy (HP Proliant ML310 G4), który kupiłem od mojego pracodawcy mniej więcej miesiąc temu. Na serwerze działa Debian Linux i używam go do wszystkiego. Mogę to zrobić, ponieważ moje potrzeby nie są tak wymagające, więc serwer rzadko jest obciążony w danym momencie. Ten serwer ma macierz RAID1 2 TB (z jednym hot spare) zarządzanym przez mdadm, którego używam do udostępniania plików w mojej sieci za pośrednictwem Samby. Korzystam z systemu operacyjnego na mniejszym dysku twardym, który nie jest częścią tablicy.
Serwer jest zasilany przez mały zasilacz UPS o mocy 255 W, ponieważ muszę go wytrzymać bez większych wahań zasilania. Jest to bardzo ważne, ponieważ nagłe nieczyste wyłączenie (spowodowane spadkiem lub zanikiem zasilania) może zepsuć macierz RAID, co zdarzyło się już kiedyś.
W przypadku awarii zasilania szacuję, że zasilacz UPS ma tylko 10-15 minut mocy. Może być ich więcej, ale nie chcę automatycznie zakładać, że jest. To wystarczy, aby przejść przez przerwy w dostawie energii trwające kilka minut lub krócej. Jeśli jednak zasilanie zostanie wyłączone na kilka godzin, serwer musi się automatycznie wyłączyć automatycznie przed awarią zasilania UPS. Miejmy nadzieję, że w takich sytuacjach powstrzyma się integralność macierzy RAID.
Tego rodzaju rzeczy są łatwe na laptopie, ponieważ mają wbudowane czujniki, aby określić, kiedy działa na zasilaniu bateryjnym, ale ten serwer nie (o ile wiem). Mam nietypową konfigurację sieci, w której mój modem DSL jest oddzielony od routera. Router znajduje się również na zasilaczu UPS, co pozwala mi na SSH przez mój laptop i wyłączenie serwera w przypadku awarii zasilania. Niestety działa to tylko wtedy, gdy jestem tam, aby to zrobić. Potrzebuję rozwiązania, które zawsze działa, niezależnie od tego, czy jestem tam, aby interweniować, czy nie.
Ponieważ mojego modemu DSL nie ma na zasilaczu UPS, zepsuje się ze wszystkim innym, jeśli nastąpi awaria zasilania. Tak to skonfigurowałem, ponieważ mam pomysł, jak rozwiązać ten problem: myślałem o napisaniu skryptu, który mógłby pingować google.com lub inną witrynę o dużym ruchu / wysokiej dostępności. Jeśli polecenie ping zakończy się pomyślnie, serwer będzie nadal działać. Jeśli ping nie powiedzie się (ponieważ modem jest wyłączony), skrypt pomyśli, że zasilanie jest wyłączone i nakazałby serwerowi wyłączenie. Dodałbym skrypt do Crona i uruchamiałby go co 5 minut. Miejmy nadzieję, że dałoby to serwerowi wystarczająco dużo czasu na zamknięcie się, zanim UPS się wyczerpie.
Zanim zacznę pisać scenariusz, chciałbym wiedzieć, czy istnieje lepszy sposób na zrobienie tego, czego potrzebuję. Z góry dziękuję za wszelką pomoc.