A gép
- CPU: AMD Ryzen 5600G
- Motherboard: Gigabyte B550M
- RAM: 32 Gb
- /dev/nda0: 250 Gb Silicon Power SSD, M.2
- /dev/ada0: 512 Gb Samsung Evo 870 SSD, Sata
- /dev/ada1: 3 Tb WD RED, Sata
- /dev/ada2: 3 Tb WD RED, Sata
- /dev/ada3: 2 Tb Toshiba, Sata
A következőket szeretném
- Otthoni NAS
- A NAS-ra ZFS fájlrendszert szeretnék
- Legyen egy olyan pool, amin az adatok tükrözve vannak, ezekre kerülnek a fontos adatok
- A két darab 3 Tb-os WD RED-re kerülnének a fontos adatok tükrözve, ez lenne egy pool
- Legyen egy olyan pool, ami egy darab HDD-ból áll, és a nem fontos adatok vannak rajta
- A 2 Tb-os HDD-re a nem fontos adatok: ez meg a másik pool.
- Az ada0-ra telepítem a FreeBSD-t.
- Az M.2-es SSD-t felhasználom SLOG-nak a ZFS-hez (lehet, hogy ez felesleges itt, de kipróbálom mi ez).
FreeBSD telepítése
- 14-es FreeBSD ISO letöltése, és pendrive-ra írása
- Telepítéskor ki lehetett választani a magyar beállításokat (billentyűzet, locale, timezone)
- Auto ZFS particionálást választottam, és kiválasztottam az ada0 disk-et.
- A telepítő felajánlotta a DHCP bekapcsolását, de én fix IP címet adtam. Az IPV6-ot kikapcsoltam (legközelebb).
- A felajánlott csomagokat telepítettem, szerintem a ports-ot választottam még ki pluszban.
- A szolgáltatások között bekapcsoltam a CPU frekvenciát állító szolgáltatást, az NTP szolgáltatásokat (start-kor a beállítást, és az NTP daemont)
- Megadtam a ROOT felhasználó jelszavát.
- Felvettem egy plusz usert, akit még betettem a wheel group-ba is. Ez azért kell, hogy a "su" egyáltalán működjön.
A telepítés után
- Feltettem a bash-t
- Feltettem a doas-t, ez olyasmi mint a sudo.
- Frissítések: freebsd-update fetch / freebsd-update upgrade parancsok. Egy pozitív élmény volt, hogy frissítéskor úgy láttam, hogy csinált egy boot snapshot-ot, amire vissza lehet térni egy mozdulattal.
- Frissítések: pkg help / pkg update / pkg upgrade
- Ez pl egy leírás, hogy mit lehet csinálni telepítés után: https://www.dwarmstrong.org/freebsd-after-install/ (de több ilyen is van a net-en érdemes körbenézni)
Az NTP is, és később a Samba is bootolás után hibát jelzett, hogy még nem elérhető a hálózat. Az NTP nem tudta a time server nevét feloldani, a Samba pedig nem tudott UDP package-eket küldeni, ezért nem indultak el rendesen.
Ezt a netwait szolgáltatás bekapcsolása megoldotta:
sysrc netwait_enable="YES"
sysrc netwait_timeout="60"
sysrc netwait_ip="192.168.4.1"
reboot
Megjegyzés: Az /etc/rc.conf egy fontos konfig fájl, ide kerülnek be a fenti beállítások, és az, hogy egy service ki vagy be van kapcsolva. Egy másik fontos könyvtár a /usr/local/etc, ezekkel érdemes ismerkedni egy kicsit.
ZFS beállítása
Titkosítani szeretném a pool-okat, kulcs létrehozása:
dd if=/dev/random of=/root/nas.key bs=32 count=1
chmod 600 /root/nas.key
(nem tudom, hogy mi a best practice erre, ezt a nas.key-t érzésem szerint érdemes jól eltenni magadnak is)
Lemezek listázása:
geom disk list
ZFS pool létrehozása:
zpool create -O atime=off -O exec=off -O encryption=on -O keyformat=raw -O keylocation=file:///root/nas.key tank0 mirror /dev/ada1 /dev/ada2 log /dev/nda0
zpool create -O atime=off -O encryption=on -O keyformat=raw -O keylocation=file:///root/nas.key tank1 /dev/ada3
Property-k:
- atime=off: Ne íródjon a hozzáférés ideje minden fájl hozzáférésnél, valószínűleg ez lassítaná a fájlok elérését.
- exec=off: ami ezen a pool-on van, nem kell, hogy végrehajtható legyen.
- encryption=on, keyformat=raw, keylocation=file:///root/nas.key tank0: Titkosítás bekapcsolása, és a kulcs megadása
- az ada1, és az ada2 kerüljön egy mirror-ba, és az slog pedig a /dev/nda0-ra.
- Slog-ot egyáltalán nem kellett volna így külön megadni, nem kötelező, csak ki akartam próbálni. A sync írásokat meg lehet vele gyorsítani. Én a pool-okon a sync flag-et standard-on hagyom, ami azt jelenti, hogy a sync utasítások maradnak szinkronok, és kerülnek az slog-ba. Lehetne még az értéke always (minden műveletnél szinkronizálás van), meg disabled (async működés van). Így a standard egy jó választásnak tűnik.
Pool létrehozásnál hiba elhárítás (mert korábban már volt használva a hdd másra, és a zfs mindenért szól):
- Ha a "zfs create" arra hivatkozik, hogy nem tudja létrehozni a pool-t, akkor nézd meg jól még egyszer a disk neveket.
- Ha közben a kernel üzenetekben hiba jön, hogy a GPT partíció invalid a lemezen, akkor "fdisk destroy -F adaX" -el tudod törölni, és kell egy reboot a végén.
- Ha a "zpool create" azt a hibát üzeni, hogy a disk potenciálisan már egy pool része (mert korábban zfs pool volt rajta, akkor a -f paraméter jelenti a force-ot: "zpool create -f ..."
Sync állítása utólag (de a standard a default elvileg):
zfs set sync=standard tank0
zfs set sync=standard tank1
Dataset létrehozása:
zfs create -o casesensitivity=insensitive -o compression=lz4 -o aclmode=restricted -o aclinherit=passthrough tank0/documents
zfs create -o casesensitivity=insensitive -o compression=off -o aclmode=restricted -o aclinherit=passthrough tank0/photos
A tank1-ben most nem hozok létre dataset-et, azt majd később, amikor kell. Mivel SAMBA-val szeretném ezeket használni, ezért case insensitive-re állítom a poolokat. A dokumentumokra bekapcsolom az LZ4 tömörítést, a fényképekre felesleges szerintem. A többi paraméterről (acl) majd még írok.
A gép újraindítása után a dataset-ek nem mountolodtak fel. Amikor megpróbáltam kézzel felmountolni, kiderült, hogy nincsenek a titkosításhoz használt kulcsok betöltve. A betöltés kézzel: "zfs load-key -a", de a zfskeys szolgáltatást be kell kapcsolni:
sysrc zfskeys_enable=YES
reboot
Fontos zfs parancsok még (csak pár darabot kiemelek, biztos van több is, de érdemes felfedezni, utánaolvasni):
zpool list - pool-ok listázása
zfs list - pool-ok datasetek és mountpointok listázása
zfs get property_name tank0/documents - property lekérdezése. (a property_name-et ki kell cserélni, pl sync, compression, stb...)
zfs set property_name tank0/documents - property lekérdezése
Jogosultságok
Az aclmode, és aclinherit azért kell, mert ezekben a dataset-ekben acl alapú jogosultság kezelést szeretnék. Itt érdemes a többi paramétert a manualból elolvasni, nem tudom sajnos pár mondatban leírni, hogy melyik mire jó, de az aclmode=restricted: A chmod művelet hibát ad majd, ha olyan fájlra vagy könyvtárra próbálják meg alkalmazni, amelyhez ACL tartozik amely így nem írható le egy móddal. (tehát például az egyik usernek rx, a másiknak rw van adva az acl-hez, akkor a chmod 755 nem fog működni, ahogy én értem). Az aclinherit pedig, hogy hogyan öröklődjenek a jogosultságok: A passthrough jelentése: Minden ACL módosítás nélkül öröklődik.
Most annyit szeretnék, hogy legyen egy family group, aki módosítani tud (később ezt majd finomítani kell).
Egy group-ot is létre kell hozni, és hozzáadni az első usert:
pw groupadd family
pw group mod family -m dlaszlo
A user milyen group-okban van:
id dlaszlo
A group-ban milyen userek vannak:
pw group show family
Jogosultság megadása a könyvtárakra:
setfacl -a 0 g:family:modify_set:fd:allow /tank0/documents
setfacl -a 0 g:family:modify_set:fd:allow /tank0/photos
getfacl /tank0/documents-el lekérdezhető, hogy mi van megadva. A -a 0 paraméter a pozíciót jelenti, hogy hova szúrtuk be a jogosultságot.
A modify_set-ről: https://docs.oracle.com/en/operating-systems/solaris/oracle-solaris/11… (a solaris doksija is tök jó, a ZFS is nagyon jól le van benne írva)
Példa parancs, read only jogosultság adás a family_ro group-nak, rekurzívan:
setfacl -R -a 0 group:family_ro:r-x---a-R-c--s:fd:allow photos
Törölni úgy kell, hogy a teljes jogosultság string-et bemásoljuk a parancsba, amit a getfacl-al kapunk (például az everyone-t):
setfacl -R -x everyone@:r-x---a-R-c--s:-------:allow photos
Samba telepítése
pkg search samba
csomag kiválasztása, és:
pkg install samba419
Samba szolgáltatás engedélyezése, és indítása:
sysrc samba_server_enable=YES
service samba_server start
Megjegyzés: Ha a ZFS-nek próbálom meg a samba supportját, akkor FreeBSD alatt ezt kapom:
# zfs set sharesmb=on tank0/documents
No SMB support in FreeBSD yet.
cannot share 'tank0/documents: operation not supported': SMB share creation failed
Samba beállítások:
/usr/local/etc/smb4.conf:
[global]
workgroup = WORKGROUP
server string = NAS
disable netbios = Yes
domain master = Yes
local master = Yes
security = user
map to guest = Never
usershare allow guests = no
passdb backend = tdbsam
socket options = TCP_NODELAY IPTOS_LOWDELAY
deadtime = 15
getwd cache = yes
keepalive = 60
aio read size = 16384
aio write size = 16384
aio write behind = true
use sendfile = YES
log level = 1
[documents]
path = /tank0/documents
valid users = @family
public = no
writable = yes
browsable = yes
printable = no
read only = no
guest ok = no
vfs objects = zfsacl
nfs4:mode = special
nfs4:acedup = merge
nfs4:chown = no
store dos attributes = yes
map hidden = no
map system = no
map archive = no
map readonly = no
[photos]
stb...
ebben benne van az is, hogy a zfs acl-lel szeretnénk használni. A doskiját érdemes megnézni, én is a példa beállításokat használtam, és elolvastam, hogy kb melyik beállítás mit jelent: https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html
User hozzáadása a samba-hoz:
pdbedit -a -u dlaszlo
WSDD telepítése a netbios helyett, lásd: https://hup.hu/node/185227
ZFS cache használat ellenőrzése:
pkg install zfs-stats
Ezzel látszik, hogy használja-e az slog-ot íráskor:
zpool iostat -v 1
Ezzel pedig hogy az olvasás (ARC) cache-t:
zfs-stats -A
(meg még sok mást).
Todo
- automatikus snapshot-ok
- automatikus zfs scrub
- automatikus smart
- automatikus mentés rsync megosztásra
- értesítések (email-ben, vagy máshogy, pl a smart-ról, vagy egyéb dolgokról)
- adguard, unifi contoller, esetleg plex indítása jail-ben.
Bocs, ha valahol nagyon pongyolán fogalmaztam, inkább egy rövid kis jegyzetnek szántam, biztos bele kell majd néznem később. Amiért itt megosztottam ezt: nagyon pozitívak a tapasztalataim a FreeBSD-vel, és eddig azért nem kezdtem bele, mert nem tudtam, hogy mikbe futok majd bele, mit veszek ezzel a vállamra. Hát semmi problémába nem futottam eddig, és esetleg ha valaki akar még vele ismerkedni, akkor itt látható, hogy én miket próbáltam ki eddig.
- dlaszlo blogja
- A hozzászóláshoz be kell jelentkezni
Hozzászólások
atime=off: Ne íródjon a hozzáférés ideje minden fájl hozzáférésnél, valószínűleg ez lassítaná a fájlok elérését
Linuxon is közkedvelt a noatime illetve a relatime mount opció; én nem szeretem. Az fstab-omban mindenhol megadom a strictatime opciót. Az ebből fakadó írások mennyisége számomra lényegtelen, viszont nagyon gyakran futtatom az
ls -ltru
# alias ls='ls --color=auto --time-style="+%Y-%m-%d %H:%M:%S %z"'
parancsot, ahhoz pedig kell a strictatime.
- A hozzászóláshoz be kell jelentkezni
Köszi, igen, ez tényleg hasznosnak tűnik, jó ez az alias is.
Lehet, hogy az én felhasználásomban nincs értelme a noatime-nak. Azért kapcsoltam csak be, mert többször szembe jött már, hogy érdemes lehet.
- A hozzászóláshoz be kell jelentkezni
Nálam szintén freebsd a nas, csak 13.2 egy wifi-driver miatt (14-en nem működik).
De ha már jail miatt is freebsd-re esett a választás, akkor a különböző szolgáltatásokat, (pl. samba) rakhatnád jail-be.
Netbios helyett én wsdd-t használok (py39-wsdd).
- A hozzászóláshoz be kell jelentkezni
Jó ötlet, lehet, hogy majd átteszem. Most a jailt a unifi kontrollerrel, és az adguarddal próbáltam ki. A wsdd-t nem is ismertem, köszönöm, megnézem!
(Wifi kérdések: Wifi driver, vagy egyéb wifi kérdésekbe én is időről időre belefutottam. Lefedettség probléma a falak miatt, csatorna kiosztás kérdések, a szomszédok ordibáló wifi-je, driver probléma, stb...
A végén ebből elegem lett, vettem párszáz méter UTP kábelt, kábelvéget, és krimpelőt, és a padláson át mindenhova odavittem a kábelt (annyira előrelátó voltam beköltözés előtt, hogy minden szobában van egy kábelcsatorna, ami a padlásra megy, csak sajnos elég szűkös :)). Van ahol egyszerűen csak átfúrtam a szomszéd szobába, és a parketta szegőléc mögött vittem el a kábelt.
Most már csak a telefonok, egy tablet, két laptop, és a gyerekek szobájából pár "okos" kütyü lóg wifi-n. A jó minőségű wifi miatt pedig az unifinél kötöttem ki (ennek nem okoz problémát ha 10000 másik wifi hotspot van a környéken, rosszul beállítva, meg egyéb zavaró dolgok)
Ha most lehetne falat vésni, porolni, akkor rendes kábelcsatornákat alakítanék ki a falakban, megtervezném az egészet. De sajnos nem így tettem, amikor ide költöztünk. :))
- A hozzászóláshoz be kell jelentkezni
Wsdd azért kell, mert ugye a SMBv1 alapból tiltva van az újabb win verziókon és az eddig megszokott felderítés nem fog menni a win intézőjében.
Kell majd neki egy tűzfalnyitás (ha használsz) a multicasthoz, plusz egy tcp/5357 és udp/3702.
Samba-hoz van egy pár dolog amit érdemes a sebesség miatt beállítani.
(socket options, getwd cache, aio read size, stb),
loader.conf-ba egy < aio_load="YES" > is kell, plusz < nullfs_load="YES" > ha kívülről szeretnél könyvtárakat becsatolni.
Javaslom a jail-hez a VNET alapút, mert a natolt jail és a samba nem igazán szeretik egymást.
Wifivel semmi bajom nem volt, tökéletesen működött, csak a 14-es kiadásnál egy bug miatt a hostap démon nem működött az én wifi driveremmel együtt.
Küldtem reportot, nemtudom, hogy javították -e, mert azóta is maradt nálam a 13.2.
- A hozzászóláshoz be kell jelentkezni
Az aio úgy látom, hogy a kernelbe van fordítva. A Wsdd tökéletesen működik.
Köszi! Te thin vagy thick jale-t használsz? thick-et kezdtem el használni, de nem tudom eldönteni, melyik lesz problémás később. Az iocage-et használom, mint jail managert. Kipróbálom a nullfs-es mountolást, és utána átrakom a samba-t is a jail-be. Jó ötlet, hogy minden szolgáltatás külön legyen.
- A hozzászóláshoz be kell jelentkezni
Thick jail-t használok, ezenbelül VNET jailt.
Ha olyan szolgáltatásokat akarsz futtatni amik nem bírják a NAT-ot pl. (dlna) akkor VNET jailt kell használni.
Nekem majdnem minden szolgáltatás külön jailben van. (NFS, samba, mediaserver, rsync, ftp.)
Ezenkívül nyomtató és scanner hálózati megosztást is használok, de azt a samba jailbe telepítem.
A thin jail se rossz, könnyebb frissíteni a jaileket ha sok van, de nekem automatikusan egy script megcsinálja és öt jailt nem nehéz upgradelni.
Lehetőség van arra is, hogy használod a classic jaileket és a VNET alapú jaileket vegyesen, de egyszerűbb, ha mindegyiket egyformán konfigurálod.
Én alapból készítek egy base-jailt, beállítom, csinálok egy zfs-snapshotot róla, azután ezeket klónozom és beállítom őket ( jailname, IP-cím, rc.conf, stb. ) külön-külön.
- A hozzászóláshoz be kell jelentkezni
Köszi szépen!
- A hozzászóláshoz be kell jelentkezni