26 Mayıs 2025 Pazartesi

draid - zfs ile draid kullanımı

 36 ve üzeri disk kullanacak olduğumuzda, performans için draid kullanmamız doğru seçim olacaktır.
Unutmamamız gereken nokta, kapasite artırımı yapılmayı düşünüyorsak, draid oluştururken draid bölümlerini artırmayı düşündüğümüz alan kadar yapmamız gerekiyor. Yani bir jbod ilave ederek ve jbod üzerinde 36 disk gelecekse, birinci bölümümüzde 36 diske göre plan yapmamız gerekiyor. 

Örnek:

jbod disk kapasitesi : 36

eklenecek jbod disk kalitesi : 36 disk 
zpool create dpool2 draid2:34d:0s:36c /dev/sda{a..z} /dev/sdb{a..j}

34d: 34 adet data diski

36c: toplam 36 disk

2 disk parity diski olarak kullanılır.

İlave 36 diskli jbod gelince 

zpool add dpool2 draid2:34d:0s:36c sdc{a..z} sdd{a..j}


Genel yedek disk ekleme;

zpool add dpool2 spare /dev/sda[xy]

Veri güvenliği önemli olduğundan draid1 yerine draid2 kullandık, yani 2 tane paritimiz, iki tane spare  oldu.

spare diski draid oluştururken, dedike verirsek, bu disk sadece oluşturulan draid atanmış spare olur.
eklenecek ilave draid gurublarına faydası olmaz, fazladan diski boşta tutmamız gerekir.
Bundan dolayı draidler oluşturulduktan sonra spare direk pool atıyoruz. Pool içinde her hangi bir draid disk aksaklığı olursa, spare hemen onun yerine geçer. Bizimde arızalı diski bir an önce değiştirmemiz sürekliliği sağlar.

Benzer bir çalışmanın kayıtı:






                                           


13 Mayıs 2025 Salı

Bir sunucu uzerindeki zfs datasetinin yeni bir pool uzerine tasinmasi, yerel replikasyon

Asagidaki script eski zfs den yeni zfs veri kopyalamasi yapar.

##########################scriptin calistirma sorumlulugu calistirana aittir. #######################################

 #!/bin/bash
# zfs uzerindek verileri hizli tasimak icin zfs replikasyonu yapar
#
# Kullanım: ./zfs_local_replicate.sh source_dataset destination_dataset
# 2025.05.13
# Remzi AKYUZ
# remzi@akyuz.tech


SOURCE_FS="$1"
DEST_FS="$2"
DATE=$(date +"%Y%m%d-%H%M%S")
SNAPSHOT_NAME="${SOURCE_FS}@replica-${DATE}"

# Hatalı kullanım kontrolü
if [[ -z "$SOURCE_FS" || -z "$DEST_FS" ]]; then
  echo "Kullanım: $0 <source_dataset> <destination_dataset>"
  exit 1
fi

# 1. Snapshot oluştur
echo "[+] Snapshot oluşturuluyor: $SNAPSHOT_NAME"
zfs snapshot "$SNAPSHOT_NAME"

# 2. İlk defa mı yoksa incremental mi?
LAST_SNAP=$(zfs list -t snapshot -o name -s creation | grep "^${SOURCE_FS}@replica-" | tail -2 | head -1)

if [[ -n "$LAST_SNAP" && "$LAST_SNAP" != "$SNAPSHOT_NAME" ]]; then
  echo "[+] Incremental send: $LAST_SNAP -> $SNAPSHOT_NAME"
  zfs send -i "$LAST_SNAP" "$SNAPSHOT_NAME" | zfs receive -F "$DEST_FS"
else
  echo "[+] Tam send (ilk kez çalışıyor olabilir)"
  zfs send "$SNAPSHOT_NAME" | zfs receive -F "$DEST_FS"
fi

# 3. Replikasyon tamam
echo "[+] Replikasyon tamamlandı. Hedef: $DEST_FS"

# 4. Eski snapshot'ları sil (yalnızca replica- ile başlayanlar)
echo "[+] Eski snapshot'lar temizleniyor, yalnızca son 3 adet tutulacak..."

SNAPSHOTS=($(zfs list -t snapshot -o name -s creation | grep "^${SOURCE_FS}@replica-" ))

TOTAL=${#SNAPSHOTS[@]}

if (( TOTAL > 3 )); then
  COUNT=$((TOTAL - 3))
  for ((i=0; i<$COUNT; i++)); do
    OLD_SNAP="${SNAPSHOTS[$i]}"
    echo "[-] Siliniyor: $OLD_SNAP"
    zfs destroy "$OLD_SNAP"
  done
else
  echo "[=] Silinecek eski snapshot bulunamadı (toplam: $TOTAL)"
fi


echo "[+] Hedef dataset'teki eski snapshot'lar temizleniyor..."

DEST_SNAPSHOTS=($(zfs list -t snapshot -o name -s creation | grep "^${DEST_FS}@replica-" ))

TOTAL_DEST=${#DEST_SNAPSHOTS[@]}

if (( TOTAL_DEST > 3 )); then
  COUNT_DEST=$((TOTAL_DEST - 3))
  for ((i=0; i<$COUNT_DEST; i++)); do
    OLD_DEST_SNAP="${DEST_SNAPSHOTS[$i]}"
    echo "[-] Siliniyor (hedef): $OLD_DEST_SNAP"
    zfs destroy "$OLD_DEST_SNAP"
  done
else
  echo "[=] Silinecek hedef snapshot bulunamadı (toplam: $TOTAL_DEST)"
fi

##########################scriptin calistirma sorumlulugu calistirana aittir. #######################################

Ozellikle buyuk hacimli dosya sistemlerinin tasinmasi icin uygundur.

tasima islemleri snapshotlar ile yapilmaktadir. snapshot esnasinda acik dosya varsa, acik dosyalar kapatilip, script calistirilir ve tekrar dosya yazma islemlerine devam edilir.
Bellir bir servis kullaniyorsaniz, servisi durdurun, script baslatin, snaphot alindiktan ve kopyalama devam ederken, servisi tekrar baslatabilirsiniz.

Alternatif olarak scriptdeki asagidaki satirlari duzenleyebilirsiniz.


systemctl stop servis_ismi

# 1. Snapshot oluştur
echo "[+] Snapshot oluşturuluyor: $SNAPSHOT_NAME"

zfs snapshot "$SNAPSHOT_NAME"


systemctl start servis_ismi

Bu islem servisini anlik olarak durdurur, snap sonrasi tekrar baslatir.
Servisinizin data butunlugu korunmus olur.

ansible ile yerel quay sunucusu üzerinden execution environment kullanımı

 Yerel quay veya registry sunucularımızdaki ee leri ansible ile kullanabiliyoruz. Bunun için kendi yaptığımız ee leri veya hazır ee leri yük...