Etykiety

sobota, 20 grudnia 2014

Co to jest BOINC

Wstęp


Coraz to większą popularność, szczególnie wśród miłośników informatyki oraz pasjonatów ciekawego oprogramowania zyskuje oprogramowanie BOINC. W tym artykule postaram się wyjaśnić czym jest system BOINC i do czego on może służyć.

Aby dobrze zrozumieć czym jest system BOINC i do czego może się on przydać, warto najpierw zapoznać się z pojęciami przetwarzania rozproszonego oraz wolontariatu obliczeniowego.

 

Przetwarzanie rozproszone


Przetwarzanie rozproszone polega na wykonywaniu określonych zadań obliczeniowych z wykorzystaniem współdzielenia zasobów informatycznych. Generalnie rzecz polega na tym, iż dane zadanie obliczeniowe dzielone jest na drobne jednostki obliczeniowe, które opracowywane są na poszczególnych systemach informatycznych połączonych ze sobą siecią (ethernet/internet). W taki sposób całe zadanie wykonywane jest równolegle i częściowo przez wiele maszyn, a zatem wynik można uzyskać o wiele szybciej i sprawniej. Poszczególne maszyny wykonują odpowiednie obliczenia, po czym wysyłają wyniki do odpowiedniego serwera. Najlepszymi przykładami przetwarzania rozproszonego mogą być różnego rodzaju skomplikowane obliczenia naukowe.

 

Wolontariat obliczeniowy


Wolontariat obliczeniowy jest systemem informatycznym opartym na przetwarzaniu rozproszonym, które zostało opisane wyżej i w którym wolontariusze wspierają rozmaite projekty naukowe oferując dowolną część mocy obliczeniowej własnych komputerów, laptopów, tabletów, bądź smartfonów. Biorąc pod uwagę fakt, iż na świecie istnieje ponad miliard komputerów osobistych, a jeszcze większa ilość laptopów, notebooków, tabletów i smartfonów razem wziętych, można śmiało stwierdzić, iż wolontariat obliczeniowy jest w stanie zapewnić ogromną moc obliczeniową, nieosiągalną w jakikolwiek inny sposób. Tak ogromne zasoby mocy obliczeniowej są w stanie umożliwić ważne badania naukowe, które w przeciwnym przypadku było by bardzo trudno, a wręcz niemożliwe przeprowadzać, głównie ze względu na trudno dostępne fundusze konieczne do zakupu drogiego sprzętu informatycznego. 

Wolontariat obliczeniowy może funkcjonować efektywnie tylko wtedy, gdy w grę wchodzą badania naukowe, które leżą w interesie całego społeczeństwa i które mają kluczowe znaczenie humanitarne. Instytucje zajmujące się ważnymi dla społeczeństwa badaniami na ogół nie dysponują funduszami pozwalającymi na zakup i utrzymanie drogich superkomputerów, są one natomiast na tyle godnymi zaufani organizacjami, iż mogą liczyć na wsparcie ze strony wolontariuszy. Innego natomiast rodzaju organizacje, na przykład te zajmujące się rozwojem broni jądrowej, nigdy nie uzyskałyby wsparcia ze strony wolontariatu obliczeniowego, a zatem muszą korzystać z własnych super-drogich super-komputerów.

 

BOINC a przetwarzanie rozproszone nie oparte na wolontariacie


Oprogramowanie BOINC może słuzyć, między innymi, do celów nie związanych z wolontariatem obliczeniowych. System może być pomyślnie stosowany np. przez przedsiębiorstwa w celu wykonywania własnych obliczeń. Informacje dotyczące tego tematu można znaleźć pod adresem http://boinc.berkeley.edu/trac/wiki/DesktopGrid. W tym celu należy jednak dodatkowo przeprowadzić instalację i konfigurację własnego serwera BOINC. Informacje o tym, jak to zrobić, można uzyskać pod adresem http://boinc.berkeley.edu/trac/wiki/ServerIntro

 

BOINC a wolontariat obliczeniowy


System wolontariatu obliczeniowego BOINC jest zaawansowaną platformą informatyczną opartą na przetwarzaniu rozproszonym i funkcjonuje dzięki wsparciu ze strony wolontariuszy, którzy biorą w nim udział.

Większość projektów opracowywanych za pomocą wolontariatu BOINC związana jest z akademickimi badaniami naukowymi, lecz nieliczne z nich, np. GIMPS (Great Internet Mersenne Prime Search), nie są projektami naukowymi.

Aby zostać wolontariuszem BOINC należy się zarejestrować w projekcie, wybranym z dostępnej listy projektów: http://boinc.berkeley.edu/projects.php. Osobiście bardzo polecam rejestrację w projektach prowadzonych przez World Community Grid. WCG to organizacja non-profit, dofinansowywana przez samo IBM i zajmująca się pilnymi badaniami medycznymi (HIV, Ebola itp), problemami środowiska (czysta woda itp.) oraz innymi nagłymi sprawami, które mają kluczowe i humanitarne znaczenie dla całego społeczeństwa.

Wolontariuszami BOINC mogą być osoby fizyczne, jak również instytucje (szkoły, ośrodki naukowe, przedsiębiorstwa), posiadające komputery z dostępem do internetu. Wolontariusze generalnie pozostają anonimowi, a w zależności od wybranego projektu, aby dokonać rejestracji w systemie wymagane jest podanie niektórych danych osobowych, takich jak adres email.

Podczas udziału w projektach, informacje o tym jak dobrze radzą sobie komputery, na których oprogramowanie zostało zainstalowane oraz ile danych przetwarzają, można uzyskać na bieżąco po zalogowaniu się w witrynie projektu.

Prowadzone są również statystyki dotyczące wolontariatu obliczeniowego BOINC. Więcej informacji o statystykach BOINC można uzyskać pod adresem http://boinc.berkeley.edu/links.php#stats

Po pomyślnym przeprowadzeniu rejestracji jako wolontariusz BOINC w wybranym projekcje, należy pobrać oprogramowanie BOINC odpowiednie dla wybranego systemu operacyjnego. Obecnie istnieją wersje dla kilku różnych systemów operacyjnych: Windows, Mac, Linux, Android. Oprogramowanie BOINC może być pobrane przykładowo ze strony http://boinc.berkeley.edu/download_all.php


Instalacja oprogramowania BOINC Windows
Instalacja oprogramowania BOINC jest bardzo intuicyjna

 

Jak działa wolontariat obliczeniowy BOINC


Po prawidłowej instalacji oprogramowania należy je uruchomić i dołączyć do projektu, w którym dokonano rejestracji. Pomimo iż program posiada bardzo dużo opcji i ustawień, w których może być trudno się szybko połapać, dołączanie do projektów po pierwszej instalacji jest bardzo proste i nie powinno stwarzać trudności. Należy wyłącznie podać nazwę użytkownika (bądź adres email) oraz hasło. Istnieje możliwość brania udziału w wielu projektach jednocześnie, ale w takim przypadku zalecane jest korzystanie z dodatkowego menedżera kont. Po dołączeniu do wybranego projektu, w ramach wolontariatu obliczeniowego, program łączy się z serwerem projektu i ściąga dane niezbędne do przeprowadzania obliczeń. Boinc przeprowadza obliczenia zgodnie z ustalonym profilem programu. Profilami programu można zarządzać poprzez witrynę projektu. Można również zarządzać lokalnymi preferencjami przetwarzania każdej instalacji oprogramowania. Oprogramowanie BOINC przeprowadza obliczenia na podstawie danych otrzymanych od serwera projektu, a następnie zwraca do serwera wyniki obliczeń. Przetwarzanie danych wykorzystuje nie tylko moc procesora, lecz możliwe jest również korzystanie z mocy obliczeniowej układu graficznego, zgodnie z aktywnym profilem programu oraz lokalnymi ustawieniami.

Dla systemu Linux istnieje możliwość uruchamiania oprogramowania bez konieczności korzystania z interfejsu graficznego. W ten sposób można pomagać bez konieczności instalacji środowika graficznego, np. uruchamiając oprogramowanie na serwerach Linux w trybie tekstowym. Wszelkie czynności, takie jak dołączanie do wybranego projektu, można zatem wykonywać z poziomu wiersza poleceń. Przykładowo, aby dołączyć do wybranego projektu, po uprzedniej rejestracji w witrynie projektu oraz prawidłowo przeprowadzonej instalacji oprogramowania, należy wykonać następujące czynności z poziomu wiersza poleceń:

sudo -u boinc boinccmd --project_attach <URL projektu> <Klucz konta>

W powyższym przykładzie wartości <URL projektu> oraz <Klucz konta> należy zastąpić adresem URL witryny projektu oraz kluczem utworzonego w projekcie konta uzytkownika. Klucz konta użytkownika powinien być dostępny do skopiowania i wklejenia po zalogowaniu się w witrynie projektu.

W przypadku trudności z ustaleniem własnego klucza dla danego projektu, można go uzyskać w następujący sposób:

sudo -u boinc boinccmd --lookup_account <URL projektu> <Email> <Hasło>

Po uzyskaniu klucza można go użyć, aby dołączyć do projektu.

Interfejs graficzny BOINC może działać w widoku uproszczonym, a także w widoku zaawansowanym, w którym jest wiele różnych zakładek zawierających mnóstwo opcji oraz dodatkowych informacji.


Interfejs graficzny Boinc - World Community Grid - Widok uproszczony
Oprogramowanie BOINC - system operacyjny Windows - Widok Uproszczony


Interfejs graficzny Boinc - World Community Grid - Widok zaawansowany
Oprogramowanie BOINC - system operacyjny Windows - Widok zaawansowany


Interfejs graficzny oprogramowania BOINC prezentuje się bardzo ładnie. Ciekawą sprawą jest funkcja umożliwiająca wyświetlenie informacji graficznych związanych z opracowywanym projektem.


Interfejs graficzny BOINC - grafika projektu
Interfejs graficzny BOINC - grafika projektu

 

 

Czy warto zostać wolontariuszem BOINC


