Archiv pro měsíc: Duben 2013

Když vám v solarisu nejde pod uživatelem nastavit cron nebo se klíčem přihlásit na SSH

Nedávno jsem potřeboval vytvořit v Soalrisu uživatele pro weby a nastavit mu nějaké crony. To se provede takto:

contab -e uzivatel

Pravděpodobně se vám ale stane, že dostanete chybu:

Warning - Invalid account: 'uzivatel' not allowed to execute cronjobs

Cron sice půjde uložit, ale nebude fungovat. Po chvíli beznaděje jsem problém objevil v souboru /etc/shadow. Solaris jej má oproti Linuxu trochu jiný:

uzivatel:*LK*:::::::

Důležité je ono *LK*, to totiž znamená, že je uživatel locked, nemůže tedy spouštět ani cronjoby. Stačí onen záznam změnit na NP, což znamená no password.

uzivatel:NP:::::::

Instalace (migrace) SmartOS na RAIDZ2

RADZ2 je alternativa Linux RAID6. Na checksum jsou tedy použity dva disky. Nejmenší počet disků, pro které lze tuto konfiguraci použít jsou 4. V takovém případě ale počítejte s tím, že pole bude mít jen poloviční kapacitu součtu kapacit disků.

Další problém pouze 4 disků (pokud ke stroji nemůžete dočasně připojit další) je ten, že SmartOS při instalaci RAIDZ2 pole vytvořit neumí. A když systém nainstalujete jen na jeden disk, ze zbylých 3 disků RAIDZ2 pole nevytvoříte. Jeden disk vám bude chybět. Jak tento nedostatek obejít?

Začneme instalací. Nejprve si systém nainstalujeme pouze na jeden disk.

c0t0d0

Když máme instalaci hotovou, nabootujeme SmartOS bez importu zfs poolů.

Live 64-bit (noinstall)

Importujeme pool zones pod názvem zones2

zpool import zones zones2

Odmountujeme dataset zones2/cores.

umount zones2/cores

Smažeme složku /zones, aby nepřekážela až budeme vytvářet pool zones.

rm -r /zones

Zjistíme, kolik zabírá celý pool zones2.

zfs list

Vytvoříme pomocí dd prázný sparse soubor větší než velikost poolu zones2.

dd if=/dev/zero of=/disk.img bs=1 seek=40G count=1

Vytvoříme RADZ2 pole ze zbylých 3 disků a soubor z předešlého kroku použijeme jaho čtvrtý disk. Parametr -f je nutný aby příkaz zpool neřval kvůli rozdílným velikostem disků a že mixujeme jednotky a soubory.

zpool create -f zones raidz2 /disk.img c0t1d0 c0t2d0 c0t3d0

Soubor použitý u poolu jako jeden z disků převedeme do offline stavu. Tento krok je důležitý. Bez něj by při přenášení dat mezi pooly došlo na SmartOS ramdisku místo.

zpool offline zones /disk.img

Volitelně můžeme před přenosem zapnout kompresi disku. Soubory se nám pak během přenosu budou ukládat zkomprimované.

zfs set compression=gzip-9 zones2

Vytvoříme rekurzivní snapshot poolu zones2.

zfs snapshot -r zones2@current

Přemigrujeme data z poolu zones2 do zones. Přepínač -R u zfs send říká, že pošleme rekurzivně i podřízené datasety. Přepínač -p posílá i properties datasetů (např. nastavenou kompresi). Přepínač -F u zfs recv zajistí, že se v cílovém poolu promaže vše, co tam nemá být.

zfs send -Rp zones2@current|zfs recv -F zones

Smažeme snapshot current v cílovém poolu

zfs destroy -r zones@current

Pokud vše proběhlo v pořádku, můžeme nyní zrušit pool zones2

zpool destroy zones2

Nahradíme soubor použitý při vytváření poolu zones diskem, který se nám nyní uvolnil

zpool replace zones /disk.img c0t0d0

Po chvíli máme data sesynchronizována a pool zones už jede na plnohodnotném RAIDZ2 poli.

zpool status

Nyní je ještě potřeba pool rozšířit na celou kapacitu disků.

zpool set autoexpand=on zones

Projistotu provedeme export poolu.

zpool export zones

A uděláme reboot. Po najetí SmartOS s importem poolů vše pojede z právě vytvořeného RAIDZ2 pole. Enjoy!