- GUI gerektirmeyen temel bir NAS için ZFS veri kümeleri oluşturup bunları Samba ile paylaşmak, basit bir ağ depolama alanı kurmak için yeterince sade bir kombinasyon olabilir
- Örnek ortam Debian 12 Bookworm, OpenZFS zfs-2.1.1, RAIDZ1, ECC RDIMM 16GB RAM, 4×4TB NVMe SSD’den oluşur; şifreleme ve yedekleme stratejisi kapsam dışında bırakılmıştır
- ZFS, havuz ve dosya sistemi yapılandırmasını disklere kaydettiği için OS bozulsa bile başka bir makinede
zfs import ile veriler geri alınabilir
- Diskleri
/dev/nvme1 gibi sıraya bağımlı adlar yerine /dev/disk/by-id veya /etc/zfs/vdev_id.conf içindeki takma adlarla belirtmek daha güvenlidir
- Gerçek ağ paylaşımını Samba üstlenir; genel belge paylaşımı ve macOS Time Machine paylaşımı
docs ve backups veri kümelerine ayrılarak yapılandırılır
Kendi yaptığınız minimal NAS’ın kapsamı
- Amaç, Synology, QNAP, TrueNAS gibi tam özellikli NAS ürünleri olmadan temel bir NAS’ı kendiniz yapılandırmaktır
- Örnek yapılandırma şu kapsamla sınırlıdır
- RAID seviyesi: RAIDZ1, 1 sürücü arızasına tolerans
- İşletim sistemi: Debian 12 Bookworm
- Şifreleme: yok
- ZFS uygulaması: OpenZFS, zfs-2.1.1
- CPU: 4 çekirdek, uygun fiyatlı Xeon sunucu CPU’su kullanılabilir
- RAM: ECC RDIMM RAM 16GB
- Depolama: 4×4TB NVMe SSD
- Yedekleme: ele alınmaz; ayrı yapılandırma gerekir
- TrueNAS, tam özellikli kurumsal düzeyde bir yazılım paketine daha yakındır; ihtiyaç duyulan işlevler ne kadar basitse, sunulan özellikler ile gereksinimler arasındaki uyumsuzluk o kadar büyür
- Kendiniz yapılandırdığınızda sistemin her unsurunu anlayabilir ve başka bir yazılım paketine bağımlı kalmanız gerekmez
ZFS’nin diskte sakladığı yapılandırma bilgileri
- ZFS dosya sistemi kendi kendine yeterlidir; host OS hasar görse bile diskler sağlamsa veriler geri alınabilir
- Diskleri yeni bir makineye veya yeni bir OS’ye bağlayıp
zfs araçlarını kurduktan sonra zfs import çalıştırırsanız mevcut havuzu içe aktarabilirsiniz
- ZFS’nin yapılandırması ve ayrıntıları disklerin üzerinde saklanır
- Örneğin 6 diskle RAIDZ2 yapılandırdıysanız, diskleri ZFS araçları kurulu yeni bir makineye taşıyıp yalnızca
zfs import çalıştırmanız bile bunun RAIDZ2 olarak görünmesini sağlar
- Host OS’de veya makinede sorun çıksa bile diskler zarar görmediyse veriler korunur
Disk tanımlama ve takma ad yapılandırması
- Bir Linux makinesinde disk listesi
lsblk -d -o TRAN,NAME,TYPE,MODEL,SERIAL,SIZE ile kontrol edilir
- Örnekte dört adet Samsung SSD 990 PRO 4TB NVMe sürücü kullanılır
- Her disk,
/dev/disk/by-id altında kendi ID’sine ve /dev/nvme... aygıt adına bağlı sembolik bağlantılara sahiptir
/etc/zfs/vdev_id.conf içinde takma adlar tanımlarsanız uzun disk ID’lerini kısa adlarla eşleyebilirsiniz
alias nvme0 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
alias nvme1 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
alias nvme2 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
alias nvme3 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
udevadm trigger çalıştırıldığında veya yeniden başlatıldığında takma adlar uygulanır
- Uygulanıp uygulanmadığı
ls -lh /dev/disk/by-vdev ile kontrol edilebilir
- Takma ad eşlemesi isteğe bağlıdır; zpool oluştururken tam
/dev/disk/by-id/... yolunu doğrudan da yazabilirsiniz
/dev/nvme1, /dev/nvme2 gibi aygıt adlarından kaçınmak gerekir; çünkü yeni sürücü takıldığında sıraları garanti edilmez
/etc/zfs/vdev_id.conf, zpool oluşturmayı kolaylaştıran bir ayardır; OS bozulup bu dosyayı kaybetseniz bile ZFS havuzunun kendisinde sorun olmaz
zpool oluşturma ve veri kümelerini yapılandırma
- Örnek, 4 NVMe ile RAIDZ1 zpool oluşturur ve RAID 5 gibi 1 sürücü arızasına tolerans sağlar
- Daha yüksek hata toleransı gerekiyorsa RAIDZ2, yani RAID 6 yapılandırması daha dayanıklıdır
- ZFS kurulumu için OpenZFS kurulum belgelerine bakılır; örnek olarak RHEL 9’da
dnf install zfs şeklinde kurulur
- zpool oluştururken
ashift=12 seçeneği önerilir
- Birçok disk uyumluluk nedeniyle OS’ye 512KB sektör boyutu bildirir
- Samsung 990 Pro gibi yüksek kapasiteli diskler 4KB veya 8KB sektör boyutuna sahip olabilir
ashift=12, 4KB sektör boyutunu ifade eder ve performansı önemli ölçüde iyileştirebilir
- Bu değeri ayarlamak için son fırsat zpool oluşturma anıdır
zpool create -o ashift=12 s16z1 raidz1 nvme0 nvme1 nvme2 nvme3
zpool status s16z1
zpool disk soyutlamasıdır, zfs ise dosya sistemidir
zpool create çalıştırıldığında ZFS dosya sistemi de birlikte oluşturulur
zdb | grep ashift ile ashift: 12 ayarının yapılıp yapılmadığı kontrol edilebilir
- Paylaşımdan önce bağlama noktası ve sıkıştırma ayarlanır
zfs set mountpoint=/mnt/s16z1 s16z1
zfs set compression=lz4 s16z1
- Kök veri kümesinin altında
docs ve backups veri kümeleri oluşturulur
zfs create s16z1/docs
zfs create s16z1/backups
docs belgeler için, backups ise Time Machine yedekleri için kullanılır
- ZFS veri kümeleri basit klasörlerden daha fazla özellik sunar
- Veri kümesi bazında özellik yönetimi
- Şifreleme
- Aktarım ve replikasyon
- Anlık görüntüler
- Büyük dosya kategorileri için ayrı veri kümeleri oluşturmak daha iyidir
- Örneğin yalnızca
docs’u uzak bir sunucuya yedeklemek istediğinizde tüm s16z1 kök veri kümesini göndermeniz gerekmez
Samba ile paylaşım hesabı oluşturma
- Ağ dosya paylaşım yöntemi ZFS’den bağımsızdır; ZFS’nin host sisteme bağlanmış olması yeterlidir
- Samba kurulur
apt install samba
- Samba’ya özel UNIX kullanıcısı
john oluşturulur ve parola ayarlanır
useradd -m john
passwd john
smbpasswd -a john ile UNIX kullanıcısı john, Samba kullanıcısıyla ilişkilendirilir
- Bağlanan host, paylaşıma
SYS\john olarak erişebilir
- Samba kullanıcısının kaydı
pdbedit -L -v john ile doğrulanabilir
- Samba kullanıcısını silme işlemi
pdbedit -x -u john ile yapılır
Genel paylaşım ve Time Machine paylaşımı
/etc/samba/smb.conf düzenlenerek docs ve backups paylaşımları yapılandırılır
[docs]
path = /mnt/s16z1/docs
browseable = yes
read only = no
guest ok = no
valid users = john
create mask = 0755
[backups]
path = /mnt/s16z1/backups
read only = no
guest ok = no
inherit acls = yes
spotlight = yes
fruit:aapl = yes
fruit:time machine = yes
vfs objects = catia fruit streams_xattr
valid users = john
docs, genel amaçlı bir SMB paylaşımı olarak yapılandırılır
backups, macOS Time Machine’e yönelik özellikleri içerir
fruit:aapl = yes
fruit:time machine = yes
vfs objects = catia fruit streams_xattr
- macOS’te Finder’da
cmd+K tuşlarına basarak smb://10.0.0.6/docs veya smb://10.0.0.6/backups biçiminde bağlanılır
- Debian tabanlı sistemlerde
smbclient kurulduktan sonra aşağıdaki gibi test edilir
apt install smbclient
smbclient -U john //10.0.0.6/docs -c 'ls'
smb://10.0.0.6/backups bağlandığında macOS’te Time Machine paylaşımı olarak görünür
- Bağladıktan sonra macOS’te Settings > General > Time Machine’den ilgili paylaşımı ekleyerek Time Machine yedeklemesini başlatabilirsiniz
Hariç tutulanlar
- Şifreleme yapılandırması bu prosedüre dahil değildir
- Yedekleme stratejisi de dahil değildir
- ZFS veri kümesi replikasyon özelliğinin daha sonra ayrı bir yazıda genişletilmesi planlanmaktadır
1 yorum
Hacker News yorumları
Fiyat açısından şu an NAS kurmak için iyi bir zaman değil, ama son 2 haftadır bir tane yapıyorum. Jonsbo N6 kasa kullanıyorum; 8 SATA backplane’i ve disk yuvası var, bu yüzden önceki Jonsbo modellerinden farklı olarak oldukça iyi
Sonunda 4 adet 14TB WD Elements Desktop söküp kullanmaya karar verdim; içlerinde helyum dolgulu WD140EDGZ diskler vardı. 4 adet 12TB WD Red Plus’tan yaklaşık üçte bir daha ucuz ve performansı da benzer görünüyor. Garanti kesinlikle dezavantaj, ama 2 yıllık garanti süresi içinde bozulursa tekrar harici kasasına koyabilirim gibi geliyor
Önyükleme diski olarak ikinci el 256GB M.2 SSD taktım; LUKS, TPM anahtarı ve root ZFS’yi birlikte kullanıp tek bir disk bozulduğunda önyüklemenin engellenmemesini sağlamak için epey uğraştım. systemd-boot hakkında çok şey öğrendim ve grub’dan çok daha düzgün hissettiriyor
ZFS etrafında çok fazla mit ve cargo cult olduğunu da hissettim. Örneğin yazıda ECC RAM’den bahsediliyor ama ZFS’nin scrub sırasında pool’u bozduğu için bunun zorunlu olduğu iddiası daha çok mite yakın; ayrıca bu yıl özellikle pahalı. ZFS’nin çok fazla RAM’e ihtiyacı yok, L2ARC da çok RAM kullanmıyor
Hâlâ
dnodesize=autokullanıp kullanmamayı düşünüyorum; bununla ilgili korku hikâyeleri var: https://github.com/openzfs/zfs/issues/11353. Ayrıca makul fiyatazfs senddestekleyen bir bulut depolama sağlayıcısı bulmak zor; Rsync.net yakın zamanda minimum siparişi 10TiB’ye çıkardı, benim kullanımım için fazla büyük: https://www.rsync.net/products/zfsintro.htmlSihirli bir seçenek olsaydı, yapay zekanın hiç olmadığı ama depolamanın yapay zeka öncesi fiyatın onda biri olduğu tarafı neredeyse seçmek isterdim
Zaten yedeklilik için 2 diskten vazgeçmiş durumdayım; hatta yakın zamanda aynı partiden gibi görünen 2 SSD art arda öldü ve bunun faydasını gördüm. Ama performans ve kararlılık için en az bir disk kapasitesi kadar daha boş bırakma tavsiyesine de uyarsam, bugünkü fiyatlarla bu epey can yakıyor
https://words.filippo.io/frood/ ve https://0pointer.net/blog/fitting-everything-together.html yazılarını gördükten sonra, ev sunucusu/NAS’ı mkosi/systemd ile yapılandırma tarafına bakıyorum. Farklı yapılandırmaların bu problemi nasıl çözdüğünü görmek ilginç
/bootşifreli ve kurcalamaya karşı korumalı mı, evil maid saldırılarına dayanıyor mu diye merak ediyorumBunun bir tavşan deliği olduğunu biliyorum, ama hepsini çözdüysen gerçekten ilginç
https://www.samsung.com/us/memory-storage/nvme-ssd/990-pro-p...
NAS’ta faydalı bulduklarım: avahi-daemon kurarsanız Samba, SMB/CIFS’i DNS-SD üzerinden macOS ve Linux istemcilere otomatik olarak duyuruyor
Windows 10 ve sonrası için SMB 1.0’ı kapatmış istemcilerde Explorer otomatik keşfi için wsdd2 kurmak yeterli
Linux ana makine adları genelde küçük harfli olur, ama Samba varsayılan olarak NetBIOS ve Avahi’ye büyük harfle başlayan bir ad yayımlar. Bu sizi rahatsız ederse
/etc/avahi/avahi-daemon.confiçindeki[server]bölümünehost-name=somethingayarlayıp,/etc/samba/smb.confiçindeki[global]bölümünemdns name = mdnskoyabilirsinizmacOS istemcileriniz varsa Samba ayarlarında vfs_fruit’i açmak iyi olur: https://www.samba.org/samba/docs/current/man-html/vfs_fruit..... Uyumluluk nedenleri de var, ama asıl olarak
fruit:modelayarlayıp Finder kenar çubuğunda eğlenceli bir ikon gösterebilmek için.DS_Storeoluşturulmasını engellemek isterseniz yasaklayabilirsiniz: https://ryanoberto.github.io/blog/2015/04/01/disabling-the-c....fruit:resource = xattrile Finder ayarlarını genişletilmiş özniteliklere kaydetmek de mümkün olabilir, ama kendim denemedimmacOS uzun zaman önce AFP’yi SMB ile değiştireceğini söylemişti ve macOS 27’de AFP istemci desteği de kaldırılacak, ancak macOS’un SMB istemci desteği hâlâ oldukça kötü. O zamana kadar Samba ile birlikte Netatalk’ı da çalıştırmaya devam edeceğim; Netatalk da Avahi’ye kaydoluyor ve macOS anlamlı bir şekilde SMB yerine AFP’yi öncelikli kullandığından istemci otomatik olarak doğru daemon’a bağlanıyor
homesdizini ayarı bir şekilde takıntıyı tetikliyorBöyle bir NAS kurup ama bunu dm-integrity, mdadm, XFS gibi epey farklı teknolojilerle oluşturan blog yazımı bağlantı olarak vermem de uygun olabilir. Bir C/C++ geliştiricisi olarak OpenZFS geliştirmesini yakından takip edince, devasa özelliklere odaklanan akış ve SPL/ayrı sayfa önbelleği yüzünden ortaya çıkan sürekli sorunlar, kararlılık açısından beni endişelendirdi
ZFS adlı İsviçre çakısının rahatlığı yerine baştaki zahmete katlandım ama şimdi seçimimden çok memnunum
https://world-playground-deceit.net/blog/2025/06/nas-setup-l...
NAS kurarken ben de aynı sonuca vardım. Sistem için Nix, RAID için zfs, çalıştırmak istediğim servisler için de docker compose yeterliydi
https://www.splitbrain.org/blog/2025-08/03-diy_nas_on_nixos
Dolabın içindeki gürültülü ve çok elektrik tüketen raftan bıkınca, sonunda hepsi bir arada ev sunucusu ve yönlendiriciye dönüştü
https://HomeFree.host
Hâlâ Synology’ye para vermemin nedeni, disk bozulduğunda tepsiyi çıkarıp diski değiştirmem, geri takmam ve birkaç widget’a tıklamamın yeterli olması. Düzgün şekilde yeniden inşa edileceğini biliyorum
Disk bozulursa bip sesi çıkarıyor ve sorunlu diskin yakınındaki LED yanıyor; böylece ne yapmam gerektiğini de anlıyorum
Yazıda anlatılana benzer bir NAS yapmak kolay ama uzun vadede veri kaybı olasılığı çok daha yüksek
Ayrıca “3 numaralı disk bozulduğunda onu güvenli şekilde nasıl değiştiririm” konusunu ele almayan bu tür rehberlerin eksik olduğunu düşünüyorum. Disk arızasını nasıl anlayacağınızı açıklamasa bile bu prosedür yer almalı
Bu yüzden sürücüyü değiştirirken mdadm tüm sürücüyü yeniden oluşturmak zorundadır, ZFS ise yalnızca gerçekten kullanılan veriyi yeniden oluşturur
zpool replace my_pool disk3 newdiskİnsanların ZFS’i ve genelde “NAS” denen bileşenleri neden sonuna kadar zorladığını anlayabiliyorum, ama ben bir Linux makinesinde ext4 tek büyük HDD üzerinde sıkı bir NFSv3 yapılandırması çalıştırmakla da oldukça rahattım
Zaten uyanık olduğum sürece sürekli açık olan ana sistemim; tek bir makinenin güç tüketimi ve ek yüküyle diğer cihazlara dosya sunabiliyorum
Ağ yapılandırmasını temelde kısıtlayıcı tutmaya çalışıyorum, bu yüzden ana makinede çalıştırmanın güvenlik tarafı da beni çok endişelendirmiyor. Belki büyük bir günah işliyorumdur ama saf NFSv3 ve uyumluluk için Samba gerçekten yetersiz mi?
İnsanların ZFS’i ve “NAS”ı seçmesinin başlıca nedeni sağlama toplamları ve veri bütünlüğü koruması; bir nedeni de ana makineyi sürekli uyanık tutmak istememeleri
Anlık görüntü gibi özellikler de kullanışlı; yanlışlıkla dosya silme ya da üzerine yazma yüzünden veri kaybetme endişesini azaltıyor
24 saat açık olan ana makineyi NAS olarak kullanmanın kendisinde bir sorun görmüyorum. Bir şey uğruna zorla satın almak gerekmez ama güvenilirlik ve bit çürümesine karşı koruma konusunda kaygılıyım. Bu gerçekten oluyor; ZFS sayesinde bizzat gördüm
Basit bir yapılandırmayı korumak istiyorsanız dosya karmalarının bir listesini tutup periyodik olarak doğrulamayı düşünebilirsiniz
Anlık görüntü destekleyen bir yedekleme programı kullanmak da iyi olur; Restic iyi bir seçenek
Mevcut diskle aynı boyutta bir sabit disk daha alıp SnapRAID ile dosya bütünlüğünü yönetmek ya da btrfs ile 2 diskli ayna kurmak da mümkün
Cockpit, NAS ve VPS yönetiminde çok kullanışlıydı. LLM sayesinde yapılandırmanın kendisi büyük bir sorun olmasa da, anahtarları olan bir pano ve düzenli günlükler olması rahat; ayrıca SSH olmadan telefondan kabuk komutları çalıştırabiliyorsunuz
NAS’ta yedekleme/bakım cron işlerinin sonuçlarını kolayca görebiliyor, Samba’yı yönetebiliyor ve disk kullanımını izleyebiliyorum. Özellikle iPhone’da Samba’yı düzgün çalışır hale getirmek gerçekten baş ağrısı
Ben sunucu kimlik doğrulamasında açık anahtar/özel anahtar dışındaki yöntemlere inmek yerine, sonunda telefondan SSH yapılabilir hale getirmeyi tercih ediyorum. Bu konuda biraz komplo teorisyeni gibi temkinliyim
Eskiden kendi NAS’ımı kurarken şu yazıyı da öğrenme materyali olarak kullanmıştım: https://xyny.art/blog/2026-building-nas/
Sıfırdan NAS kurmak gerçekten eğlenceli. Konunun tamamını eksiksiz kapsayan “tam bir kaynak” olmaması küçük bir engel ama aynı zamanda eğlencenin de bir parçası
Benim yazımın amacı da internete bir tane daha önyargılı NAS yapılandırması “rehberi” eklemeye daha yakın. Rehber demeye çekiniyorum ama aynı işi tekrar yapmam gerekse kesinlikle önce kendi yazımı okurdum
Kavramsal olarak aynı şeyi çalıştırıyor, ancak Debian yerine FreeBSD kullanıyor. Daha iyi ya da daha kötü olmasından ziyade farklı ödünleşimleri var; sonuçta aynı şekilde gayet iyi çalışıyor.
NAS’i yeniden kurarken ZFS üzerinde NFS kullanmaya karar verdim. Ancak hedefim yazardan biraz farklı. Düşük güç tüketimli bir CPU/anakart kullanıp, failover yapabilen iki ayrı sistem kurarak yüksek erişilebilirlik biçiminde yapılandırdım.
Failover ve veri replikasyonunu yöneten özel bir yazılım da yazdım. Testlerde, failover sırasında istemcinin yazma işlemleri yalnızca birkaç saniye kadar duruyor. Bununla ilgili bir yazı yazarsam ilgi çeker mi merak ediyorum.