Na pytanie czy warto zostać wolontariuszem systemu BOINC każdy powinien odpowiedzieć sobie sam. Wszelkie projekty naukowe działające w ramach wolontariatu obliczeniowego mają ogromną wagę humanitarną, a ich znaczenie jest kluczowe nie tylko dla całego ludzkiego gatunku, lecz także dla ekosystemu naszej planety. W dzisiejszych czasach, jak nigdy dotąd, przyszłość naszej planety stoi pod znakiem zapytania. Środowisko naturalne jest skażone działaniem człowieka, w skutek czego ludzkości grożą nie tylko nowe choroby czywilizacyjne lecz także kompletna zagłada. Wiele projektów naukowych BOINC ma na celu wynalezienie skutecznych leków zwalczających groźne i jak dotąd nieuleczalne lub ciężko uleczalne choroby. Inne projekty, prowadzone w ramach wolontariatu obliczeniowego BOINC mają na celu uleczenie skażonego środowiska naszej planety. Im więcej wolontariuszy dołączy do rozmaitych projektów, tym szybciej odczuwalne będą efekty przeprowadzanych badań. Moje zdanie na ten temat jest jednoznaczne: warto brać udział w projektach wolontariatu obliczeniowego BOINC. Wolontariat obliczeniowy BOINC to idealna szansa na pomaganie dla tych osób, które lubią i pragną pomagać, niekoniecznie finansowo. WCG to sprawdzona i godna zaufania organizacja non-profit. Osobiście bardzo polecam rejestrację w projektach prowadzonych przez World Community Grid.

 

Bezobsługowa instalacja BOINC


Ciekawą cechą oprogramowania jest możłiwość przygotowania zupełnie bezobsługowej instalacji, co umożliwia prosty i łatwy sposób zainstalowania programu na wielu komputerach z uprzednio skonfigurowanymi parametrami, dotyczącymi przykładowo projektu i użytkownika. Bezobsługowa instalacja daje możliwość automatycznego dołączenia do wybranego projektu po zainstalowaniu oprogrmowania, bez konieczności wprowadzania jakichkolwiek danych podczas procesu instalacji. Bezobsługowa instalacja jest bardzo przydatna w przypadku dużych instytucji, posiadających sporą ilość komputerów, na których oprogramowanie ma zostać zainstalowane z identycznymi parametrami. Przygotowanie bezobsługowej instalacji jest bardzo proste, a możliwość taka jest bardzo dobrze udokumentowana. Informacje o tym jak przygotować bezobługową instalację oprogramowania BOINC można uzyskać pod adresem http://boinc.berkeley.edu/wiki/Creating_custom_installers

sobota, 13 grudnia 2014

Network UPS Tools NUT Linux

Podstawowe informacje o NUT (Network UPS Tools)


Nut - Network UPS Tools to oprogramowanie umożliwiające nadzorowanie stanu zasilaczy UPS oraz pozwalające zaplanować odpowiednie reakcje programowe na zmiany stanu monitorowanych urządzeń zasilających. Nut umożliwia ponadto zaawansowane monitorowanie jednostek dystrybucji mocy, a także współpracuje z zaawansowanymi kontrolerami paneli słonecznych. Nut umożliwia ponadto kontrolowanie stanu zasilaczy UPS fizycznie podpiętych do odległych systemów poprzez sieć ethernet/internet, między innymi za pomocą protokołu tcp. Nut jest bardzo popularnym i lubianym pakietem programowym, w szczególności jeżeli chodzi o środowisku Linux. Kompatybilność z kilkoma tysiącami różnych urządzeń oraz prostota konfiguracji oprogramowania to podstawowe atuty Nut'a. Oprogramowanie dostępne jest w wersjach przeznaczonych dla różnych systemów operacyjnych, także dla Windows.

Nut a monitorowanie zasilacza UPS


W niniejszym artykule opiszę, przytaczając konkretne i przetestowane przeze mnie przykłady, w jaki sposób, krok po kroku, zainstalować i skonfigurować oprogramowanie Nut w celu monitorowania zasilacza UPS Eaton 5130 (USB), podłączonego do komputera  systemem operacyjnym Linux, poprzez port USB, z możliwością nadzoru stanu zasilacza i wywoływania odpowiednich procedur związanych ze zmianą stanu UPS na komputerze głównym oraz na innych komputerach z systemami operacyjnymi Linux, znajdujących się w tej samej sieci.

Wymagania


Poniżej przedstawione wymagania są niezbędne do przeprowadzenia instalacji i konfiguracji oprogramowania według wskazówek opisanych w niniejszym artykule:

System operacyjny Linux;

Narzędzia oraz biblioteki niezbędne do kompilowania oprogramowania ze źródeł, przykładowo
glibc glibc-devel gcc;

Zasilacz UPS kompatybilny z oprogramowaniem Nut (w tym przykładzie Eaton 5130 USB) z możliwością połączenia z komputerem poprzez port USB.


UPS Eaton 5130 - Nut
Zasilacz UPS Eaton 5130 jest w 100% kompatybilny z oprogramowaniem Nut


Założenia oraz czynności wstępne


Oprogramowanie Nut powinno zostać zainstalowane zarówno na komputerze do którego zostanie podpięty zasilacz UPS poprzez port USB, jak na pozostałych komputerach w sieci, na których stan zasilacza UPS ma być monitorowany.

Komputer/system, do którego zostanie podpięty zasilacz UPS poprzez port USB, będzie dalej nazywany netserver (master), a pozostałe komputery/systemy będą określane jako netclient (slave).
W sytuacji gdy występuje awaria zasilania, a komputery master / slave pozyskują napięcie z zasilacza UPS, w chwili gdy bateria zasilacza UPS słabnie wszystkie systemy powinny zostać prawidłowo zamknięte.
W przypadku awarii zasilania oraz niskiego poziomu naładowania bateri zasilacza UPS automatycznie rozpoczyna się procedura zamykania systemów. Komputer netserver (master) zamyka system jako ostatni, czekając na zamknięcie wszystkich systemów netclient (slave). Konfiguracja oprogramowania na systemach master / slave jest nieco odmienna. Systemy netclient (slave) generalnie wymagają bardzo prostej i podstawowej konfiguracji. Najbardziej pracochłonna jest konfiguracja systemów netserver (master).

Uwaga: Aby komunikacja sieciowa pomiędzy systemami netserver/netclient była możliwa w przypadku awarii zasilania, a procedura zamykania systemów mogła się odbywać prawidłowo, sprzęt potrzymujący sieć komputerową (switche, huby, routery itp) powinien być prawidłowo zasilany ze żródła UPS !

Wskazówki dotyczące czynności początkowych oraz instalacji odnoszą się zarówno do systemu netserver (master), jak i do systemów netclient (slave). Konfiguracja oprogramowania, po przeprowadzonej instalacji, jest jednak odmienna dla obu typów systemów.

Przed rozpoczęciem kompilacji oprogramowania należy podłączyć zasilacz UPS do portu USB komputera master i sprawdzić stan połączenia, jak przedstawiono poniżez. Uzyskane w poniżej przedstawiony sposób informacje o połączeniu z zasilaczem będą przydatne do prawidłowej konfiguracji oprogramowania Nut na systemie master.

[root@filemon1 nut]# lsusb
Bus 002 Device 002: ID 0463:ffff MGE UPS Systems UPS

Należy również utworzyć użytkownika oraz grupę dla oprogramowania Nut, tak aby mogło ono pracować z uprawnieniami utworzonego użytkownika oraz grupy. Dla celów niniejszego artykułu wybrałem ups:ups, co zostanie odpowiednio zdefiniowane podczas konfiguracji kompilacji (--with-user=ups --with-group=ups)

Oprogramowanie, skompilowane z plików źródłowych, jest instalowane w /usr/local/ups/, co jest ustawieniem standardowym.
Do przechowywania ważnych informacji dotyczących statusu pracy oprogramowania, zostaną wykorzystane następujące ścieżki, które zostaną uwzględnione w chwili konfigurowania opcji kompilacji oprogramowania:

/usr/local/ups/var/run
/usr/local/ups/var/run
/usr/local/ups/var/run 

Powyżej przedstawione ustawienia ścieżek można oczywiście dostosować do własnych potrzeb, tworząc odpowiednie katalogi oraz zwracając szczególną uwagę na prawidłowe ustawienie atrybutów uprawnień utworzonych katalogów. W przypadku zmiany katalogów na inne, należy pamiętać o odpowiednich zmianach w parametrach polecenia configure w chwili konfigurowania parametrów kompilacyjnych oprogramowania.

Należy zatem utworzyć niezbędne katalogi, a następnie ustawić odpowiednie atrybuty uprawnień, przykładowo:

[root@filemon /]# mkdir /usr/local/ups/var/run
[root@filemon /]# chown -R ups:ups /usr/local/ups/var
[root@filemon /]# chmod -R 770 /usr/local/ups/var

Należy dodatkowo utworzyć katalog /usr/local/ups/upssched oraz ustawić odpowiednie atrybuty uprawnień:

[root@filemon /]# mkdir /usr/local/ups/upssched
[root@filemon /]# chown ups:ups /usr/local/ups/upssched
[root@filemon /]# chmod 775 /usr/local/ups/upssched

Pozyskanie oraz instalacja Nut (Network UPS Tools)


Istnieje kilka różnych sposobów pozyskania oraz instalacji oprogramowania Nut. Najprostszym sposobem jest skorzystanie z odpowiednich narzędzi, np. yum lub apt-get, w zależności od dystrybucji systemu Linux. Można również pobrać pakiety binarne z oprogramowaniem Nut, korzystając z odnośników na stronie http://www.networkupstools.org/download.html

Postanowiłem jednak opisać tutaj najbardziej uniwersalny sposób instalacji oprogramowania Nut w wersji dla systemów Linux, a mianowicie metodę polegającą na skompilowaniu plików ze źródła. Przytoczone tutaj przykłady oparte są na wersji oprogramowania 2.7.2, działającj w środowisku Linux. Pliki źródłowe dostępne są w formacie archiwum .tar.gz na stronie http://www.networkupstools.org/download.html

