Disk İmajı ile Tam Sistem Yedeği: Partclone Kullanım Kılavuzu
Sistemler çöker, diskler bozulur, yanlış bir komut her şeyi mahvedebilir. Tam bu yüzden disk imajı yedeklemesi, her sysadmin’in araç kutusunda olması gereken en kritik tekniklerden biridir. dd kullanarak tüm diski blok blok kopyalamak eski güvenilir yöntemdir ama yavaş ve israf doludur. İşte tam burada Partclone devreye giriyor: dosya sistemini anlayan, sadece kullanılan blokları yedekleyen, hızlı ve verimli bir disk imajlama aracı.
Partclone Nedir ve Neden dd’den İyidir?
Partclone, 2007 yılında Clonezilla projesinin bir parçası olarak geliştirilen açık kaynaklı bir disk klonlama aracıdır. Clonezilla’nın arka planda kullandığı temel motor olarak da tanınır.
dd komutu bir bölümü blok blok okur, kullanılmayan alanlar dahil. 500 GB’lık bir bölümde sadece 50 GB veri olsa bile dd tüm 500 GB’ı okur ve yazar. Partclone ise dosya sistemini parse eder ve sadece kullanımda olan blokları yedekler. Bu fark pratikte inanılmaz zaman ve alan tasarrufu anlamına gelir.
Partclone’un desteklediği dosya sistemleri oldukça geniştir:
- ext2/ext3/ext4: En yaygın Linux dosya sistemleri
- btrfs: Modern snapshot destekli Linux dosya sistemi
- xfs: RHEL/CentOS/Rocky Linux varsayılanı
- ntfs: Windows bölümleri için
- fat12/fat16/fat32: Eski ve gömülü sistemler
- exfat: Büyük dosyalar için modern FAT
- hfs+: macOS eski dosya sistemi
- f2fs: Flash storage optimize dosya sistemi
- ufs: BSD sistemleri
Kurulum
Partclone çoğu Linux dağıtımının deposunda bulunur. Kurulum son derece basittir.
Debian/Ubuntu tabanlı sistemlerde:
sudo apt update
sudo apt install partclone
RHEL/CentOS/Rocky Linux/AlmaLinux için:
EPEL deposunu etkinleştirmeniz gerekir:
sudo dnf install epel-release
sudo dnf install partclone
Arch Linux için:
sudo pacman -S partclone
Kurulumdan sonra hangi araçların geldiğini kontrol edebilirsiniz:
ls /usr/sbin/partclone.*
Çıktıda partclone.ext4, partclone.ntfs, partclone.xfs gibi dosya sistemine özel ikili dosyaları görürsünüz. Her biri o dosya sistemi için optimize edilmiştir.
Temel Kullanım: İlk Yedek
Bir bölümün imajını almadan önce o bölümün mount edilmemiş (bağlantısı kesilmiş) olması veya en azından salt okunur modda olması gerekir. Canlı bir sistemi yedekliyorsanız, önce servisleri durdurun ya da bir live CD/USB ortamından çalışın.
En temel imaj alma komutu şöyle görünür:
sudo partclone.ext4 -c -s /dev/sda1 -o /mnt/backup/sda1.img
Parametrelerin anlamları:
- -c: Clone modunda çalış (kaynak -> imaj)
- -s: Kaynak bölüm (source)
- -o: Çıkış dosyası (output)
İmajı geri yüklemek için -r (restore) modunu kullanırsınız:
sudo partclone.ext4 -r -s /mnt/backup/sda1.img -o /dev/sda1
Burada kaynak ve hedefin yer değiştirdiğine dikkat edin. Geri yükleme yaparken hedef bölümün kaynak imajdan küçük olmaması gerekir.
Sıkıştırma ile Verimli Yedekleme
Disk imajları çok büyük olabilir. Partclone’u gzip, bzip2 veya zstd ile pipe ederek imajları anında sıkıştırabilirsiniz. Bu en yaygın kullanım senaryosudur.
gzip ile sıkıştırılmış imaj:
sudo partclone.ext4 -c -s /dev/sda1 | gzip -c > /mnt/backup/sda1.img.gz
Çok çekirdekli sıkıştırma için pigz kullanımı:
sudo partclone.ext4 -c -s /dev/sda1 | pigz -c > /mnt/backup/sda1.img.gz
En hızlı sıkıştırma için zstd (modern sistemlerde tavsiye edilir):
sudo partclone.ext4 -c -s /dev/sda1 | zstd -c > /mnt/backup/sda1.img.zst
Geri yükleme için sıkıştırmayı açarak pipe edersiniz:
zstd -d -c /mnt/backup/sda1.img.zst | sudo partclone.ext4 -r -o /dev/sda1
Pratikte zstd, gzip’e kıyasla 2-3 kat daha hızlı sıkıştırma yaparken benzer sıkıştırma oranı sunar. Büyük imajlar için zstd’yi kesinlikle tercih edin.
XFS ve NTFS Bölümleri İçin Kullanım
Dosya sistemine göre doğru Partclone aracını seçmelisiniz. Yanlış araç kullanırsanız hata alırsınız ya da daha kötüsü, sessizce bozuk bir imaj oluşturursunuz.
XFS bölümü yedekleme (RHEL/Rocky Linux sistemleri için tipik):
sudo partclone.xfs -c -s /dev/sdb1 -o - | zstd -c > /mnt/nas/server-data.img.zst
Burada -o - çıktıyı stdout’a yönlendirir, bu da pipe kullanımına olanak tanır.
Windows NTFS bölümü yedekleme:
sudo partclone.ntfs -c -s /dev/sdc1 | gzip -c > /mnt/backup/windows-c.img.gz
Btrfs subvolume içeren bölüm:
sudo partclone.btrfs -c -s /dev/sda2 | zstd -c > /mnt/backup/btrfs-root.img.zst
Btrfs için Partclone’un snapshot özelliklerini takip etmediğini, sadece blok düzeyinde çalıştığını unutmayın. Btrfs snapshot yönetimi için btrfs send/receive daha uygun olabilir.
Detaylı İlerleme Takibi
Büyük diskleri yedeklerken ilerlemeyi takip etmek istersiniz. Partclone’un -d (debug) ve -C parametreleri bu konuda yardımcı olur:
sudo partclone.ext4 -c -d -s /dev/sda1 -o /mnt/backup/sda1.img
- -d: Debug modunda çalıştır, detaylı ilerleme gösterir
- -C: Boyut kontrolünü atla (hedef küçükse uyarıyı yoksay, dikkatli kullanın)
- -F: Tüm blokları kopyala (kullanılmayan bloklar dahil, dd benzeri davranış)
- -z: Sıfır bloklarını atla
- –rescue: Bozuk disklerden kurtarma modunda çalış
Kurtarma modu son derece değerlidir. Disk okuma hatası veriyorsa --rescue ile okunabilen blokları alabilirsiniz:
sudo partclone.ext4 -c --rescue -s /dev/sda1 -o /mnt/backup/rescued.img
Gerçek Dünya Senaryosu 1: Üretim Web Sunucusu Yedekleme
Senaryo: Bir Ubuntu 22.04 web sunucunuz var, /dev/sda üzerinde çalışıyor. Aylık tam sistem yedeklerini uzak bir NFS mount noktasına almak istiyorsunuz.
Önce bölüm yapısını inceleyin:
lsblk -f /dev/sda
Çıktı size her bölümün dosya sistemini gösterecektir. Varsayalım ki:
/dev/sda1: EFI bölümü (fat32)/dev/sda2: Boot bölümü (ext4)/dev/sda3: Root bölümü (ext4)
Şimdi bir yedekleme scripti oluşturalım:
#!/bin/bash
# /usr/local/sbin/full-system-backup.sh
BACKUP_DIR="/mnt/nfs-backup/$(hostname)/$(date +%Y-%m-%d)"
LOG_FILE="/var/log/partclone-backup.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
mkdir -p "$BACKUP_DIR"
echo "[$DATE] Yedekleme basladi" >> "$LOG_FILE"
# EFI bolumu
partclone.fat32 -c -s /dev/sda1 | zstd -c > "$BACKUP_DIR/sda1-efi.img.zst"
echo "[$DATE] sda1 tamamlandi, cikis kodu: $?" >> "$LOG_FILE"
# Boot bolumu
partclone.ext4 -c -s /dev/sda2 | zstd -c > "$BACKUP_DIR/sda2-boot.img.zst"
echo "[$DATE] sda2 tamamlandi, cikis kodu: $?" >> "$LOG_FILE"
# Root bolumu - once servisleri durdur
systemctl stop nginx mysql
sync
partclone.ext4 -c -s /dev/sda3 | zstd -c > "$BACKUP_DIR/sda3-root.img.zst"
systemctl start nginx mysql
echo "[$DATE] sda3 tamamlandi, cikis kodu: $?" >> "$LOG_FILE"
# Partition tablosunu da kaydet
sgdisk --backup="$BACKUP_DIR/partition-table.sgdisk" /dev/sda
sfdisk -d /dev/sda > "$BACKUP_DIR/partition-table.txt"
echo "[$DATE] Yedekleme tamamlandi" >> "$LOG_FILE"
Bu scripti cron’a ekleyebilirsiniz:
# Her ayın 1'i gece 02:00'de çalıştır
0 2 1 * * root /usr/local/sbin/full-system-backup.sh
Gerçek Dünya Senaryosu 2: Hasarlı Diskten Veri Kurtarma
Senaryo: Bir müşterinin sunucu diski fiziksel hasar görmeye başladı, SMART hataları var. Diski tamamen kaybetmeden önce imajını almanız gerekiyor.
Normal yedekleme araçları read error’larda takılı kalır. Partclone’un --rescue modunda ise okuma hatalarında o bloğu geçer ve devam eder:
sudo partclone.ext4
--rescue
-c
-s /dev/sdb1
-o - | zstd -c > /mnt/external/rescued-disk.img.zst 2>&1 | tee /tmp/rescue-log.txt
Kurtarma işlemi bitince imajı başka bir diske geri yükleyebilir, fsck çalıştırabilirsiniz:
# Imaji gecici olarak geri yukle
zstd -d -c /mnt/external/rescued-disk.img.zst | sudo partclone.ext4 -r -o /dev/sdc1
# Dosya sistemi tutarlilik kontrolu
sudo fsck -y /dev/sdc1
# Mount et ve verileri incele
sudo mount /dev/sdc1 /mnt/recovered
ls -la /mnt/recovered
Partclone ile MBR ve GPT Partition Tablosu Yedekleme
Partclone tek başına partition tablosunu yedeklemez. Tam bir sistem yedeklemesi için partition tablosunu da ayrıca kaydetmeniz gerekir.
GPT için sgdisk:
# Yedekle
sudo sgdisk --backup=/mnt/backup/gpt-backup.bin /dev/sda
# Geri yukle
sudo sgdisk --load-backup=/mnt/backup/gpt-backup.bin /dev/sda
MBR için dd (sadece 512 byte):
# MBR yedekle
sudo dd if=/dev/sda of=/mnt/backup/mbr.bin bs=512 count=1
# MBR geri yukle
sudo dd if=/mnt/backup/mbr.bin of=/dev/sda bs=512 count=1
Tüm bilgileri bir arada tutan sfdisk:
# Partition tablosunu okunabilir formatta kaydet
sudo sfdisk -d /dev/sda > /mnt/backup/partition-table.dump
# Geri yukle
sudo sfdisk /dev/sda < /mnt/backup/partition-table.dump
İmaj Doğrulama: Güvenilir Yedekler İçin Zorunlu Adım
Almış olduğunuz imajın gerçekten sağlam olduğunu doğrulamadan o yedek işe yaramaz. Partclone’un -C ve kontrol checksum mekanizması bu iş için vardır.
Hem alma hem doğrulama için şu akışı kullanabilirsiniz:
# Imaj al ve hash hesapla
sudo partclone.ext4 -c -s /dev/sda1 -o - |
tee >(sha256sum > /mnt/backup/sda1.img.sha256) |
zstd -c > /mnt/backup/sda1.img.zst
# Dogrulama
echo "$(cat /mnt/backup/sda1.img.sha256) /mnt/backup/sda1.img.zst" | sha256sum -c
Daha basit bir yöntem olarak sadece zstd’nin kendi bütünlük kontrolünü kullanabilirsiniz:
zstd -t /mnt/backup/sda1.img.zst && echo "Imaj saglam" || echo "HATA: Imaj bozuk!"
Partclone ayrıca imajı geri yüklemeden içeriği kontrol etmenizi sağlar:
# Imaji mount etmeden test et (partclone imaj bilgilerini goster)
sudo partclone.info -s /mnt/backup/sda1.img
Bu komut imajın dosya sistemi tipini, toplam/kullanılan blok sayısını ve imaj oluşturma tarihini gösterir.
Live Sistem Yedekleme: LVM Snapshot ile
Servisleri durdurmadan canlı sistem yedeklemek istiyorsanız, LVM snapshot mekanizmasıyla Partclone’u birlikte kullanabilirsiniz. Bu yöntem özellikle 7/24 çalışması gereken veritabanı sunucularında işe yarar.
# Once LVM snapshot al (10GB gecici alan ayir)
sudo lvcreate -L10G -s -n root-snap /dev/vg0/root
# Snapshot'i mount et
sudo mount -o ro /dev/vg0/root-snap /mnt/snapshot
# Partclone ile yedekle (mount edilmis bile olsa -d ile calisabilir)
sudo partclone.ext4 -c -s /dev/vg0/root-snap |
zstd -c > /mnt/backup/root-live-$(date +%Y%m%d).img.zst
# Snapshot'i kaldir
sudo umount /mnt/snapshot
sudo lvremove -f /dev/vg0/root-snap
Önemli not: LVM snapshot disk I/O’sunu etkiler, production yoğunluğunda dikkatli kullanın. Yedekleme süresi için yeterli snapshot alanı bırakın; snapshot dolarsa veri tutarsızlığı oluşabilir.
Otomatik Yedekleme Scripti: Tüm Diskin Komple Yedeklenmesi
Birden fazla bölümü otomatik olarak algılayıp yedekleyen gelişmiş bir script:
#!/bin/bash
# /usr/local/sbin/auto-partclone-backup.sh
DISK="${1:-/dev/sda}"
BACKUP_BASE="/mnt/backup/$(hostname)"
DATE_DIR="$BACKUP_BASE/$(date +%Y%m%d_%H%M%S)"
COMPRESS_CMD="zstd -T0 -c" # T0 = tum CPU cekirdeklerini kullan
if [ "$EUID" -ne 0 ]; then
echo "Bu script root olarak calistirilmalidir."
exit 1
fi
mkdir -p "$DATE_DIR"
# Partition tablosunu kaydet
sgdisk --backup="$DATE_DIR/partition-table.sgdisk" "$DISK" 2>/dev/null ||
dd if="$DISK" of="$DATE_DIR/mbr.bin" bs=512 count=1 2>/dev/null
# Her bolum icin cevrim
for PART in $(lsblk -ln -o NAME,TYPE "$DISK" | awk '$2=="part"{print $1}'); do
DEV="/dev/$PART"
FS=$(blkid -s TYPE -o value "$DEV" 2>/dev/null)
if [ -z "$FS" ]; then
echo "$DEV: Dosya sistemi tespit edilemedi, atlanıyor"
continue
fi
CLONE_CMD="partclone.$FS"
if ! command -v "$CLONE_CMD" &>/dev/null; then
echo "$DEV: $FS icin partclone bulunamadi, dd ile yedekleniyor"
dd if="$DEV" | $COMPRESS_CMD > "$DATE_DIR/${PART}.img.zst"
continue
fi
echo "Yedekleniyor: $DEV ($FS) -> $DATE_DIR/${PART}.img.zst"
$CLONE_CMD -c -s "$DEV" | $COMPRESS_CMD > "$DATE_DIR/${PART}.img.zst"
if [ $? -eq 0 ]; then
echo "$PART: BASARILI"
else
echo "$PART: HATA! Kontrol edin: $DATE_DIR/${PART}.img.zst"
fi
done
# Eski yedekleri temizle (30 gunden eski)
find "$BACKUP_BASE" -maxdepth 1 -type d -mtime +30 -exec rm -rf {} ;
echo "Tum yedekleme islemi tamamlandi: $DATE_DIR"
Partclone vs Clonezilla: Ne Zaman Hangisini Kullanmalı?
Clonezilla aslında Partclone’un üzerine inşa edilmiş bir arayüzdür. Farkları şöyle özetlenebilir:
- Partclone: Komut satırı aracı, scriptlere entegre edilebilir, otomasyona uygun, minimal ortamlarda çalışır, çıktıyı pipe edebilirsiniz
- Clonezilla: Grafik/metin arayüzü, bootable live CD, el ile kullanım için ideal, Partclone + diğer araçların birleşimi
Sunucu ortamlarında Partclone’u doğrudan kullanmak daha esnektir. Ev kullanıcıları veya tek seferlik kurtarma operasyonları için Clonezilla live CD daha pratiktir.
Sık Karşılaşılan Hatalar ve Çözümleri
“mount: special device does not exist” veya bölüm meşgul hatası:
Bölümü unmount etmeden yedeklemeye çalışıyorsunuzdur. Önce umount /dev/sdaX deneyin. Root bölümünü live sistemde yedeklemek zorundaysanız LVM snapshot kullanın.
“filesystem is mounted. Use force option if you want to clone.”:
Bu uyarıyı geçmek için -F parametresini ekleyebilirsiniz ama bu tutarsız imaj riski taşır. LVM snapshot tercih edin.
“No space left on device” yedekleme sırasında:
Hedef diskte yer kalmadı. Daha fazla alan açın veya daha agresif sıkıştırma kullanın (zstd -9 gibi).
Geri yükleme sonrası sistem boot olmuyor:
Partition tablosunu geri yüklemeyi unutmuş olabilirsiniz. Ayrıca GRUB’u yeniden kurmanız gerekebilir: live USB’den boot edip grub-install /dev/sda && update-grub çalıştırın.
Sonuç
Partclone, sysadmin araç kutusunun vazgeçilmez bir parçasıdır. dd‘nin sadeliğini korurken çok daha akıllı ve verimli çalışır. Zstd ile birleştirildiğinde, sıkıştırılmış ve hızlı disk imajları oluşturmak artık dakikalar meselesidir.
Pratikte şu yaklaşımı benimsemenizi öneririm: kritik sunucularda aylık tam Partclone imajı, haftalık rsync veya Borg ile artımlı dosya yedeklemesi. Bu ikili yaklaşım hem hız hem de güvenlik açısından en iyi dengeyi sağlar. Disk imajı almak, tek başına yeterli değildir; imajı geri yükleyip test etmediğiniz sürece o yedek sadece bir dosyadan ibarettir. Her yedek planının parçası olan geri yükleme tatbikatını unutmayın.
Bir felaket anında saatlerce el yordamıyla sistemi ayağa kaldırmak yerine, Partclone imajından birkaç komutla geri dönmek: işte gerçek bir felaket kurtarma planının özü budur.
