Nekomercni (staveny) NAS

28.3.2016

Pro ucely zalohovani mi nestacil muj minimalismus, ktery spocival v zalohach na externi USB3 disk (plotnovy) a chtel jsem pouzit nektery z NASu.

Uvazoval jsem i o routeru Turris Omnia, ktery povazuji za spickovy a navic prave s moznosti byt lokalnim NASem, nicmene mam zasadu, ze router/firewall by mel routovat/firewallovat a nemel by poskytovat zadne dalsi funkce. Sice muj domaci Mikrotik nema dostupny zadny port z Internetu, ma zakazanu vetsinu konfiguracnich rozhrani a neni na nem nastaven ani zadny port forwarding a stejne tak by mohl byt nastaven Turris, ale presto jsem v tomto velmi striktni.

Vzhledem k tomu, ze jsem chtel pasivne chlazeny NAS kvuli podminkam, ve kterych bude NAS provozovan, zjistoval jsem aktualni nabidku, ktera se ukazala byti prabidnou. Na vetsinu NASu nelze navic nainstalovat vlastni OS pro mou jednoduchou potrebu zalohovani pocitacu po lokalni siti a zpristupneni nekterych souboru po siti bez dalsich sluzeb a bez pristupnosti z Internetu.

V CR jsou dodavany prevazne bez disku, takze clovek stejne neni usetren zasahu (instalace disku) a proto jsem se porozhledl po moznosti, jak si postavit vlastni NAS, ktery bude splnovat nasledujici:

  • vlastni minimalisticka instalace OS (zvolil jsem si debian jessie s odstranenym systemd)
  • nizky prikon
  • pasivni chlazeni
  • redundance disku
  • rozumne sitove rozhrani (1Gbps)

z cehoz mi vyslo, ze hledam idealne case pro minimalne dva disky, co nejmensi desku s moznosti napajeni notebookovym adapterem (neni zde potreba aktivniho chlazeni jako u klasickych zdroju) a dalsi prislusenstvi. Nasel jsem u CZC zhruba tri desky, ktere vyhovuji temto pozadavkum, pricemz jsem vybral tu, ktera ma 4 porty SATA s rychlosti 6Gbps. Deska je jiz dodavana i s napajecim adapterem, ktery podle referenci spolehlive zvladne nasledujici setup (melo by na nej stacit 50W).

Z tohoto je videt, ze cena NASu bez disku je neco pod 5kKc, coz se zhruba vyrovna standardnim levnym aktivne chlazenym NASum pro dva disky, ktere nemaji moznost instalace vlastniho OS. Mozna vam tento setup pripadne jako kladivo na komara jak cenove, tak i vykonove, nicmene s mou obsesi oddelovat funkce zarizeni v siti je to nejspise nejschudnejsi moznost. Navic pokud budu chtit dalsi sluzby na siti, tak zde nejsem nijak omezen.

Byl jsem dotazovan, proc pouzivam disky z rady WD PURPLE - WD nedoporucuje pouzivat tuto radu v NASech a proto doporucuji, abyste - pokud si nejste jisti - pouzili spise radu RED. Nicmene, protoze mne zaujaly vlastnosti rady PURPLE, procital jsem radu for a i kdyz vam na to zaruku nikdo neda, tak je mozne nalezt hodne vyjareni o nekolikaletem pouzivani techto disku v RAID1 prave pro ucely NASu.

Vlastni stavba je primitivni.

Protoze case se dodava s vestavenym vetrakem, prvni bylo odstraneni vetraku. Tim se mi mezi prednim krytem case uvolnilo misto na kabelaz, ktera vede od mainboardu USB3 a audio, nebot toto u NASu nevyuziju. Jedine kabely, ktere jsem zapojoval do mainboardu byl powerswitch, HDD LED, power LED a reset.

Po prisroubovani mainboardu a vlozeni pameti a zapojeni kabelu jsem na nosny most na vrchu case prisrouboval jeden 3.5“ HDD a na bok druhy.

Disky jsem pripojil SATA kabely a napajenim k mainboardu a vyvazal jsem kabelaz.

Po zakrytovani case bylo hotovo.