Po ściągnięciu plików źródłowych, należy rozpakować zawartość archiwum do odpowiedniego katalogu. W tym przykładzie archiwum tar.gz zapisane jest w /usr/local/src/nut/, natomiast zawartość archiwum wyodrębniana jest automatycznie do  /usr/local/src/nut/nut-2.7.2/

Po zapisaniu archiwum w /usr/local/src/nut, należy przejść do /usr/local/src/nut, a następnie rozpakować archiwum:

tar -xzf nut-2.7.2.tar.gz

Prawidłowe rozpakowanie pliku-archiwum spowoduje utworzenie odpowiedniego katalogu, zawierającego pliki źródłowe:

[root@filemon1 nut]# ls -al
total 2176
drwxr-xr-x  3 root root      45 Nov 26 08:47 .
drwxr-xr-x  4 root root      35 Nov 26 08:45 ..
drwxr-xr-x 15 root root    4096 Nov 26 22:10 nut-2.7.2
-rw-r--r--  1 root root 2223307 Apr 17  2014 nut-2.7.2.tar.gz

W celu dokonaniu kompilacji oraz instalacji oprogramowania należy wykonać, sukcesywnie, następujęce czynności:

[root@filemon1 nut-2.7.2]# cd /usr/local/nut/

[root@filemon1 nut-2.7.2]# ./configure --with-user=ups --with-group=ups --with-statepath=/usr/local/ups/var/run --with-pidpath=/usr/local/ups/var/run --with-altpidpath=/usr/local/ups/var/run --with-usb

[root@filemon1 nut-2.7.2]# make

[root@filemon1 nut-2.7.2]# make install

Na tym etapie oprogramowanie powinno być prawidłowo zainstalowane, co można wstępnie sprawdzić:

[root@filemon1 /]# ls -al /usr/local/ups
total 12
drwxr-xr-x  9 root ups    84 Nov 26 22:01 .
drwxr-xr-x 14 root root  143 Nov 26 08:57 ..
drwxr-xr-x  2 root ups  4096 Nov 26 22:04 bin
drwxr-xr-x  2 root ups  4096 Nov 26 22:04 etc
drwxr-xr-x  3 root ups  4096 Nov 26 22:04 lib
drwxr-xr-x  2 root ups    61 Nov 26 22:04 sbin
drwxr-xr-x  3 root ups    50 Nov 26 22:04 share
drwxrwxr-x  2 ups  ups     6 Nov 26 21:34 upssched
drwxrwx---  3 ups  ups    16 Nov 26 22:01 var

W katalogu /usr/local/ups/etc powinny znajdować się teraz szablony plików konfiguracyjnych, które następnie powinny zostać wykorzystane do utworzenia odpowiedniej konfiguracji oprogramowania:

[root@filemon1 /]# ls -al /usr/local/ups/etc
total 84
drwxr-xr-x 2 root ups   4096 Nov 26 22:04 .
drwxr-xr-x 9 root ups     84 Nov 26 22:01 ..
-rwxr----- 1 root root  1538 Nov 26 22:04 nut.conf.sample
-rwxr----- 1 root root  3668 Nov 26 22:04 ups.conf.sample
-rwxr----- 1 root root  4578 Nov 26 22:04 upsd.conf.sample
-rwxr----- 1 root root  2131 Nov 26 22:04 upsd.users.sample
-rwxr----- 1 root root 15208 Nov 26 22:04 upsmon.conf.sample
-rwxr----- 1 root root  3921 Nov 26 22:04 upssched.conf.sample

System netserver master - Pliki konfiguracyjne


Na tym etapie należy edytować zawartość szablonów plików konfiguracyjnych Nut, znajdujących się w katalogu /usr/local/ups/etc, wprowadzając do nich poniżej przedstawione zmiany oraz zapisując edytowane pliki szablonów jako pliki konfiguracyjne, tzn. bez rozszerzenia .sample. Wszelkie zakomentowane znakiem # wiersze plików są ignorowane przez pakiet Nut, co oznacza, że wiersze, które mają być przetwarzane przez oprogramowanie Nut muszą zostać odkomentowane. Po zapisie plików konfiguracyjnych należy zwrócić uwagę na prawidłowe ustawienie atrubutów uprawnień plików, tak aby program Nut mógł odczytać ich zawartość:

-rwxr----- 1 root ups  1543 Nov 26 09:30 nut.conf
-rwxr----- 1 root ups  3786 Nov 27 08:19 ups.conf
-rwxr----- 1 root ups  4587 Nov 27 08:22 upsd.conf
-rwxr----- 1 root ups 2174 Nov 26 09:26 upsd.users
-rwxr----- 1 root ups 15185 Nov 26 09:19 upsmon.conf
-rwxr----- 1 root ups  3887 Nov 26 21:34 upssched.conf

1. Plik nut.conf


Plik nut.conf zawiera informacje o podstawowej konfiguracji oprogramowania Nut, określającej tryb pracy pakietu.

Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):

MODE=netserver

2. Plik ups.conf


Plik ups.conf jest miejscem w którym określane są nadzorowane urządzenia UPS. Plik jest wykorzystywany przez narzędzie Nut upsdrvctl do uruchamiania i zatrzymywania określonych, w specjalnych sekcjach pliku, sterowników urządzeń. Demon upsd pozyskuje z pliku informacje o urządzeniach i sterownikach.

Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):

[Eaton5130]
        driver = usbhid-ups
        port = /dev/bus/usb/002
        #desc = "Eaton5130"
        #vendor = "MGE UPS Systems"

3. Plik upsd.conf


Plik upsd.conf zawiera informacje związane z kontrolą dostępu, informacje o ewentualnych alternatywnych katalogach, w których program ma zapisywać ważne informacje o swoim działaniu, informacje o ewentualnych certyfikatach, informacje o adresie IP opraz porcie, na których demon upsd ma nadsłuchiwać oraz inne informacje.

Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):

LISTEN 192.168.0.42 3493

Powyższy adres IP powinien być zgodny z adresem IP maszyny, na której Nut działa w trybie netserver. Port 3493 powinien zostać uwzględniony w ewentualnych regułach iptables oraz/lub w ewentualnie stosowanym oprogramowaniu zapory ogniowej.

4. Plik upsmon.conf


Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):


MONITOR Eaton5130@host1 1 mike cats master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /usr/local/ups/etc/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

Należy zwrócić szczególną uwagę na to, aby w wierszu MONITOR mike i cats odpowiadały wartością dotyczącym uzytkownika i hasła, określonym w pliku upsd.users. W wierszu MONITOR słowo master oznacza, iż w razie konieczności zamknięcia systemu z powodu awarii zasilania, niniejszy system zostanie zamknięty jako ostatni, po tym jak pozostałe komputery, typu slave, nadzorujące UPS, zostaną wyłączone. Konfigurację komputerów slave opiszę w dalszej części tego artykułu.

5. Plik upsd.users 


W pliku upsd.users należy określić użytkowników oraz ich poziom uprawnień do demona upsd. Dla każdego użytkownika tworzona jest odpowiednia sekcja. Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):

[mike]
password = cats
upsmon master

6. Plik upssched.conf


Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):

CMDSCRIPT /usr/local/ups/bin/upssched-cmd
PIPEFN /usr/local/ups/upssched/pipe
LOCKFN /usr/local/ups/upssched/lock

Sprawdzenie działania sterownika UPS na systemie master


Na tym etapie warto upewnić się, że sterownik urządzenia UPS jest prawidłowo uruchamiany i nawiązuje połączenie z zasilaczem UPS wedle ustawień z pliku ups.conf.

[root@filemon1 sbin]# ./upsdrvctl start
Network UPS Tools - UPS driver controller 2.7.2
Network UPS Tools - Generic HID driver 0.38 (2.7.2)
USB communication driver 0.32
Using subdriver: MGE HID 1.33

Powyższe komunikaty świadczą o tym, że sterownik zdefiniowany w pliku ups.conf może zostać prawidłowo uruchamiany i nawiązuje połączenie z urządzeniem UPS.

Usługi pakietu Nut


W celu umożliwienia sterowania stanem usług pakietu Nut, korzystając z narzędzi systemowych service lub systemctl, w zależności od wersji systemu, poniżej przedstawiony skrypt konfiguracyjny należy umieścić w pliku /etc/rc.d/init.d/ups, ustawiając prawidłowe atrybuty uprawnień do zapisanego pliku.

Atrybuty uprawnień:
-rwxr-xr-x 1 root root 2670 Nov 26 22:01 /etc/rc.d/init.d/ups


Skrypt usługi upsd:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/ups/bin:/usr/local/ups/sbin
export PATH
. /etc/rc.d/init.d/functions
DRIVERPATH=/usr/local/ups/sbin
if [ -f /usr/local/ups/etc/ ]; then
  . /etc/ups
else
  POWERDOWNFLAG=/etc/killpower
  NUTUSER=ups
fi
UPSDCONF=/usr/local/ups/etc/upsd.conf
UPSCONF=/usr/local/ups/etc/ups.conf
[ -f $UPSDCONF ] && [ -f $UPSCONF ] || exit 0
runcmd() {
   echo -n "$1 "
   shift
   if [ "$BOOTUP" = "color" ]; then
      $* && echo_success || echo_failure
   else
      $*
   fi
   echo
}
case "$1" in
  start)
        # new style drivers uses 'upsdrvctl'
        echo -n "NUT Starting UPS model drivers: "
        # starting ase nut user
        daemon --user $NUTUSER `which /usr/local/ups/sbin/upsdrvctl` start
        echo
        if [ $? -eq 0 ]; then
                echo -n "NUT Starting UPS daemon: "
                # starting ase nut user
                daemon /usr/local/ups/sbin/upsd -u $NUTUSER
                echo
                touch /usr/local/ups/var/run/upsd.pid
        fi
        ;;
  stop)
        # new style upsd stop
        action "NUT Stopping UPS daemon" \
        /usr/local/ups/sbin/upsd -c stop
        # new style drivers uses 'upsdrvctl'
        action "NUT Stopping UPS model drivers" \
        /usr/local/ups/sbin/upsdrvctl stop
        rm -f /usr/local/ups/var/run/upsd.pid
        ;;
  powerdown)
        # new style drivers
        runcmd "NUT powerdown of attached UPS(es)" /usr/local/ups/sbin/upsdrvctl shutdown
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  reload)
        # reloading upsd config files
        action "NUT Reloading config files" \
        /usr/local/ups/sbin/upsd -c reload
        ;;
  status)
        # new style drivers
        action "NUT: checking UPS model drivers" # /usr/local/ups/sbin/upsdrvctl
        status usr/local/ups/sbin/upsd
        ;;
  *)
        echo "Usage: upsd {start|stop|powerdown|restart|reload|status}"
        exit 1
