Trable s diskovým polem II. (aktualizováno)

Moje očekávání z minulého dílu se potvrdilo, skutečně se něco podělalo. Data jsem sice na pole zkopíroval, ale když jsem trochu zahýbal s kabely, abych přidal do pole jeden z chybějících disků, zjistil jsem, že systém nenajde RAID superblok na jednom ze 4 disků.

Aktualizováno: Tento problém byl způsoben HPA (Host Protected Area). Zdá se, že přepojením na jiný řadič byla část disku „označena“ jako HPA, tj. pevný disk se mírně zmenšil, následkem čehož „zmizel“ RAID superblok. Zjistil jsem to, když se totéž stalo s jiným diskem, jehož souborový systém odmítl přečíst jeden soubor, protože jeho fragment se nacházel mimo zařízení. Člověk se pořád učí…

Kdybyste to někdy potřebovali, HPA se dá vypnout takto:

[michal@darkstar ~]$ sudo hdparm -N /dev/sdb

/dev/sdb:
 max sectors   = 976771055/976773168, HPA is enabled
[michal@darkstar ~]$ sudo hdparm -N p976773168 /dev/sdb

/dev/sdb:
 setting max visible sectors to 976773168 (permanent)
 max sectors   = 976773168/976773168, HPA is disabled

Mám podezření, že všechny některé problémy působil defektní čtyřportový řadič Promise SATA300 TX4. Nevím, jestli je to můj kus nebo celá série, která dělá pod GNU/Linuxem neplechu, ale je mi to jedno. Vyměnil jsem tedy tento řadič za dva dvouportové PCI-e řadiče a pokračuji ve svém původním záměru.

Moje rady a závěry z celé situace:

  • defektní řadič může způsobit velké problémy, pozor na to
  • diskové pole vytvořte, pokud možno, celé a se všemi disky
  • pokud možno, před přenosem dat otestujte pevné disky (badblocks) a diskové pole jako takové
  • prověřte integritu celého pole (a to pravidelně opakujte):
    echo "check" > /sys/block/md0/md/sync_action
  • stroj několikrát rebootujte, a ujistěte se, že se pole vždy úspěšně znovu sestaví
  • při kopírování dat prověřujte integritu (sha1sum) velkých souborů – pokud ne u všech, tak alespoň namátkou
  • zjistěte si o diskových polích všechno, co můžete, včetně problémových situací a jejich řešení
  • pokud možno, otestujte pole i tím, že vyzkoušíte selhání některého z disků
  • a hlavně – nezapomínejte, že RAID není náhrada zálohování, takže pravidelně zálohujte a nezapomínejte zálohy čas od času prověřovat

Všem odvážlivcům, kteří se rozhodnou provozovat disková pole na desktopovém (místo serverovém) hardwaru, přeji hodně štěstí.

Zodpovědnost vývojářů za svůj kód

Evropská komise se nyní zabývá myšlenkou, zda-li by v rámci ochrany spotřebitele neměli být vývojáři (nebo přesněji řečeno výrobci) softwaru zodpovědni za svůj produkt tak, jak je tomu v mnoha jiných případech ve „fyzickém“ světě.

Jistě, na první pohled se jedná o zajímavý, možná i podnětný návrh. Problém je v tom, že oblast softwaru, nebo přesněji oblast výpočetní techniky, je podstatně složitější a hlavně v mnoha věcech odlišná od „fyzického“ světa. Domnívám se, že v souvislosti s tímto návrhem je spojeno mnoho potenciálních problémů, ze kterých se pokusím nastínit ty hlavní:

Celý příspěvek

Programujeme v Pythonu

Pokud pracujeme s jakýmkoliv programovacím jazykem, potřebujeme především dvě věci – kvalitní editor a přehlednou dokumentaci. Co se týče editoru, můžeme preferovat obyčejný editor (gedit, vim, emacs, kwrite, atd.), nebo můžeme preferovat vývojové prostředí, alias IDE (Eclipse, SPE, DrPython, apod.). Vyčerpávající seznam vývojových prostředí je k dispozici zde.

IDE

V zásadě máme dvě možnosti. Buď dáme přednost nějakému volně dostupnému IDE, nebo investujeme do komerčního řešení. Komerční řešení mívají řadu užitečných a pokročilých funkcí navíc, ale jsou zpravidla proprietární a drahé. Volně dostupná řešení mohou nabízet o něco menší paletu funkcí, ale není třeba za ně platit a řada z nich má volně dostupné zdrojové kódy, takže není problém některé vlastnosti do kódu doplnit, chybí-li nám tak moc.

Komerčním IDE pro Python vévodí WingIDE. Dělí se do dvou verzí, jedna, méně vybavená, je k dispozici za cca 35 USD, zatímco druhá má některé funkce navíc a stojí 179 USD. Pro nekomerční použití je možné zažádat o licenci zdarma. Já osobně proprietární software příliš v lásce nemám, a proto dávám přednost svobodným IDE.

Špičkou mezi volně dostupnými IDE pro Python je multiplatformní vývojové prostředí Eclipse s pluginem PyDev. Je třeba dodat, že celé řešení je postavené na stále ještě nesvobodné Javě.

Jinou možností je SPE, napsané přímo v Pythonu. Je to velmi kvalitní IDE, ale poslední verze mi na mém systému přišly poněkud méně stabilní a starší verze zase nemají všechny potřebné vlastnosti. Proto jsem hledal dále a nalezl DrPython, opět v Pythonu napsané odlehčené IDE s podporou pluginů.

Je samozřejmě možné použít i klasická vývojová prostředí jako KDevelop či Anjuta. Bohužel, jejich podpora Pythonu je spíše menší než větší.

Možností je samozřejmě více, a proto ještě jednou odkazuji na mnohem rozsáhlejší seznam IDE pro Python.