Vlastni OS bezi z flash disku v usb3 portu. Mam s timto resenim dlouhodobe zkusenosti, ktere jsou naprosto bezproblemove. Opet jsem se setkal s nazorem, ze beh systemu z USB flashe neni idealni, nicmene chci mit oddelene datove disky a disk pro beh OS. Pro pripad havarie je na klientu pripravena aktualizovana image, kterou lze za nekolik okamziku prenest na novy flash disk. Pokud flash diskum neverite, doporucuji pridat dalsi disk (pokud chcete drzet data na jinem mediu, nez systemovem disku).

Instalace neprobehla pomoci debootstrapu, ale provedl jsem instalaci do KVM virtualu s raw image, kterou jsem potom prenesl pomoci dd na flash disk.

Velikost image jsem zvolil 5GB (coz je vice nez dostacujici), pricemz rozdeleni partitions (msdos MBR a partitions) je 1GB na /boot a 4GB na / partition.

Instalace probehla standardne minimalistickym zpusobem s tim, ze jsem nevolil zadne pridane baliky (pri instalaci jsem navic zrusil defaulni volbu balicku a nechal ji prazdnou). Vse potrebne jsem instaloval ex post po nabootovani systemu z flash disku na NAS serveru. Na oba datove disky jsem pri instalaci nesahal. Protoze jsem instaloval ze site, nebyla potreba updatovat system po instalaci.

Obecne upravy

Prvni postinstalacni uprava byla odstraneni systemd, ponevadz neprinasi pro ucel tohoto serveru zadne benefity, naopak by zatezoval diky journallingu flash, ze ktere bezi system:

apt-get install sysvinit-core sysvinit-utils
reboot
apt-get remove --purge --auto-remove systemd
echo -e 'Package: systemd\nPin: release *\nPin-Priority: -1' >/etc/apt/preferences.d/systemd
echo -e '\n\nPackage: *systemd*\nPin: release *\nPin-Priority: -1' >>/etc/apt/preferences.d/systemd

Dalsi akci byla konfigurace site (upravou /etc/network/interfaces):

allow-hotplug eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.1.42
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8

Na lokalni siti nepouzivam ipv6, ponevadz provider me domaci konektivity - UPC - stale neposkytuje ipv6.

echo "net.ipv6.conf.all.disable_ipv6 = 1" >>/etc/sysctl.conf 

Nasledovala instalace ssh serveru:

apt-get install openssh-server

a iptables-persitent baliku:

apt-get install iptables-persistent

a konfigurace iptables (editaci souboru /etc/iptables/rules.v4):

*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --dport 22 --state NEW -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
COMMIT

a samozrejme pro jistotu i pro ipv6 (/etc/iptables/rules.v6):

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -j REJECT --reject-with icmp6-adm-prohibited
-A FORWARD -j REJECT --reject-with icmp6-adm-prohibited
-A OUTPUT -j REJECT --reject-with icmp6-adm-prohibited
COMMIT

Nasledovalo zajisteni nastaveni iptables po rebootu a nastaveni aktualni:

update-rc.d netfilter-persistent enable
service netfilter-persistent start

Dale jsem nainstaloval dalsi baliky, ktere jsou vhodne pro tento typ serveru:

apt-get install smartmontools lmsensors mdadm sysstat lsof ethtool file binutils ntfs-3g ntpdate hddtemp time

Ucel jednotlivych baliku je zjevny.

Odstranil jsem mailserver exim4:

apt-get remove --purge --auto-remove exim*

Sesynchronizoval jsem cas pomoci ntpdate:

ntpdate tak.cesnet.cz

a presny cas zapsal do hw hodin:

hwclock --systohc

Vytvoreni uloziste

Zvolil jsem redundanci kvuli vyssi spolehlivosti pomoci RAID1.

Tento typ RAIDu mam radeji, ponevadz nerozklada data na disky a tudiz v pripade havarie neni problem funkcni disk vzit a zalohy z nej vykopirovat v pripade nutnosti - uvedomuji si, ze v pripade pouziti vice disku a zejmena disku s vyssi kapacitou by toto mohlo byt plytvani, ale zde se tento typ jevo jako nejvhodnejsi.

Vzhledem k poctu disku mi ale stejne nic jineho nezbyva.

Vytvoril jsem partitions na discich, ktere budu spojovat do RAIDu (pokud nemusite volit takto, vytvarejte RAID radeji nad celymi disky - proto samotne vytvareni partitions nepopisuji, navic toto kazdy ovlada).