esac

Usługa /usr/local/ups/sbin/upsd powina być automatycznie uruchamiana podczas startu systemu. W tym celu należy dodać usługę upsd do usług uruchamianych podczas startu systemu.

Dla SysV:

[root@filemon1 \]# chkconfig --add ups
[root@filemon1 \]# chkconfig --level 35 ups on

Dla Systemd:
systemctl enable ups

Uruchamianie usług pakietu Nut na systemie master


Na tym etapie należy uruchomić usługi ups.

SysV:
[root@filemon1 /]# service ups start
Starting ups:                                                        [  OK  ]

Systemd:
[root@filemon1 /]# systemctl start ups

Sprawdzanie statusu usług na systemie master

Warto na tym etapie sprawdzić, czy wszystkie usługi Nut na systemie netserver (master) działają prawidłowo:

[root@filemon1 sbin]# ls -al /usr/local/ups/var/run
total 12
drwxrwx--- 2 ups  ups  96 Dec 13 23:20 .
drwxrwx--- 3 ups  ups  16 Nov 26 22:01 ..
-rw-r--r-- 1 ups  ups   6 Dec 13 23:20 upsd.pid
-rw-r--r-- 1 root root  6 Dec 13 23:20 upsmon.pid
srw-rw---- 1 ups  ups   0 Dec 13 23:20 usbhid-ups-Eaton5130
-rw-r--r-- 1 ups  ups   6 Dec 13 23:20 usbhid-ups-Eaton5130.pid

 

Odczyt informacji o zasilaczu UPS z systemu netserver (master)


Po prawidłowym uruchomieniu usług na systemie master można dokonać odczytu informacji o zasilaczu UPS za pomocą narzędzia upsc na systemie naster:

[root@filemon1 ~]# /usr/local/ups/bin/upsc Eaton5130@filemon1
battery.capacity: 9.00
battery.charge: 100
battery.charge.low: 20
battery.charge.restart: 0
battery.energysave: no
battery.protection: yes
battery.runtime: 1900
battery.type: PbAc
device.mfr: EATON
device.model: 5130 RT 3000
device.serial: ND437C4042
device.type: ups
[...]


Systemy netclient (slave) - Pliki konfiguracyjne


Na systemach slave procedura przygotowania plików konfiguracyjnych z szablonów jest analogiczna do tej, która ma zastosowanie na systemie master, natomiast w grę wchodzi mniejsza ilość plików konfiguracyjnych. Na systemach slave należy skonfigurować ustawienia wyłącznie w plikach nut.conf, upsmon.conf oraz upssched.conf. Pozostałe pliki nie są potrzebne.

1. Plik nut.conf


Tryb netclient

MODE = netclient

2. Plik upsmon.conf



MONITOR Eaton5130@192.168.0.42 1 mike cats master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /usr/local/ups/etc/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

3. Plik upssched.conf


CMDSCRIPT /usr/local/ups/bin/upssched-cmd
PIPEFN /usr/local/ups/upssched/pipe
LOCKFN /usr/local/ups/upssched/lock


Usługa upsmon - systemy netclient (slave)


Konfiguracja i uruchamianie usług pakietu Nut na systemach netclient (slave) powinny zostać przeprowadzone analogicznie do wcześniej opisanej procedury przeznaczonej dla systemów netserver (master), z tym, że w przypadku systemów netclient (slave) ustawienia pliku nut.conf - mode=netclient - będą ograniczały usługi wyłącznie do upsmon, pomijając uruchamianie zbędnego tutaj demona upsd. Usługa upsmon odpowiedzialna jest za monitorowanie stanu zasilaczy UPS zdefiniowanych w pliku upsmon.conf

Odczyt informacji o zasilaczu UPS z systemu netclient (slave)


Po prawidłowym uruchomieniu usług na systemie master oraz na systemie slave można dokonać odczytu informacji o zasilaczu UPS za pomocą narzędzia upsc na systemie slave:

[root@filemon1 ~]# /usr/local/ups/bin/upsc Eaton5130@192.168.0.42
battery.capacity: 9.00
battery.charge: 100
battery.charge.low: 20
battery.charge.restart: 0
battery.energysave: no
battery.protection: yes
battery.runtime: 1900
battery.type: PbAc
device.mfr: EATON
device.model: 5130 RT 3000
device.serial: ND437C4042
device.type: ups
[...]


Symulacja awarii zasilania


Na tym etapie warto przeprowadzić symulację awarii zasilania, która spowoduje wymuszone zamknięcie systemów na komputerach master / slave. Nie jest w tym celu konieczne wyciąganie wtyczki zasilacza UPS z kontaktu! Wystarczy, na systemie netserver (master) wywołać ponownie usługę upsmon w poniżej przedstawiony sposób:

upsmon -c fsd

piątek, 12 grudnia 2014

Pliki konfiguracyjne Linux bez zbędnych komentarzy

Pliki konfiguracyjne w systemie Linux mogą zawierać sporo wierszy, a często jest tak, że większość tych wierszy stanowią zakomentowane alternatywne, bądź opcjonalne ustawienia konfiguracyjne, lub różnego rodzaju objaśnienia oraz instrukcje. Często ogromna ilość zakomentowanych wierszy i dodatkowych objaśnień sprawiają trudność jasnego odczytu aktywnych i konkretnych ustawień w plikach.

Załóżmy, że chcemy szybko wyświetlić zawartość danego pliku konfiguracyjnego, aby dowiedzieć się jaka jest obecna konfiguracja programu, bez zbędnych komentarzy bądź alternatywnych opcji ustawień.

Na szczęście jest na to proste rowiązanie, w którym mają zastosowanie krótkie wyrażenia regularne i które pozwala szybko odczytać wyłącznie odkomentowane wiersze danego pliku, dodatkowo pomijając puste wiersze.

W przypadku, gdy wiersze zakomentowane są znakiem # :
egrep -v "^#|^$" /sciezka/do/pliku

W przypadku, gdy wiersze zakomentowane są znakiem ; :
egrep -v "^#|^$" /sciezka/do/pliku

Powyższe rozwiązanie można uzupełnić narzędziem less, co staje się przydatne w przypadku sporej wielkości plików, których zawartość można wtedy przeglądać korzystając ze strałek góra / dół. Aby zakończyć działanie narzędzia less należy wcisnąć klawisz q.

egrep -v "^#|^$" /sciezka/do/pliku | less

Przykładowo:

 egrep -v "^;|^$" /etc/php.ini  | less

W celu wyświetlania pustych wierszy w plikach, należy pominąć wyrażenie ^$, przykładowo:

egrep -v "^;" /etc/php.ini  | less

Mam nadzieję, że ta prosta porada będzie pomocna.

czwartek, 11 grudnia 2014

MySQL + InnoDB - Klucze obce

Serwer bazodanowy MySQL umożliwia korzystanie z wielu różnych silników tabel. Najbardziej popularne silniki tabel MySQL to MyIsam oraz InnoDB, choć silników obsługiwanych przez MySQL jest wiele, np. Blackhole, csv, Federated, Falcon, TokuDB, XtraDB, Connect. Niektóre z nich są mało popularne i służą jedynie do bardzo konkretnych zastosowań.

W niniejszym artykule zostaną opisane niektóre ciekawe cechy silnika InnoDB, sprawiające iż jest on pierwszego wyboru narzędziem w aplikacjach bazodanowych wymagających integralności danych oraz spójności i bezpieczeństwa transakcji.

W przeciwieństwie do tabel MyIsam, których mechanizmy zostały zaprojektowane z myślą o podstawowych aplikacjach internetowych i prostocie działania, tabele InnoDB, które przede wszystkim, w przeciwieństwie do MyIsam, są zgodne ze standardem http://en.wikipedia.org/wiki/ACID, zapewniają dużą wydajność, efektywność, wiarygodność transakcji oraz integralność danych dzięki fantastycznym mechanizmom transakcyjnym, kluczom obcym, zaawansowanemu mechanizmowi blokowania tabel na poziomie wiersza jak również mechanizmom automatycznego naprawiania tabel na podstawie logów serwera.

Tabele InnoDB są standardowo obsługiwane przez serwer MySQL. Od wersji serwera MySQL 5.5 silnik InnoDB jest domyślnym silnikiem tabeli. Korzystając jednak z poprzednich wersji serwera, w których domyślnym silnikiem tabeli jest MyIsam, aby utworzyć tabele InnoDB, należy określić ich silnik, jak w poniższym przykładzie, który przyda się również do omówienia kluczy obcych oraz mechanizmów transakcyjnych InnoDB:

mysql> create table klienci (
-> id smallint unsigned not null auto_increment primary key,
-> nazwa varchar(40) not null,
-> imie varchar(20) not null,
-> nazwisko varchar(20) not null,
-> adres varchar(20) not null,
-> kod_pocztowy varchar(6) not null,
-> miejscowosc varchar(40) not null,
-> kraj tinyint unsigned not null ) engine=InnoDb charset utf8;
Query OK, 0 rows affected (0.01 sec)


W niniejszym artykule omówię klucze obce, które zapewniają integralność danych przechowywanych w tabelach InnoDB.

Klucz obcy zapewnia spójność danych przechowywanych w polu tabeli, do której zostaje on przypisany, z wartością klucza znajdującego się w polu tabeli, do której klucz obcy się odnosi.

Aby umożliwić większą przejrzystość pojęcia, posłużę się prostymi przykładami.