Editory

Ne každý preferuje náročná a těžkopádná vývojová prostředí. Někomu naopak postačí sice jednoduchý, ale kvalitní editor. Tady se nabízí klasika jako GEdit, KWrite, Vim, Emacs či JEdit. Pokud se rozhodnete pro Vim, pak vám určitě přijde vhod jeden a druhý tip. Neumíte-li s vimem zacházet, pak doporučuji český návod a anglický grafický tutoriál.

Nástroje

Velmi užitečným nástrojem je samotný interpreter Pythonu, nebo ještě lépe, jeho poněkud vylepšená verze IPython. Pro vim tu mám malinkou úpravu výše zmíněného postupu Petra Macha, a sice do .vimrc dopsat následující řádky:

map <F11> :silent !~/scripts/killargs.py 'xterm .* -e python'<CR> :silent !konsole -e python -i % $PYARGS &<CR>
map <F12> :silent !~/scripts/killargs.py 'xterm .* -e python'<CR> :silent !konsole -e ipython % $PYARGS &<CR>

Dokumentace

Co se dokumentace týče, máme k dispozici řadu seriálů týkajících se Pythonu, ze kterých můžete získat slušné vstupní znalosti:

Pochopitelně, nejenom seriály živ je člověk. Nějaká „klasická“ dokumentace a reference určitě také přijde vhod. V češtině je to určitě překlad oficiální příručky, sice už poměrně starší, ale pro základy to jistě stačí. Dále máme k dispozici menší příručku s názvem Livewires, která je, kupodivu, rovněž v češtině. Pro úplné začátečníky, co se ještě ani nenaučili programovat, tu máme dokument Jak se naučit programovat.

Ovšem, budeme-li programovat, hodí se nám jistě nějaká on-line reference, kterou můžeme mít na mysli tuto, nebo si vytvoříme lokální webový server s dokumentací k dostupným modulům Pythonu pomocí programu pydoc:

pydoc -p 1234

Přepínač -p nám umožňuje specifikovat port, v tomto případě 1234. K dokumentaci se dostaneme přes webový prohlížeč a jeho adresu http://localhost:1234.

Epilog

Teď už si stačí jen vybrat vhodné nástroje, přečíst dostupnou dokumentaci a začít s vývojem v Pythonu. Happy hacking.

Zdroje

Python – první dojmy

Na posledních pár dní jsem se zašil do své temné komůrky (serverovny) a zaměřil se na studium jazyka Python. Python je interpretovaný, multiplatformní, dynamicky typovaný, objektově orientovaný jazyk, který byl sestaven se záměrem co nejméně obtěžovat programátory se zbytečnostmi a nabídnout jim prostředek, který je bude co nejméně odvádět od návrhu jejich programu.

Má zjednodušenou syntax a celou řadu vychytávek, které z něj činí nejenom ideální jazyk pro výuku programování, ale i velice efektivní nástroj pro rychlý návrh aplikací (RAD). Jeho syntaxe je kompaktní a má širokou škálu modulů pro snadné realizování i složitějších činností. Odhaduje se, že kód se stejnou funkcionalitou je v Pythonu zhruba 3x kratší než v Javě a 5-10x kratší než v C/C++. Kratší kód znamená méně práce a větší přehlednost. Python nahrazuje typické konstrukce Javy, .NETu nebo C/C++ pomocí zalomení řádku a identace. Mějme program, který vytvoří pole čísel od 1 do 50, následně toto pole celé projde a zvýší hodnotu každého prvku o jeden, a následně obsah pole vytiskne. Takto by kód vypadal v Javě před verzí 1.5.0:

int [] a = new int[50];

for (int i=1; i<51; i++) {
  a[i-1] = i;
}

for (int i=0; i<a .length; i++) {
  a[i]=a[i]+1;
}
            
for (int i=0; i<a.length; i++) {
  System.out.println(a[i]);
}

Takto by vypadal v aktuální verzi Javy:

int [] a = new int[50];

for (int i=1; i<51; i++)
  a[i-1] = i;
      
for (int i=0; i<a.length; i++)
  a[i]+=1;
      
for (int element: a) 
  System.out.println(element);

A takto by kód vypadal v Pythonu:

a = range(1,51)

for i in range(50):
  a[i] += 1

for i in a:
  print i

Samozřejmě nejde jen o syntaktickou jednoduchost, ale i o redukovanou komplexitu. Třeba v Javě je pro čtení řádek ze souboru nutné obalovat FileReader BufferedReaderem:


BufferedReader soubor = new BufferedReader(new FileReader(nazev));
String radka = soubor.readLine();

Zatímco v Pythonu má objekt file přímo metodu readline, takže místo hůře zapamatovatelné konstrukce výše si stačí zapamatovat tuto:


soubor = open(nazev, 'r')
radka = soubor.readline()

Takových příkladů bychom určitě našli více. Samozřejmě se nesnažím naznačit, že Java je nepoužitelná, zatímco Python je TaJedináSprávnáCesta(tm), tady je to velmi podobné jako s MS Windows a GNU/Linuxem, každý z nich se hodí lépe na něco jiného. Na druhou stranu, pokud jste programátoři, Python by ve vašem repertoáru chybět rozhodně neměl, ostatně je to jazyk, který se dá naučit velmi rychle. Pokud jste začátečníci, kteří by se rádi naučili programovat, pak je Python k tomuto účelu ideální. Uvažuji o tom, že bych možná časem udělal pro začátečníky programátory nějaký seriál, který bych uveřejnil zde, v tomto blogu. Co myslíte, měli byste o to zájem?

Každopádně, dokud tu něco takového nevznikne, nemohu neodkázat na Py.cz, který je ideálním startovním bodem pro toho, kdo se chce Python naučit.