Vytvoril jsem vlastni RAID1 nad obema partitions a obema disky:

mdadm -Cv /dev/md0 -l1 -n2 /dev/sda1 /dev/sdb1
mdadm -Cv /dev/md1 -l1 -n2 /dev/sda2 /dev/sdb2

a na nich ext4 fs:

mkfs.ext4 /dev/md0
mkfs.ext4 /dev/md1

(zde by nekteri mohli namitat, ze jine typy fs by mohly byt diky svym vlastnostem lepsi, ale spokojil jsem se prave s ext4)

Prubezne jsem sledoval synchronizaci disku v RAIDu:

cat /proc/mdstat
mdadm --detail /dev/md0 /dev/md1

Ciste pro zajimavost jsem sledoval i teplotu pomoci prikazu sensors, smartmonctl a hddtemp. Toto mne zajimalo i pri vsech naslednych operacich, pri kterych se intenzivneji pracovalo s disky.

Vytvoreny dva adresare jako mountpointy:

mkdir /data1
mkdir /data2

a zeditovan /etc/fstab:

/dev/md0		/data1		ext4	defaults 	0	2
/dev/md1		/data2		ext4	defaults	0	2

Dlouho jsem patral po tom, jaky sitovy souborovy system je vhodne zvolit (cifs, nfs, sshfs,…) studoval benchmarky, zvazoval pouziti blokoveho iscsi targetu na NASu a nakonec jsem zvolil z duvodu bezpecnosti a skoro zadne degradace vykonu sshfs.

Na NASu byl vytvoren uzivatel data, ktery ma pristupne soubory na ulozisti a nastaveno velmi slozite nahodne heslo.

adduser data
passwd data
chown data.data /data2
chmod 770 /data2

Uloziste pripojene do /data1 slouzi pro specifickeho uzivatele a nebudu jej zde zminovat. Kazdy si vyrobi dle vlastni potreby - tuto konfiguraci uvadim pro ukazku.

Dale byl na NASu vytvoren adresar .ssh v jeho domovskem adresari:

mkdir ~data/.ssh
chown data.data ~data/.ssh
chmod 500 ~data/.ssh

Na klientu vytvoren par klicu:

ssh-keygen -t ed25519

(samozrejme zadana rozumna passphrase)

Dale byl na klientu zeditovan /etc/fstab:

data@192.168.1.42:/data2  /home/user/data2  fuse.sshfs user,reconnect,uid=1000,gid=1000,umask=0,noauto,idmap=user,identityfile=/home/user/.ssh/id_ed25519,_netdev, 0 0

Podotykam, ze v lokalni siti jsou pouze dva notebooky, kde kazdy pouziva pouze jeden uzivatel. Proto si mohu dovolit pripojovat vzdaleny disk primo do adresare v domovskem adresari uzivatele.

Dale byl na klientu vytvoren mountpoint ~user/data2/:

mkdir ~user/data2
chown user.user ~user/data2
chmod 700 ~user/data2

Zbyva zkopirovat verejny klic pro ssh z klienta z ~user/.ssh/ed25519.pub na NAS do ~data/.ssh/authorized_keys. a nastavit mu spravna prava:

chown data.data ~data/.ssh/authorized_keys
chmod 400 ~data/.ssh/authorized_keys

Na klientu (ktery pouziva nezkuseny uzivatel) bylo vhodne v souboru ~user/.bashrc vytvorit dva aliasy:

alias pripoj=mount /home/user/data2
alias odpoj=fusermount -u /home/user/data2

Uzivatel klientskeho notebooku byl poucen, ze diskove uloziste se ma pripojovat pouze v pripade potreby a byl proveden pokus o pripojeni:

pripoj

a odpojeni

odpoj

Bylo provedeno intenzivni kopirovani na uloziste na NAS a kontrolovana teplota pro overeni, zda je pasivni chlazeni dostatecne. Teplota nepresahla 43℃. Chystam se jeste odladit vykon sshfs. Nasel jsem peknou stranku, kde se timto tematem zabyvaji: http://www.admin-magazine.com/HPC/Articles/Sharing-Data-with-SSHFS

  • obsah/it_obecne/nas.txt
  • Last modified: 2018/10/17 18:57
  • by profors