Przedstawię teraz metodę dodawania kluczy obcych w przypadku istniejących już tabeli, w których dodawany klucz obcy ma zapewnić spójność danych.

Uprzednio utworzona tabela 'klienci' zawiera pole 'kraj':

`kraj` smallint(3) unsigned NOT NULL

Zdefiniowane w powyższy sposób pole, przyjmujące wartości numeryczne smallint, przewiduje istnienie osobnej tabeli, zawierającej klucze i nazwy państw:

mysql> create table kraje (
-> id tinyint unsigned not null auto_increment primary key,
-> nazwa varchar(30) not null,
-> kod char(2) ) engine=InnoDb charset utf8;
Query OK, 0 rows affected (0.01 sec)

Aby zapewnić spójność danych przechowywanych w tabelach 'klienci' i 'kraje' oraz umożliwić zapisanie w polu 'kraj' tabeli 'klienci' wyłącznie takich wartości, które istnieją również w polu 'id' tabeli 'kraje', należy do tabeli 'klienci' dodać klucz obcy odnoszący się do pola 'id' tabeli 'kraje', a można to uczynić w sposób następujący:

mysql> alter table klienci add foreign key(`kraj`) references kraje(`id`);
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0

Powyżej przedstawiona metoda dodania klucza obcego jest skuteczna wyłącznie w okolicznościach gdy istniejąca już tabela 'klienci' jest pusta, czyli nie zawiera danych, lub gdy tabela 'klienci' zawiera już dane lecz w jej polu 'kraj' istnieją wyłącznie wartości obecne również w polu 'id' tabeli 'kraje'. Powyższa metoda dodania klucza obcego nie może się natomiast udać w przypadku istnienia w polu 'kraj' tabeli 'klienci' wartości nie istniejących w polu 'id' tabeli 'kraje'. W takim przypadku, podczas próby dodania wyżej przedstawionego klucza obcego, pojawia się następujące powiadomienie o błędzie:

mysql> alter table klienci add foreign key(`kraj`) references kraje(`id`);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`softlink/#sql-290_21a1`, CONSTRAINT `#sql-290_21a1_ibfk_1` FOREIGN KEY (`
kraj`) REFERENCES `kraje` (`id`))

Powyższy komunikat o błędzie jest spowodowany próbą dodania klucza obcego podczas obecności w polu 'kraj' tabeli 'klienci' wartości nie obecnych w polu 'id' tabeli 'kraje', czyli w sytuacji, w której przewidywana przez klucz obcy spójność danych a priori nie może się spełnić.

Po dodaniu klucza obcego można sprawdzić jego obecność:

mysql> show create table klienci;

Efektem zatwierdzenia powyższego polecenia wyświetla się:

CREATE TABLE `klienci` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`nazwa` varchar(40) NOT NULL,
`imie` varchar(20) NOT NULL,
`nazwisko` varchar(20) NOT NULL,
`adres` varchar(20) NOT NULL,
`kod_pocztowy` varchar(6) NOT NULL,
`miejscowosc` varchar(40) NOT NULL,
`kraj` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `kraj` (`kraj`),
CONSTRAINT `klienci_ibfk_1` FOREIGN KEY (`kraj`) REFERENCES `kraje` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |


Powyższe wiersze potwierdzają obecność prawidłowo dodanego klucza obcego.
Po dodaniu powyżej opisanego klucza obcego, w polu 'kraj' tabeli 'klienci' mogą być zapisywane wyłącznie wartości, które są również obecne w polu 'id' tabeli 'kraje', a próba zlekceważenia tej reguły spowoduje błąd i wyświetlenie odpowiedniego powiadomienia o błędzie:


mysql> insert into klienci values('','JAN','Jan','Kowalski','ul. Fajna, 1','00-001','Przypadkowe miasto',1);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`softlink/klienci`, CONSTRAINT `klienci_ibfk_1` FOREIGN KEY (`kraj`) REFER
ENCES `kraje` (`id`))

Natomiast:

mysql> insert into kraje(nazwa,kod) values('Polska','PL');
Query OK, 1 row affected (0.00 sec)

mysql> select * from kraje;
+----+--------+------+
| id | nazwa | kod |
+----+--------+------+
| 1 | Polska | PL |
+----+--------+------+
1 row in set (0.00 sec)

mysql> insert into klienci values('','JAN','Jan','Kowalski','ul. Fajna, 1','00-001','Przypadkowe miasto',1);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from klienci;
+----+-------+------+----------+--------------+--------------+--------------------+------+
| id | nazwa | imie | nazwisko | adres | kod_pocztowy | miejscowosc | kraj |
+----+-------+------+----------+--------------+--------------+--------------------+------+
| 1 | JAN | Jan | Kowalski | ul. Fajna, 1 | 00-001 | Przypadkowe miasto | 1 |
+----+-------+------+----------+--------------+--------------+--------------------+------+
1 row in set (0.00 sec)

poniedziałek, 8 grudnia 2014

Interfejs SATA

Interfejs  SATA


Najpopularniejszymi dziś dyskami twardymi do ogólnych zastosowań są niewątpliwie urządzenia SATA.

SATA ("Serial Advanced Technology Attachment”) to interfejs służący do przyłączania dysków twardych oraz napędów optycznych do komputera. Aby dyski twarde mogły być podłączone do komputera według specyfikacji SATA, zarówno interfejs kontrolera dysków, jak i interfejs dysków, muszą być zgodne ze standardem SATA. Interfejs SATA powstał w wyniku udoskonalenia wycofanego już z obiegu i wysłużonego interfejsu ATA, znanego także pod nazwą PATA („Parallel ATA”). Od swojego poprzednika współczesny interfejs SATA różni się nie tylko o wiele lepszymi osiągami z zakresu odczytu i zapisu danych, ale także trybem HotSwap, czyli możliwością podłączania dysków bez konieczności wyłączania komputera, oraz udoskonaloną konstrukcją taśmy danych. HotSwap to bardzo fajna cecha nowoczesnych napędów SATA, która umożliwia natychmiastowe wykrycie przez system podłączanych „na gorąco” urządzeń pamięci masowej. W przypadku starych napędów PATA, aby podłączyć dysk, należało wyłączyć komputer, po czym podłączyć dysk i ponownie uruchomić maszynę. Często ponadtwo, w zależności od ustawień i rodzaju BIOSa, konieczne było także wejście do ustawień BIOSa i wymuszenie wykrycia podłączonego dysku, aby można było z niego prawidłowo korzystać.

Taśma danych SATA


Taśmy danych urządzeń SATA zawierają tylko 7 przewodów, co jest ogromnym postępem w porównaniu z 40 (lub 80) żyłami taśmy ATA (PATA). Złącze zasilania napędów SATA jest o wiele mniejsze od klasycznego złącza stosowanego w napędach ATA. To też bardzo istotne, szczególnie gdy w obudowie znajduje się więcej dysków.


Kabel - taśma - SATA
Kabel, a właściwie taśma - SATA

Do przesyłania danych w systemie SATA wykorzystywane są tylko 2 pary przewodów. Stary system PATA był natomiast o wiele bardziej skomplikowany, oparty na 16 bitowej szynie danych i wykorzystywał wiele dodatkowych sygnałów kontrolnych, do czego służyła duża ilość żył i co czyniło rozwiązanie bardzo powolnym.

Taśma danych SATA może mieć maksymalną długość 1m, w porównaniu do limitu 45 centymetrów taśmy danych ATA. Taśma danych SATA służy do podłączenia jednego napędu do kontrolera, w przeciwieństwie do specyfikacji ATA, która umożliwiała podłączenie do 2 napędów za pomocą jednej taśmy. 40 żyłowe taśmy PATA umożliwiały podłączenie 1 napędu do kontrolera, natomiast ich 80 żyłowe wersje z 3 złączami, mogły obsługiwać do 2 napędów w systemie master/slave, w którym dodatkowym utrudnieniem była konieczność ustawiania zworek urządzeń.

Taśmy danych SATA zajmują mało miejsca w obudowie komputera. Jest to szczególnie ważne w przypadku stosowania dużej ilości dysków wewnętrznych, ponieważ nowoczesne taśmy SATA nie powodują obstrukcji przepływu powietrza i nie zakłócają prawidłowego chłodzenia wnętrza obudowy. Najbardziej znane warianty taśmy SATA różnią się między sobą kształtem złącza oraz ewentualną obecnością zabezpieczeń przed przypadkowym wysunięciem z gniazda, co nieraz może się wiązać z utratą ważnych danych. Najbardziej popularne kolory taśm SATA to czerwony i pomarańczowy, choć powszechne są również zielone i niebieskie.

Rozwój interfejsu SATA


Pierwsza generacja interfejsu SATA (SATA Rev. 1.0), która zadebiutowała w roku 2003, umożliwiała wewnętrzną przepustowość danych rzędu 1.5Gb/s, natomiast zewnętrzny transfer dochodził do około 150Mb/s. Napędy wykonane w początkowej wersji interfejsu SATA były wyposażone w specjalny układ umożliwiający zachowanie pełniej kompatybilności z interfejsem PATA i posiadały 2 standardy złącza zasilania: jedno w stylu ATA, a drugie w stylu SATA. Napędy SATA pierwszej generacji nie obsługiwały specyfikacji NCQ („Native Command Queuing”). Osiągi pierwszej generacji dysków SATA były bardzo porównywalne do technologii ATA.

Kolejna generacja dysków twardych SATA (SATA Rev. 2.0), która pojawiła się kilka lat później, umożliwiała podwojenie osiągów dotyczących przepustowości danych: przepustowość wewnętrzna rzędu 3.0Gb/s oraz zewnętrzna rzędu 300Mb/s.

Napędy SATA III generacji (SATA Rev. 3.0) umożliwiają przepustowość rzędu 6Gb/s (600Mb/s) i obsługują wiele innowatorskich rozwiązań, takich jak izochroniczne NCQ.

Nowsza specyfikacja SATA w wersji 3.2 umożliwia umożliwia jeszcze wyższe osiągi pod względem prędkości odczytu i zapisu danych: wewnętrzny transfer wynosi aż 16 Gb/s natomiast maksymalny zewnętrzny transfer to 1969 MB/s.

Specyfikacja SATA umożliwia również pełną obsługę zewnętrznych napędów. Zewnętrzna odmiana interfejsu SATA, tak zwany eSATA, umożliwia podłączenie dysków zewnętrznych z komputerem za pomocą taśmy o długości do 2 metrów. Specyfikacja eSATA umożliwia wysoki transfer danych i nie ogranicza pełnych możliwości zewnętrznego dysku twardego, w przeciwieństwie do tego co dzieje się w przypadku łączenia z komputerem dysków SATA umieszczonych w zewnętrznych obudowach ze złączem USB lub FireWire.

Rodzaje napędów SATA


Oprócz napędów optycznych na złącze SATA, istnieje wiele odmian dysków twardych SATA. Dyski twarde SATA 3.5 calowe są zazwyczaj stosowane w komputerach stacjonarnych. W urządzeniach mobilnych znajdują zastosowanie mniejsze napędy 2.5 oraz 1.8 calowe. Dostępne są również dyski twarde mSATA. Są to miniaturowe dyski SSD, stosowane generalnie w systemach mobilnych. Ich następcami są natomiast tak zwane dyski M.2 Next Generation Form Factor (NGFF), które są gabarytowo jeszcze mniejsze i nadają się idealnie do ultra-lekkich urządzeń mobilnych i tabletów.

Najszybszą odmianą dysków twardych SATA są dyski SSD, generalnie stosowane w laptopach, nie tylko ze względu na ich zwiększoną odporność na wstrząsy, ale także ze względu na mniejszą wagę.
Dyski SSD nie posiadają elementów mechanicznych, co radykalnie wpływa na prędkość zapisu i odczytu danych. 
Ciekawostką jest to, że dyski SATA mogą być obsługiwane przez kontrolery dysków SAS, natomiast kontrolery SATA nie mogą obsługiwać dysków SAS :-)


