Arşivlemede Tape Sürücüsü Kullanımı: mt ve tar ile Kurumsal Yedekleme
Kurumsal ortamlarda yedekleme denince akla ilk gelen şey genellikle NAS, SAN ya da bulut çözümleri oluyor. Ama tape sürücüler hâlâ hayatta ve hâlâ çok ciddi bir yerde duruyor. Özellikle büyük veri merkezlerinde, arşiv politikalarında ve uzun süreli veri saklama gereksinimlerinde manyetik bant sürücüler, GB başına maliyet açısından rakipsiz. Ben bu işi on beş yıldır yapıyorum ve tape’i “eski teknoloji” diye bir kenara bırakan sysadmin’lerin sonradan başını belaya soktuğunu defalarca gördüm. Bu yazıda mt ve tar komutlarını kullanarak tape sürücüsüyle nasıl kurumsal düzeyde yedekleme yapılacağını, gerçek ortamlarda karşılaşılan sorunlarla birlikte anlatacağım.
Tape Sürücüsü Neden Hâlâ Geçerli?
LTO (Linear Tape-Open) teknolojisi sürekli gelişiyor. LTO-9 ile tek bir kartuşta 18 TB ham veri, sıkıştırmayla 45 TB’a kadar çıkabiliyor. Disk tabanlı çözümlerle kıyaslandığında güç tüketimi neredeyse sıfır, fiziksel güvenlik çok daha kolay yönetilebilir ve air-gap güvenliği doğal olarak sağlanıyor. Ransomware saldırılarının bu kadar yaygınlaştığı bir dönemde, çevrimiçi olmayan bir yedek medyasının değeri tartışılmaz.
Linux’ta tape sürücüler /dev/st0, /dev/st1 gibi “rewind” cihazları ya da /dev/nst0, /dev/nst1 gibi “no-rewind” cihazları olarak görünür. Bu ayrım kritik: st ile her işlem sonrası bant başa sarar, nst ile sarmaz. Ardışık yazma işlemlerinde kesinlikle nst kullanmanız gerekiyor.
mt Komutu: Bant Sürücüsünü Yönetmek
mt (magnetic tape) komutu, tape sürücüsünün donanım düzeyinde kontrolünü sağlar. Bandı ileri-geri almak, durumunu sorgulamak, silmek gibi temel operasyonlar için kullanırsınız.
Temel mt Kullanımı
# Tape sürücüsünün durumunu kontrol et
mt -f /dev/nst0 status
# Bandı başa sar
mt -f /dev/st0 rewind
# Sonraki dosyaya geç (tape mark'ı atla)
mt -f /dev/nst0 fsf 1
# 3 dosya geri git
mt -f /dev/nst0 bsf 3
# Bandın sonuna git (End of Data)
mt -f /dev/nst0 eod
# Tape'i çıkarmaya hazırla (rewind + eject)
mt -f /dev/st0 eject
# Tüm bandı sil (dikkatli kullanın!)
mt -f /dev/nst0 erase
mt status çıktısını okumayı öğrenmek önemli. Çıktıdaki File number değeri banttaki kaçıncı dosya konumunda olduğunuzu gösterir. Block number ise o dosya içindeki blok pozisyonunu verir. Yeni bir bant taktığınızda her ikisi de 0 olmalı.
mt ile Önemli Parametreler
status: Sürücünün mevcut durumunu ve pozisyonunu gösterir rewind: Bandı en başa sarar eod: End of Data noktasına konumlanır, yeni veri yazmak için kullanılır fsf N: N adet forward space file, N dosya ileri atlar bsf N: N adet backward space file, N dosya geri döner fsr N: N blok ileri atlar (dosya sınırı aşılmaz) erase: Tüm bandı siler, geri dönüşü yoktur compression 1/0: Donanım sıkıştırmayı açar/kapatır setblk N: Blok boyutunu ayarlar (0 = değişken blok)
tar ile Tape’e Yedekleme
tar komutu Linux dünyasında zaten herkesin bildiği bir araç ama tape ile kullanırken bazı incelikler devreye giriyor.
Basit Tape Yedekleme
# /data dizinini tape'e yaz
tar -cvf /dev/nst0 /data/
# Yedeklemeyi doğrula (verify)
tar -dvf /dev/nst0 /data/
# Tape'teki içeriği listele
tar -tvf /dev/nst0
# Tape'ten geri yükle
tar -xvf /dev/nst0 -C /restore/
Dikkat edin, tape ile çalışırken z veya j sıkıştırma bayraklarını kullanmıyoruz. Donanım sıkıştırma zaten tape sürücü tarafından yapılıyor. Yazılım sıkıştırması eklemek hem işlemi yavaşlatır hem de bir blok bozulduğunda recovery’yi imkânsız hale getirebilir.
Blok Boyutu Optimizasyonu
Bu kısım çok kritik ve genellikle gözden kaçıyor. tar‘ın varsayılan blok boyutu 512 byte, bu ise tape sürücüleri için son derece verimsiz. Modern LTO sürücüler için 64KB veya 256KB blok boyutu kullanmak performansı dramatik biçimde artırır.
# 64KB blok boyutuyla yaz (--blocking-factor=128, 128*512=65536 byte)
tar -cvb 128 -f /dev/nst0 /data/
# 256KB blok boyutuyla yaz
tar -cvb 512 -f /dev/nst0 /data/
# Geri yüklerken aynı blok boyutunu kullanmak zorunda değilsiniz
# ama yine de belirtmek güvenli
tar -xvb 512 -f /dev/nst0 -C /restore/
Pratikte ben her zaman --blocking-factor=512 ile çalışıyorum. Üretim ortamında bu basit değişiklik yedekleme hızını 3-4 kat artırabilir.
Çok Dosyalı Tape Arşivi: Gerçek Senaryo
Tek bir tape’e birden fazla yedek seti yazmak mümkün ve yaygın kullanılan bir yöntem. Her tar işlemi tape’e bir “file mark” bırakır, mt fsf ile bu işaretler arasında geçiş yapabilirsiniz.
# Tape'i başa sar
mt -f /dev/st0 rewind
# İlk yedek: /home dizini
tar -cvb 512 -f /dev/nst0 /home/
echo "Home yedegi tamamlandi"
# İkinci yedek: /etc dizini
tar -cvb 512 -f /dev/nst0 /etc/
echo "Etc yedegi tamamlandi"
# Üçüncü yedek: /var/log dizini
tar -cvb 512 -f /dev/nst0 /var/log/
echo "Log yedegi tamamlandi"
# Tape'i başa sar ve içeriği doğrula
mt -f /dev/st0 rewind
echo "=== Dosya 0 (home) ==="
tar -tvb 512 -f /dev/nst0 | head -5
mt -f /dev/nst0 fsf 1
echo "=== Dosya 1 (etc) ==="
tar -tvb 512 -f /dev/nst0 | head -5
mt -f /dev/nst0 fsf 1
echo "=== Dosya 2 (var/log) ==="
tar -tvb 512 -f /dev/nst0 | head -5
Geri yükleme sırasında doğrudan belirli bir dosyaya gitmek için:
# Tape'i başa sar
mt -f /dev/st0 rewind
# 2. dosyaya (index 1) git ve sadece onu geri yükle
mt -f /dev/nst0 fsf 1
tar -xvb 512 -f /dev/nst0 -C /restore/etc/
Kurumsal Düzeyde Yedekleme Scripti
Gerçek bir üretim ortamında kullandığım, üzerinde birçok iterasyondan geçmiş bir script paylaşıyorum. Basit ama güvenilir:
#!/bin/bash
# tape_backup.sh - Kurumsal tape yedekleme scripti
TAPE_DEV="/dev/nst0"
BLOCK_SIZE=512
LOG_FILE="/var/log/tape_backup_$(date +%Y%m%d).log"
BACKUP_LABEL="BACKUP_$(hostname)_$(date +%Y%m%d)"
# Loglama fonksiyonu
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# Hata kontrolü fonksiyonu
check_error() {
if [ $? -ne 0 ]; then
log "HATA: $1 islemi basarisiz oldu!"
mt -f "$TAPE_DEV" rewind
exit 1
fi
}
# Tape sürücüsü hazır mı kontrol et
log "Tape surucusu kontrol ediliyor..."
mt -f "$TAPE_DEV" status >> "$LOG_FILE" 2>&1
check_error "Tape status"
# Tape'i başa sar
log "Tape basa sariliyor..."
mt -f /dev/st0 rewind
check_error "Tape rewind"
# Label dosyası oluştur ve tape'e yaz
log "Tape etiketi yaziliyor: $BACKUP_LABEL"
echo "$BACKUP_LABEL" | tar -cvb "$BLOCK_SIZE" -f "$TAPE_DEV" --label="$BACKUP_LABEL" -T /dev/stdin
# Yedeklenecek dizinler
BACKUP_DIRS=("/home" "/etc" "/var/lib" "/opt/apps")
for dir in "${BACKUP_DIRS[@]}"; do
if [ -d "$dir" ]; then
log "Yedekleniyor: $dir"
tar -cvb "$BLOCK_SIZE" -f "$TAPE_DEV"
--exclude="$dir/tmp"
--exclude="$dir/cache"
"$dir" >> "$LOG_FILE" 2>&1
check_error "$dir yedekleme"
log "$dir yedegi tamamlandi"
else
log "UYARI: $dir dizini bulunamadi, atlaniyor"
fi
done
# EOD'a yaz (tape'i koru)
mt -f "$TAPE_DEV" eod
log "Tum yedeklemeler tamamlandi"
log "Log dosyasi: $LOG_FILE"
Bu scripti cron ile gece yarısı çalışacak şekilde planlamak ve çıktısını mail ile almak standart operasyonun parçası olmalı.
Incremental Yedekleme: –newer ve –listed-incremental
Kurumsal ortamda her gece full backup almak tape israfı ve zaman kaybıdır. Incremental yedekleme için iki yöntem var:
# Yöntem 1: --newer ile tarih bazlı incremental
# Dünden bu yana değişen dosyaları yedekle
tar -cvb 512 -f /dev/nst0
--newer="$(date -d '1 day ago' '+%Y-%m-%d')"
/data/
# Yöntem 2: --listed-incremental ile snapshot tabanlı
# İlk kez çalıştırma (full backup, snapshot dosyası oluşturur)
tar -cvb 512 -f /dev/nst0
--listed-incremental=/var/lib/backup/data.snar
/data/
# Sonraki çalıştırmalarda incremental backup alır
tar -cvb 512 -f /dev/nst0
--listed-incremental=/var/lib/backup/data.snar
/data/
# Geri yükleme: önce full, sonra sırayla incremental'ları uygula
mt -f /dev/st0 rewind
tar -xvb 512 -f /dev/nst0
--listed-incremental=/dev/null
-C /restore/
--listed-incremental yöntemi daha güvenilir çünkü silinmiş dosyaları da takip ediyor. Snapshot dosyasını (*.snar) yedeklemek için güvenli bir yerde (tape’den farklı) saklamayı unutmayın.
Tape Doğrulama ve Bütünlük Kontrolü
Yazdığınız backup’ın okunabilir olduğundan emin olmak, tape yönetiminin en kritik adımı. Bunu yapmayan sysadmin’ler, ihtiyaç anında boş bakan sysadmin’lerdir.
#!/bin/bash
# tape_verify.sh - Tape içeriğini doğrula
TAPE_DEV="/dev/nst0"
BLOCK_SIZE=512
ERRORS=0
echo "Tape basa sariliyor..."
mt -f /dev/st0 rewind
# Her dosyayı tek tek doğrula
FILE_NUM=0
while true; do
echo "--- Dosya $FILE_NUM dogrulanıyor ---"
# tar ile doğrulama yap
tar -tvb "$BLOCK_SIZE" -f "$TAPE_DEV" > /tmp/tape_file_${FILE_NUM}.list 2>&1
EXIT_CODE=$?
# EOT (End of Tape) kontrolü
if [ $EXIT_CODE -eq 1 ] && mt -f "$TAPE_DEV" status 2>&1 | grep -q "EOD|EOM"; then
echo "Tape sonu ulasildi. Toplam $FILE_NUM dosya dogrulandi."
break
fi
if [ $EXIT_CODE -ne 0 ]; then
echo "HATA: Dosya $FILE_NUM okunamadi!"
ERRORS=$((ERRORS + 1))
else
FILE_COUNT=$(wc -l < /tmp/tape_file_${FILE_NUM}.list)
echo "Dosya $FILE_NUM: $FILE_COUNT kayit dogrulandi"
fi
# Sonraki dosyaya geç
mt -f "$TAPE_DEV" fsf 1
FILE_NUM=$((FILE_NUM + 1))
# Maksimum dosya sayısı kontrolü (infinite loop koruması)
if [ $FILE_NUM -gt 100 ]; then
echo "Maksimum dosya limitine ulasildi"
break
fi
done
echo "Dogrulama tamamlandi. Hata sayisi: $ERRORS"
exit $ERRORS
Tape Yönetiminde Karşılaşılan Gerçek Sorunlar
Bant gerginliği sorunu: Uzun süre kullanılmayan bantlar gerginliklerini kaybedebilir. mt retension komutu bandı baştan sona ve tekrar başa sararak gerginliği eşitler. Uzun süre depoda bekleyen bantları kullanmadan önce bunu yapın.
Blok boyutu uyuşmazlığı: Farklı blok boyutlarıyla yazılmış verileri okurken sorun yaşanabilir. Tape’in içeriği hakkında bilginiz yoksa dd ile okumayı deneyin:
# Bilinmeyen blok boyutlu tape'i okuma denemesi
dd if=/dev/nst0 of=/tmp/tape_test.tar bs=64k count=1 2>&1
# tar'a blok boyutunu otomatik tespit ettir
tar -xvf /dev/nst0 -C /restore/ --block-compress
Tape doluluk tespiti: Tape yazarken ENOSPC hatası alırsanız bant dolmuş demektir. Bunun için yedekleme scriptinize kontrol eklemeli ya da birden fazla tape’i zincirleyecek bir mekanizma kurmalısınız.
Tape Envanteri ve Rotasyon Politikası
Sadece komut bilmek yetmez. Tape yönetiminin kurumsal boyutunda şunlara dikkat etmek gerekiyor:
- Her tape’in üzerine etiket yapıştırın ve aynı bilgiyi dijital envanterinize ekleyin
- GFS (Grandfather-Father-Son) rotasyon şeması kullanın: günlük, haftalık, aylık bantları ayrı tutun
- Offsite depolama zorunlu: bir felakette hem sunucu hem de tape aynı binada yanmasın
- LTO bantların raf ömrü 30 yıl olarak belirtiliyor ama pratikte 10 yılda bir doğrulama yapmanızı öneririm
- Tape sürücünüzün temizlenmesi için üretici tavsiyelerine uyun, temizleme kartuşlarını ihmal etmeyin
- Her backup sonrası tape’i write-protect (yazmaya karşı koru) konumuna getirin
- Bantları 16-25 derece arası, düşük nem ortamında saklayın
Sonuç
Tape teknolojisi öldü demek için henüz çok erken. Hiper ölçekli veri merkezleri bu teknolojiye yatırım yapmaya devam ediyor, LTO standardı gelişiyor ve maliyet avantajı tartışmasız sürüyor. mt ve tar kombinasyonu, lisans bedeli ödemeden kurumsal düzeyde yedekleme yapmanızı sağlayan güçlü bir ikili. Evet, modern arayüzleri yok, bazen alıştığınız araçlardan farklı davranıyorlar, ama güvenilirlik açısından kanıtlanmış bir çözüm.
Bir sysadmin olarak göreviniz sadece yedek almak değil, geri yüklemenin çalıştığından emin olmak. Düzenli restore testleri yapın, tape doğrulama scriptlerinizi cron’a ekleyin ve tape envanterinizi güncel tutun. O kritik anı beklemeyin. Tape backup, sabır ve disiplin isteyen bir iş. Ama doğru kurulduğunda, sizin en güvenilir sigortanız olur.
