1 puan yazan GN⁺ 4 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 4 시간 전
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=auto kullanıp kullanmamayı düşünüyorum; bununla ilgili korku hikâyeleri var: https://github.com/openzfs/zfs/issues/11353. Ayrıca makul fiyata zfs send destekleyen 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.html

    • “Fiyat açısından iyi bir zaman değil” demek yetersiz kalır. Şu an NAS yapmak için berbat bir fiyat seviyesi var
      Sihirli 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
    • 8 diskli bir ZFS RAIDZ2 pool çalıştırıyorum; ZFS’nin boş alan önerilerinin cargo cult mu yoksa gerçek mi olduğunu merak ediyorum
      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
    • “Debian tabanlı NAS’ı debootstrap eden büyük script”in herhangi bir kısmı açıkta var mı merak ediyorum
      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ç
    • LUKS ve TPM anahtarı kombinasyonunun pratikte gerçekten iyi çalışıp çalışmadığını merak ediyorum. Sunucu yeniden başlatıldığında TPM ile root dosya sisteminin kilidi açılabiliyor mu, /boot şifreli ve kurcalamaya karşı korumalı mı, evil maid saldırılarına dayanıyor mu diye merak ediyorum
      Bunun bir tavşan deliği olduğunu biliyorum, ama hepsini çözdüysen gerçekten ilginç
    • Samsung SSD 990 PRO 4TB NVMe SSD’lerden 4 tanesi, adet başı 1100 dolar. Baş döndürücü
      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.conf içindeki [server] bölümüne host-name=something ayarlayıp, /etc/samba/smb.conf içindeki [global] bölümüne mdns name = mdns koyabilirsiniz
    macOS 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:model ayarlayıp Finder kenar çubuğunda eğlenceli bir ikon gösterebilmek için
    .DS_Store oluşturulmasını engellemek isterseniz yasaklayabilirsiniz: https://ryanoberto.github.io/blog/2015/04/01/disabling-the-c.... fruit:resource = xattr ile Finder ayarlarını genişletilmiş özniteliklere kaydetmek de mümkün olabilir, ama kendim denemedim
    macOS 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

    • Samba’da kullanıcı home dizinlerini ayrı bir öğe olarak eklemek iyi olur. Varsayılan homes dizini ayarı bir şekilde takıntıyı tetikliyor
  • Bö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

    • Ben de NAS’ımda NixOS kullanıyorum. Konteyner yönetimi için Nix ile birlikte quadlets’e, yani systemd tarafından yönetilen Docker konteynerlerine bakmak iyi olur
    • Benzer şekilde NixOS’u NAS olarak kullanıyorum; giderek büyüdü ve artık başkalarıyla da paylaşmaya hazırlanıyorum. Ancak ben MDADM üzerinde BTRFS kullanıyorum
      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ı

    • snooty’nin Synology’nin otomatik tamamlama hatası mı, yoksa başka bir ürün mü olduğunu merak ediyorum
    • Aslında ZFS tam olarak böyle çalışır. Rehberin eksik olduğu doğru ama diziyi yeniden inşa etmek, diski değiştirip tek bir ZFS komutu çalıştırmaktan ibaret
    • ZFS, sürücü arızalarını neredeyse her şeyden daha sağlam şekilde ele alır. Synology’nin BTRFS’in yerleşik RAID özelliği yerine BTRFS altında mdadm kullanmasının bir nedeni var; mdadm aygıt düzeyinde çalışır
      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
    • ZFS’de “bip sesi ve LED” kısmı hariç bu işlem tamamen önemsiz hale gelir
  • İ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?

    • Öncelikle o tek büyük HDD’nin yedeği var mı, onu merak ediyorum. En büyük kaygım bu. Bir gün o HDD mutlaka bozulacak; o zaman planın ne olduğu önemli
      İ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
    • Bu kurulumda daha büyük sorun tek sürücülü depolama yapısı. Tek bir disk bozulursa dayanıklılığı yok ve donanım verileri sessizce bozmaya başlarsa tüm veriler risk altında. Yedeklerin de o tek sabit diskteki veriyi temel aldığı varsayımı var
      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
    • Birden fazla makine aynı anda okuyup yazmaya başlarsa sınırlara çarparsınız. Yine de şu an ihtiyacınız olanı kurmak yeterli; aşırı optimize etmeye gerek yok
  • 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ı

    • SSH olmadan telefondan kabuk komutları çalıştırıyorsanız Cockpit kimlik doğrulaması nasıl yapılıyor, merak ediyorum. Önüne temel HTTP kimlik doğrulaması koymak gibi mi?
      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.