Dyski SATA
Przykładowe napędy pamięci masowej SATA


Kontrolery SATA


Oprócz kontrolerów SATA, które dziś wbudowywane są w większość płyt głównych przeznaczonych do komputerów PC i serwerów, obecnie na runku można znaleźć sporą różnorodność kontrolerów SATA przeznaczonych do zamontowania w kilku odmiennych złączach, przykładowo PCI Express oraz PCI-X. Bardzo popularne są kontrolery SATA 3 na złącze PCI Express, które gwarantują wysoką przepustowość danych po przystępnej cenie i mogą być z powodzeniem stosowane w komputerach z tego typu złączem, które, przykładowo, nie obsługują specyfikacji SATA 3. Daje to możliwość cieszenia się w pełni z wydajnych dysków SATA 3, bez konieczności wymiany całego komputera. Zaawansonawe kontrolery SATA 3 na złączu PCI Express mogą oferować ciekawe rozwiązania i funkcje, takie jak przykładowo obsługa różnych trybów RAID, co umożliwia zwiększenie wydajności systemu i podniesienie bezpieczeństwa danych poprzez jednoczesny zapis / odczyt danych NA lub Z wielu nośników, w zależności od wybranego trybu RAID. Dostępne na rynku, choć obecnie bardzo kosztowne, są również syperwydajne kontrolery dysków SATA na złącze PCI Express, które posiadają wbudowaną pamięć masową typu SSD.

Kontroler SATA 3 - PCI Express
Kontroler SATA 3 na złącze PCI Express z wbudowanym dyskiem SSD


 

Na co należy zwrócić uwagę przed zakupem


Różnorodność obecnie panujących na runku specyfikacji interfejsu SATA może początkowo wprowadzić laika w niemałe osłupienie. Przy zakupie nowego dysku SATA należy dokładnie sprawdzić czy komputer, na którym dysk ma zostać zamontowany, posiada złącze SATA w specyfikacji odpowiadającej wersji interfejsu nowego dysku. Nie ma bowiem sensu inwestowania pieniędzy w najnowszy dysk SATA, jeżeli interfejs komputera obsługuje starszą wersję specyfikacji, ponieważ możliwości nowego dysku, poza jego pojemnością, nie zostaną w pełni wykorzystane. W takim przypadku rozwiązania są mnogie, a przykładowo:

dodatkowo do nowego dysku można zakupić kontroler w pełni obsługujący dysk, pod warunkiem że komputer posiada odpowiednie złącze, np. PCI Express, którego też są różne odmiany i na co też należy zwracać należytą uwagę;

można zakupić kontroler SATA najnowszej generacji na złącze PCI Express - pod warunkiem iż komputer posiada takie złącze w wymaganej przez kontroler wersji - z wbudowanym dyskiem SSD;

można pozostać przy starej wersji interfejsu i zakupić odpowiedni dysk, np. na Allegro, przeważnie oszczędzając niemałą kwotę lub, pozostając przy takiej samej kwocie, wybrać dysk o większej pojemności.

Generalnie warto unikać dysków SATA "zewnętrznych" ze złączem USB, ale także ze złączem FireWire. Tego typu dyski są często stosowane jako dodatkowa pamięć masowa. Rozwiązania tego typu są bardzo powszechne na rynku, ale nie mają większego sensu z powodu wąskiego kanału przepustowości, jaki tworzy się przy mostkowaniu tego typu złączy.





piątek, 5 grudnia 2014

Linux Smartmontools. Smartctl i smartd. Automatyczna diagnostyka dysków twardych

Wstęp


Narzędzie smartctl, jak sama nazwa tłumaczy (SMART - control), słuzy do kontrolowania, znajdującego się w większości nowoczesnych dysków twardych ATA/SATA i SCSI/SAS, systemu autodiagnozy, analizy oraz raportowania, który nosi nazwę SMART. Celem wbudowanego do urządzeń pamięci masowej systemu SMART jest oszacowywanie ich poziomu niezawodności. System SMART przeprowadza różnego rodzaju testy na dyskach w celu uzyskania precyzyjnej informacji o ich stanie technicznym. Narzędzie smartctl uzyskuje informacje o stanie technicznym dysków twardych przejmując kontrolę nad sprzętowym systemem SMART. Smartcl to przydatne i sprawnie działające oprogramowanie, posiadające bardzo dużą ilość opcji, mniej lub bardziej przydatnych, w zależności od celu, jaki pragnie się osiągnąć.

W tym artykule postaram się przedstawić kilka ogólnie przydatnych funkcji narzędzia smartcl oraz wyjaśnić metodę stałego nadzoru dysków, której stosowanie ogólnie zalecam na serwerach produkcyjnych oraz na maszynach, na których przechowywane są cenne dane.

Instalacja pakietu Smartmontools


Aby móc korzystać z aplikacji Smartmontools, można pozyskać oprogramowanie kierując się oficjalnymi instrukcjami. Można również, w zależności od stosowanej dystrybucji Linux, posłużyć się przykładowo narzędziem apt-get lub yum:

sudo apt-get install smartmontools

yum install smartmontools


Sprawdzanie kompatybilności dysków z systemem SMART


Po pomyślnie przeprowadzonej instalacji pakietu Smartmontools, oraz przed podjęciem kolejnych
kroków z zainstalowanym oprogramowaniem, zalecam sprawdzenie kompatybilności dysków twardych z systemem SMART. Aby sprawdzić, czy dyski posiadają wbudowany układ SMART i są
kompatybilne z narzędziem smartcl, należy wykonać następujące działanie, oczywiście podmieniając
według potrzeb nazwę urządzeń (/dev/sda, /dev/sdb):

[root@filemon1 ~]# smartctl -i /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-123.9.2.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Constellation ES.3
Device Model:     ST1000NM0033-9ZM173
Serial Number:    Z1W27MWP
LU WWN Device Id: 5 000c50 06721230e
Firmware Version: SN04
User Capacity:    1,000,204,886,016 bytes [1.00 TB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-2 (minor revision not indicated)
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Thu Dec  4 10:18:11 2014 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

[root@filemon1 ~]# smartctl -i /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-123.9.2.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Constellation ES.3
Device Model:     ST1000NM0033-9ZM173
Serial Number:    Z1W27NB6
LU WWN Device Id: 5 000c50 067210b28
Firmware Version: SN04
User Capacity:    1,000,204,886,016 bytes [1.00 TB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-2 (minor revision not indicated)
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Thu Dec  4 10:18:16 2014 CET
SMART support is: Available - device has SMART capability.

Informacje wyświetlone powyżej, wskazują iż oba zapytane przykładowe urządzenia są
wyposażone w system SMART, oraz iż na obu dyskach system SMART jest włączony.

W przypadku, gdyby urządzenie było wypasażone w system SMART, lecz system SMART był by wyłączony, należałoby go włączyć, przed podjęciem kolejnych kroków z oprogramowaniem, w następujący sposób:
[root@filemon1 ~]# smartctl -s on /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-123.9.2.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Enabled.

Odpytywanie dysków


Aby oszacować stan techniczny dysku twardego, należy wydać następujęce polecenie, odpowiednio zastępując nazwę urządzenia:

[root@filemon1 ~]# smartctl -H /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-123.9.2.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

W powyższym przykładzie wynik testu "PASSED" oznacza, iż system SMART nie ma zastrzeżeń co do stanu technicznego testowanego urządzenia. Wynik inny niż powyższy, może oznaczać kłopoty z dyskiem. W takim przypadku najlepiej będzie jak najszybciej zabezpieczyć dane i podmienić dysk na sprawny.

Aby sprawdzić ogólne cechy urządzenia i dowiedzieć się, między innymi, czy dysk obsługuje autodiagnozę, należy uruchomić narzędzie smartctl z opcją -c (capabilities), wedle poniższego przykładu:

[root@filemon1 ~]# smartctl -c /dev/sda 
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-123.9.2.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
General SMART Values:
Offline data collection status:  (0x82) Offline data collection activity
                                        was completed without error.
                                        Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.
Total time to complete Offline
data collection:                (  584) seconds.
Offline data collection
capabilities:                    (0x7b) SMART execute Offline immediate.
                                        Auto Offline data collection on/off support.
                                        Suspend Offline collection upon new
                                        command.
                                        Offline surface scan supported.
                                        Self-test supported.
                                        Conveyance Self-test supported.
                                        Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine
recommended polling time:        (   1) minutes.
Extended self-test routine
recommended polling time:        ( 114) minutes.
Conveyance self-test routine
recommended polling time:        (   2) minutes.
SCT capabilities:              (0x50bd) SCT Status supported.
                                        SCT Error Recovery Control supported.
                                        SCT Feature Control supported.
                                        SCT Data Table supported.

Co oznaczają te wszystkie informacje? Jest ich sporo, ale znaczenie większości z nich powinno być raczej jasne. "Offline data collection status" to status zbierania informacji o stanie dysku w trybie offline. Chodzi konkretnie o status zbierania danych o stanie dysku, poprzez testy wykonywane offline, czyli wtedy, gdy dysk nie jest zajęty innymi czynnościami. Testy offline nie obniżają ogólnej wydajności systemu, ponieważ wykonywane są one tylko wtedy, gdy dysk jest wolny od zadań, a w każdym razie przerywane są natychmiast, gdy dysk staje się zajęty innymi zadaniami. Automatyczne testy offline mogą być dowolnie włączane lub wyłączane narzędziem smartcl, korzystając z opcji -o lub opcji --offlineauto= z parametrami on lub off:

[root@filemon1 ~]# smartctl -o on /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-123.9.2.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Automatic Offline Testing Enabled every four hours.

Z pośród wyżej wyświetlonych informacji o cechach odpytanego dysku, bardzo przydatne są oszacowane czasy wykonania poszczególnych testów. Z wyświetlonego przykładu wynika, iż na wykonanie rozszerzonego testu autodiagnostycznego, odpytane urządzenie potrzebuje około 114 minut.

Autodiagnoza dysków


Narzędzie smartctl umożliwia wykonywanie bardzo dokładnych testów autodiagnostycznych na dyskach. Aby ręcznie uruchomić krótki i podstawowy test autodiagnostyczny, można posłużyć się poniższym przykładem, odpowiednio zastępując nazwę dysku:


[root@filemon1 ~]# smartctl -t short /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-123.9.2.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 1 minutes for test to complete.
Test will complete after Fri Dec  5 08:22:45 2014

Use smartctl -X to abort test.

Po upływie przewidywanego czasu, potrzebnego na wykonanie krótkiego testu, aby sprawdzić wyniki, należy skorzystać z narędzia smartctl w następujący sposób:

[root@filemon1 ~]# smartctl -l selftest /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-123.9.2.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%       586         -
# 2  Short offline       Completed without error       00%       182         -

Zostaje wówczas wyświetlona tabela, zawierająca informacje o wszystkich testach autodiagnostycznych wykonanych dotychczas na dysku. Co oznaczają te wszystkie dane? Pierwsze dwie kolumny tabeli wskazują numer oraz typ wykonanego testu. Kolumna 'Status' to kolumna zawierająca status testu. Kolumna 'Remaining' wskazuje pozostały czas wykonania testu, kolejna kolumna zawiera informacje dotyczące czasu wykonania testu w postaci godzin pracy dysku, począwszy od pierwszego uruchomienia urządzenia, natomiast w ostatniej kolumnie zawarty jest adres pierwszego bloku dysku zawierającego ewentualnie wykryty błąd.

Informacje dotyczące danego testu można wyświetlić nawet w trakcje jego wykonywania, np. po to, aby się dowiedzieć ile jeszcze czasu pozostało do ukończenia autodiagnozy. Jest to fajna sprawa, szczególnie gdy wykonuje się długi test autodiagnostyczny, który może trwać wiele godzin. Można wówczas co jakiś czas sprawdzać postęp autodiagnozy:

[root@filemon1 ~]# smartctl -l selftest /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-123.9.2.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%       597         -
# 2  Extended offline    Completed without error       00%       588         -
# 3  Short offline       Completed without error       00%       586         -
# 4  Short offline       Completed without error       00%       182        

Automatyzacja testów i raportowanie


Testy diagnostyczne można zautomatyzować za pomocą usługi smartd, aby ich ręczne wykonywanie nie było konieczne. W tym celu należy odpowienio skonfigurować usługę smartd za pomocą pliku konfiguracyjnego smartd.conf.

W pliku smartd.conf powinien znajdować się odkomentowany wiersz rozpoczynający się od hasła DEVICESCAN, przykładowo:

DEVICESCAN -H -m root -M exec /usr/libexec/smartmontools/smartdnotify -n standby,10,q

Dyrektywa DEVICESCAN powoduje automatyczne wykrycie wszelkich dysków w systemie, oraz zastosowanie do nich ustalonych w opcjach procedur.

Pierwszy napotkany w pliku smartd.conf wiersz, rozpoczynający się od hasła DEVICESCAN, powoduje zignorowanie przez usługę smartd wszelkich kolejnych wierszy pliku. Dostosowanie pliku konfiguracyjnego smartd.conf do własnych potrzeb należy więc rozpocząć od zakomentowania wszelkich wierszy rozpoczynających się od hasła DEVICESCAN, wstawiając na samym początku każdego takiego wiersza znak #:

#DEVICESCAN -H -m root -M exec /usr/libexec/smartmontools/smartdnotify -n standby,10,q

Plik smartd.conf przyjmuje sporą ilość różnych dyrektyw z rozmaitymi opcjami. Są również opcje przeznaczone dla konkretnych urządzeń sterujących dyskami, przykładowo kontroler HighPoint Rocket Raid lub kontroler 3ware 9000. Warto dokładnie przestudiować manual smartd.conf.

Zakładając, że w systemie są 2 dyski, /dev/sda oraz /dev/sdb, aby ustawić ich automatyczny nadzór i raportowanie ewentualnych problemów na wskazany adres mailowy, można dodać do pliku /etc/smartd.conf następujące wiersze, które należy dostosować do własnych potrzeb:

###########################################################################
# Nadzoruj wszelkie parametry wskazanych dysków
# Wykonuj w każdy piątek długi test diagnostyczny na urządzeniach /dev/sda, /dev/sdb
# Wysyłaj powiadomienia o problemach z dyskami na wskazany adres email
# Godziny rozpoczynania długiego testu: 18.00 dla dysku /dev/sda oraz 22.00 dla dysku /dev/sdb
#
/dev/sda -a -m j.kowalski@kowalski.pl -d auto -s L/../../5/18
/dev/sdb -a -m j.kowalski@kowalski.pl -d auto -s L/../../5/22
############################################################################

W powyższym przykładzie konfiguracji usługi smartd, dni tygodnia oznaczane są cyframi od 1 do 7 (po czym podane są godziny rozpoczęcia testów), -a oznacza standardowe monitorowanie (wszystkie parametry), -m wskazuje adres mailowy do ewentualnych powiadomień, -d oznacza typ urządzenia (generalnie zalecana jest opcja auto), -s powoduje uruchomienie testów gdy data będzie zgodna ze wskazanym wzorcem regexp, natomiast L oznacza długi test autodiagnostyczny.

Po odpowiednim ustawieniu opcji monitorowania i raportowania w pliku smartd.conf, należy upewnić się, że usługa zostanie włączona podczas startu systemu oraz aktywować usługę. Warto również sprawdzić status aktywowanej usługi smartd. W dystrybucjach wyposażonych w nowy Systemd można to zrobić w następujący sposób:

[root@filemon1 smartmontools]# systemctl enable smartd
ln -s '/usr/lib/systemd/system/smartd.service' '/etc/systemd/system/multi-user.target.wants/smartd.service'
[root@filemon1 smartmontools]# systemctl start smartd
[root@filemon1 smartmontools]# systemctl status smartd
smartd.service - Self Monitoring and Reporting Technology (SMART) Daemon
   Loaded: loaded (/usr/lib/systemd/system/smartd.service; enabled)
   Active: active (running) since Wed 2014-11-26 22:20:29 CET; 1 weeks 1 days ago
 Main PID: 1058 (smartd)
   CGroup: /system.slice/smartd.service
           └─1058 /usr/sbin/smartd -n -q never

Dec 05 10:12:40 filemon1 smartd[1058]: Device: /dev/sda [SAT], ST1000NM0033-9ZM173, S/N:Z1W27MWP, WWN:5-000c50-06721230e, FW:SN04, 1.00 TB
Dec 05 10:12:40 filemon1 smartd[1058]: Device: /dev/sda [SAT], found in smartd database: Seagate Constellation ES.3
Dec 05 10:12:40 filemon1 smartd[1058]: Device: /dev/sda [SAT], is SMART capable. Adding to "monitor" list.
Dec 05 10:12:40 filemon1 smartd[1058]: Device: /dev/sdb, type changed from 'scsi' to 'sat'
Dec 05 10:12:40 filemon1 smartd[1058]: Device: /dev/sdb [SAT], opened
Dec 05 10:12:40 filemon1 smartd[1058]: Device: /dev/sdb [SAT], ST1000NM0033-9ZM173, S/N:Z1W27NB6, WWN:5-000c50-067210b28, FW:SN04, 1.00 TB
Dec 05 10:12:40 filemon1 smartd[1058]: Device: /dev/sdb [SAT], found in smartd database: Seagate Constellation ES.3
Dec 05 10:12:40 filemon1 smartd[1058]: Device: /dev/sdb [SAT], is SMART capable. Adding to "monitor" list.
Dec 05 10:12:40 filemon1 smartd[1058]: Monitoring 2 ATA and 0 SCSI devices
Dec 05 10:27:52 filemon1 systemd[1]: Started Self Monitoring and Reporting Technology (SMART) Daemon.
 

czwartek, 4 grudnia 2014

Open Office - MySQL

Wstęp 


Apache Open Office to nie tylko świetny i zupełnie darmowy pakiet biurowy, idealnie zastępujący drogie aplikacje Microsoft, ale co najwazniejsze, jest to bardzo dobrze zaprojektowane i otwarte na modułową rozbudowę oprogramowanie, które, za pomocą drobnych dodatków, bez większego wysiłku można połączyć z innymi aplikacjami, w tym także z serwerem MySQL.  

W tym artykule wyjaśnię jak połączyć się z serwerem bazy danych MySQL (w tym konkretnym przypadku MariaDB) z poziomu Open Office oraz w jaki sposób pozyskiwać dane do arkusza kalkulacyjnego  z wybranej bazy danych i tabeli.

Stosowane wersje oprogramowania


W celach niniejszego artykułu zastosowałem poniżej wymienione oprogramowanie:

Komputer z zainstalowanym pakietem OpenOffice
System operacyjny Windows 8.1 Pro;
Apache Open Office v. 4.0.1;
Sterownik (rozszerzenie) MySQL do Apache Open Office, v. 1.2.0 - do pobrania tutaj
 
Serwer MySQL
System operacyjny Linux Centos 7.0 x86_64;
Serwer MariaDB v. 5.5.40


Firewall


Jeżeli na serwerze uruchomione jest oprogramowanie pełniące rolę firewalla, to należy umożliwić nawiązanie połączenia mysql z serwerem, poprzez dodanie odpowiednich reguł lub portów.

Przykładowo, w przypadku stosowania Firewalld, w zależności od skonfigurowanych w oprogramowaniu stref, można posłużyć się poleceniem typu:

[root@filemon1 ~]# firewall-cmd --permanent --zone=internal --add-service mysql
success

Utworzenie bazy danych i tabeli na serwerze MySQL


Na serwerze MySQL należy utworzyć nową bazę danych i wymagane tabele i ewentualnie wprowadzić do tabeli początkowe dane. Dla przykładu tworzę bazę danych noszącą nazwę OpenOffice, oraz jedną bardzo prostą, przykładową tabelę o nazwie kartoteka, do której wprowadzam kilka początkowych wierszy danych.

[root@filemon1 ~]# mysql -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3624
Server version: 5.5.40-MariaDB MariaDB Server

Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database OpenOffice;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use OpenOffice;
Database changed
MariaDB [OpenOffice]> create table kartoteka (
    -> id tinyint unsigned not null auto_increment primary key,
    -> nazwisko varchar(30) not null,
    -> imie varchar(20) not null,
    -> adres varchar(40) not null,
    -> miasto varchar(20) not null
    -> ) engine=InnoDB charset utf8;
Query OK, 0 rows affected (0.08 sec)

MariaDB [OpenOffice]> insert into kartoteka values('','Kowalski','Jan','ul. Kowalskiego Jana, 1','Warszawa'),('','Kowalski','Janek','ul. Kowalskiego Janka, 1','
Warszawa'),('','Kowalski','Jasiek','ul. Kowalskiego Jaśka, 1','Warszawa');
Query OK, 3 rows affected, 3 warnings (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 3

MariaDB [OpenOffice]> select * from kartoteka;
+----+----------+--------+---------------------------+----------+
| id | nazwisko | imie   | adres                     | miasto   |
+----+----------+--------+---------------------------+----------+
|  1 | Kowalski | Jan    | ul. Kowalskiego Jana, 1   | Warszawa |
|  2 | Kowalski | Janek  | ul. Kowalskiego Janka, 1  | Warszawa |
|  3 | Kowalski | Jasiek | ul. Kowalskiego Jaśka, 1  | Warszawa |
+----+----------+--------+---------------------------+----------+
3 rows in set (0.00 sec)

Tworzenie użytkownika MySQL oraz nadawanie uprawnień


Należy utworzyć użytkownika MySQL, który będzie stosowany do połączeń z serwerem z programu OpenOffice. Należy nadać użytkownikowi hasło oraz odpowiednie uprawnienia, w zależności od potrzeb:
MariaDB [(none)]> grant usage on *.* to 'OpenOfficeUser'@'%' identified by 'OpenOfficePass';
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> grant insert, select, update, delete on OpenOffice.kartoteka to 'OpenOfficeUser'@'%';
Query OK, 0 rows affected (0.00 sec)
Powyższe polecenie GRANT powoduje nadanie przykłądowych uprawnień (wstawianie wierszy danych, odczyt wierszy danych, aktualizacja danych oraz usuwanie danych) użytkownikowi o nazwie OpenOfficeUser (łączącego się z serwerem MySQL z dowolnego hosta) do tabeli kartoteka, należącej do bazy danych o nazwie OpenOffice. Posługując się poleceniem GRANT można nadawać utworzonemu uzytkownikowi dowolne uprawnienia.
Po pomyślnym utworzeniu użytkownika i nadaniu mu odpowiednich uprawnień warto wykonać polecenie FLUSH PRIVILEGES i sprawdzić aktualne uprawnienia użytkownika:

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> show grants for 'OpenOfficeUser'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE ON `OpenOffice`.`kartoteka` TO 'OpenOfficeUser'@'%'

Instalacja rozszerzenia MySQL dla pakietu Apache Open Office


Po ściągnięciu instalatora rozszerzenia MySQL należy go uruchomić. Gdy zostanie wyświetlony komunikat z prośbą o potwierdzenie instalacji rozszerzenia, w celu potwierdzenia należy kliknąć przycisk OK.

MySQL - Open Office - Instalacja
Potwierdzenie instalacji rozszerzenia MySQL dla Open Office - System Windows 8.1





Po zatwierdzeniu instalacji, aby kontynuować należy przewinąć w dół umowę licencyjną, a następnie ją zaakceptować.

Instalacja rozszerzenia MySQL dla Apache Open Office
Instalacja rozszerzenia MySQL dla Open Office - Akceptacja umowy licencyjnej

Po dokonanej akceptacji umowy licencyjnej, powinno pojawić się okienko menedżera rozszerzeń Open Office, z nowo zainstalowanym rozszerzeniem MySQL. Oznacza to, że wszystko poszło świetnie i rozszerzenie MySQL dla Open Office zostało prawidłowo zainstalowane.

Instalacja rozszerzenia MySQL - Open Office
Menedżer rozszerzeń Open Office


Konfiguracja połączenia z bazą danych MySQL

 
Aby nawiązać połączenie z istniejącą bazą danych MySQL na zdalnym serwerze MySQL, po pomyślnej instalacji rozszerzenia MySQL dla pakietu Apache Open Office, należy skorzystać z menu Open Office wybierając pozycję Plik->Nowy->Baza danych, w poniżej wskazany sposób:

Dane MySQL w Open Office
Konfiguracja połączenia arkusza Open Office z bazą danych MySQL

Po podjęciu wyżej opisanego kroku, zostaje uruchomiony kreator bazy danych, w którym należy wybrać opcję "Połącz z istniejącą bazą danych" oraz wybrać rodzaj bazy danych - MySQL - z listy wyboru obsługiwanych typów baz danych, jak pokazano poniżej. Aby zatwierdzić wybór należy kliknąć w przycisk "DALEJ".


Konfiguracja połączenia MySQL OpenOffice
Konfiguracja połączenia MySQL - Open Office - Wybierz bazę danych

W następnym okienku, jak pokazano poniżej, zależy wybrać bezpośrednie połączenie z bazą danych oraz przejść do dalszych ustawień połączenia.

Open Office - MySQL - Połącz bezpośrednio
Konfiguracja połączenia MySQL - Open Office - Skonfiguruj połączenie MySQL

Kolejnym kropiem jest uzupełnienie informacji dotyczących portu oraz adresu serwera MySQL. Należy wprowadzić nazwę bądź adres IP serwera MySQL oraz ustawiony na serwerze port dla połączeń mysql. Standardowo jest to port 3306.

Konfiguracja połączenia MySQL - Open Office
Konfiguracja połączenia MySQL - Open Office - Adres i port serwera


W kolejnym kroku należy wprowadzić nazwę użytkownika MySQL, który został utworzony na serwerze MySQL i który będzie stosowany do nawiązywania połączeń z serwerem MySQL z programu Open Office. Należy zaznaczyć wybór 'Wymagane Hasło' i przetestować połączenie przyciskiem 'Testuj połączenie'. Po wpisaniu nazwy użytkownika oraz hasła w okienku testu połączania, powinna się pojawić informacja o udanym nawiązaniu połączenia.

Konfiguracja połączenia MySQL - Open Office
Konfiguracja połączenia MySQL - Skonfiguruj uwierzytelnienie użytkownika

Test połączenia MySQL Open Office
Wszystko wygląda OK

W kolejnym kroku konfiguracji połączenia z serwerem MySQL należy wybrać opcję zarejestrowania bazy danych MySQL w programie OpenOffice.Wybranie tej opcji powoduje zarejestrowanie bazy danych w bieżącej instalacji pakietu OpenOffice. Po zarejestrowaniu baza staje się widoczna w oknie Widok - Źródła danych. Po wybraniu odpowiednich opcji należy wcisnąć przycisk 'Utwórz'.

Konfiguracja - Połączenie Open Office MySQL
Konfiguracja połączenie Open Office - MySQL - Zapisz i kontynuuj

Po zapisaniu pliku konfiguracyjnego w wybranym folderze, utworzona uprzednio tabela, wraz z wprowadzonymi danymi, jest dostępna w OpenOffice. Aby uzyskać widok przedstawiony poniżej, należy przejść w menu głównym programu do pozycji widok->Źródła danych. Teraz dane z tabeli mogą być wykorzystywane do dowolnych zadań w programie Open Office.


OpenOffice - rozszerzenie MySQL
Dane MySQL są dostępne w źródłach danych programu Open Office

Wprowadzanie danych, modyfikacja, usuwanie oraz kwerendy

W zależności od nadanych utworzonemu użytkownikowi uprawnień za pomocą narzędzia GRANT, można teraz wyświetlać dane z tabeli, wprowadzać nowe wiersze danych, modyfikować istniejące dane, bądź nawet usuwać wiersze z tabeli. Można również tworzyć (przykładowo posługując się narzędziem o nazwie Kreator kwerendy Open Office) i uruchamiać dowolne kwerendy oparte na danych z tabeli MySQL.

Tabela danych MySQL - Open Office
Wprowadzanie, modyfikacja, usuwanie wierszy danych MySQL w Open Office

 
Kreator kwerendy Open Office
Kreator kwerendy Open Office