Diskler sessizce ölür. Uyarı vermeden, log bırakmadan, bazen tek bir saniye bile zaman tanımadan. Yıllar önce bir üretim sunucusunda yaşadığım disk arızası, bana bu gerçeği acı bir şekilde öğretti. O günden bu yana her sunucuya smartmontools kurmak ilk yapacağım işler arasına girdi. Bu yazıda, smartctl aracını gerçek dünya senaryolarıyla birlikte nasıl kullanacağınızı, hangi değerlere bakmanız gerektiğini ve otomatik izleme sistemini nasıl kuracağınızı anlatacağım.
smartctl Nedir ve Neden Önemlidir?
S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology), disk sürücülerinin kendi iç sağlık verilerini izleyip raporladığı bir standarttır. Hemen hemen tüm modern HDD ve SSD’lerde bu teknoloji bulunur. smartctl ise bu verileri okumamıza ve yorumlamamıza yarayan komut satırı aracıdır.
smartmontools paketi içinde gelir ve neredeyse tüm Linux dağıtımlarında depolardan kurabilirsiniz:
# Debian/Ubuntu
sudo apt-get install smartmontools
# RHEL/CentOS/AlmaLinux
sudo dnf install smartmontools
# Arch Linux
sudo pacman -S smartmontools
Kurulumdan sonra hangi disklerinizin SMART desteklediğini görmek için önce sisteminizde hangi blok cihazların mevcut olduğuna bakın:
lsblk -d -o NAME,SIZE,TYPE,ROTA,TRAN
ROTA sütunu 1 ise HDD, 0 ise SSD’dir. TRAN ise bağlantı tipini gösterir (sata, nvme, usb gibi).
Temel Kullanım: Disk Bilgilerini Okumak
Bir diskin genel bilgilerini almak için -i (info) parametresini kullanın:
sudo smartctl -i /dev/sda
Bu komut size diskin model adını, seri numarasını, firmware versiyonunu, kapasitesini ve SMART desteğinin aktif olup olmadığını gösterir. Çıktıda şu satırlara dikkat edin:
- SMART support is: Available – Disk SMART destekliyor
- SMART support is: Enabled – SMART aktif ve veri topluyor
- SMART support is: Disabled – SMART destekliyor ama kapalı
Eğer SMART devre dışıysa etkinleştirmek için:
sudo smartctl -s on /dev/sda
Genel sağlık durumunu tek satırda görmek istiyorsanız -H parametresi işinize yarar:
sudo smartctl -H /dev/sda
Çıktıda PASSED görüyorsanız disk genel sağlık testinden geçiyor demektir. FAILED görüyorsanız o diski bir an önce değiştirin ve verilerinizi yedekleyin.
SMART Attribute’larını Okumak ve Yorumlamak
Asıl faydalı bilgiler -A parametresiyle gelen attribute tablosunda saklanır:
sudo smartctl -A /dev/sda
Bu çıktı ilk bakışta korkutucu gelebilir ama birkaç temel attribute’u tanıdıktan sonra işler netleşir. Her satırda şu bilgiler yer alır: ID numarası, attribute adı, VALUE (güncel normalize edilmiş değer), WORST (en kötü gözlemlenen değer), THRESH (eşik değer) ve RAW_VALUE (ham veri).
VALUE, THRESH değerinin altına düşerse disk ciddi risk altında demektir.
Dikkat etmeniz gereken kritik attribute’lar:
- Reallocated Sector Count (ID: 5): Yeniden tahsis edilen sektör sayısı. Bu sayı sıfırdan büyükse disk yüzeyinde sorun var demektir. Birkaç reallocated sektör kabul edilebilir ama zamanla artıyorsa disk değiştirilmelidir.
- Spin Retry Count (ID: 10): HDD’lerin ilk çevirmede dönememeleri. Sıfırdan büyük değerler mekanik sorunlara işaret eder.
- Reallocated Event Count (ID: 196): Reallocate işleminin kaç kez gerçekleştiği.
- Current Pending Sector Count (ID: 197): Okuma hatası olan ve henüz reallocate edilmemiş sektörler. Bu değer sıfırdan büyükse diskte aktif sorun var.
- Uncorrectable Sector Count (ID: 198): Düzeltilemez hata sektörü sayısı. Bu değer her zaman sıfır olmalıdır.
- Power On Hours (ID: 9): Diskin toplam çalışma süresi. HDD’ler genellikle 30.000-50.000 saat ömür biçilir.
- Temperature Celsius (ID: 194): Disk sıcaklığı. HDD’ler için 40-45°C üzeri, SSD’ler için 60°C üzeri tehlike bölgesidir.
- Wear Leveling Count (SSD, ID: 177): SSD’lerde yazma döngüsü tüketimi. Düşüldükçe SSD ömrü azalır.
- Total LBAs Written (SSD, ID: 241): SSD’ye toplam yazılan veri miktarı.
Tam Rapor Almak
Tüm bilgileri tek seferde görmek istiyorsanız -a parametresini kullanın:
sudo smartctl -a /dev/sda
Bu komut; disk bilgilerini, tüm attribute’ları, hata loglarını ve test geçmişini tek bir çıktıda birleştirir. Bir sorun şüphelendiğinizde veya disklerle ilgili destek talep ettiğinizde bu çıktının tamamını paylaşmak standarttır.
NVMe diskler için sözdizimi biraz farklıdır:
sudo smartctl -a /dev/nvme0
NVMe’de attribute yerine farklı metrikler kullanılır ama smartctl bunları da güzelce parse eder.
SMART Testleri Çalıştırmak
SMART iki tip test sunar: kısa (short) ve uzun (long). Kısa test birkaç dakika sürerken uzun test saatler alabilir ama çok daha kapsamlıdır.
Kısa test başlatmak için:
sudo smartctl -t short /dev/sda
Uzun test başlatmak için:
sudo smartctl -t long /dev/sda
Test arka planda çalışır, sistemi bloke etmez. Test sürerken durumu kontrol etmek için:
sudo smartctl -a /dev/sda | grep -i "self-test"
Test tamamlandıktan sonra sonuçları görmek için:
sudo smartctl -l selftest /dev/sda
Çıktıda son testlerin geçmiş kaydı listelenir. Completed without error başarılı test anlamına gelir. Bir hata kodu görüyorsanız kodu araştırın, çünkü her hata farklı bir probleme işaret eder.
Bir de conveyance testi vardır, bu özellikle yeni alınan veya nakliyeden geçen diskler için kullanışlıdır:
sudo smartctl -t conveyance /dev/sda
Hata Loglarını İncelemek
SMART, disk üzerinde küçük bir log tutarak son 5 hata kaydını saklar. Bu loglara erişmek için:
sudo smartctl -l error /dev/sda
Eğer log temizse No Errors Logged çıktısı görürsünüz. Hata varsa hangi LBA adresinde, ne zaman ve ne tür bir hata oluştuğunu görebilirsiniz. Bu bilgileri dosya sistemi araçlarıyla (badblocks, e2fsck) birleştirerek hangi dosyaların etkilendiğini de tespit edebilirsiniz.
Gerçek Dünya Senaryosu: Ölmek Üzere Olan Bir Diski Yakalamak
Diyelim ki bir uygulama sunucusunda yavaş yavaş artan disk I/O gecikmeleri fark ettiniz. İlk yapacağınız işlerden biri SMART durumunu kontrol etmek olmalıdır:
sudo smartctl -a /dev/sdb
Attribute bölümünde şöyle bir satır görüyorsunuz:
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 47
RAW_VALUE’da 47 görüyorsunuz. Bu, 47 sektörün okunmaya çalışıldığında hata verdiği ve henüz yeniden tahsis edilmeyi beklediği anlamına gelir. Bu disk beklenmedik bir anda çökebilir.
Hızlıca bu diskte long test başlatın ve sonuçları bekleyin:
sudo smartctl -t long /dev/sdb
# Birkaç saat sonra:
sudo smartctl -l selftest /dev/sdb
Test büyük ihtimalle hatalarla tamamlanacak ve kötü sektör numaralarını size verecektir. Artık yapmanız gereken şey veriyi acilen başka bir diske taşımak ve bu diski değiştirmektir.
Tüm Diskleri Toplu Kontrol Etmek
Birden fazla disk olan bir sunucuda tek tek kontrol etmek yorucu olabilir. Aşağıdaki script tüm diskler için hızlı durum kontrolü yapar:
#!/bin/bash
echo "=== Disk SMART Hızlı Kontrol Raporu ==="
echo "Tarih: $(date)"
echo ""
for disk in $(lsblk -d -n -o NAME | grep -E '^(sd|nvme|hd)'); do
device="/dev/$disk"
echo "--- $device ---"
result=$(sudo smartctl -H "$device" 2>&1)
if echo "$result" | grep -q "PASSED"; then
echo "Durum: TAMAM"
elif echo "$result" | grep -q "FAILED"; then
echo "Durum: KRİTİK HATA - ACİL MÜDAHALE GEREKLİ"
else
echo "Durum: Bilinmiyor veya SMART desteklenmiyor"
fi
# Kritik attribute'ları kontrol et
pending=$(sudo smartctl -A "$device" 2>/dev/null | grep "Current_Pending_Sector" | awk '{print $NF}')
reallocated=$(sudo smartctl -A "$device" 2>/dev/null | grep "Reallocated_Sector_Ct" | awk '{print $NF}')
uncorrectable=$(sudo smartctl -A "$device" 2>/dev/null | grep "Offline_Uncorrectable" | awk '{print $NF}')
[ ! -z "$pending" ] && echo "Bekleyen Sektör: $pending"
[ ! -z "$reallocated" ] && echo "Reallocated Sektör: $reallocated"
[ ! -z "$uncorrectable" ] && echo "Düzeltilemez Hata: $uncorrectable"
echo ""
done
Bu scripti /usr/local/bin/disk-health-check.sh olarak kaydedin ve çalıştırılabilir yapın:
sudo chmod +x /usr/local/bin/disk-health-check.sh
sudo /usr/local/bin/disk-health-check.sh
smartd ile Otomatik İzleme
smartmontools paketi içinde gelen smartd daemon’ı, diskleri arka planda sürekli izler ve sorun tespit ettiğinde e-posta gönderir. Bu yapıyı kurmak production ortamlar için neredeyse zorunludur.
smartd konfigürasyon dosyası genellikle /etc/smartd.conf adresinde bulunur. Basit bir konfigürasyon örneği:
# /etc/smartd.conf
# Tüm diskleri izle, hata durumunda mail gönder
DEVICESCAN -a -o on -S on -n standby,q -s (S/../.././02|L/../../6/03) -W 4,45,50 -m root@localhost -M exec /usr/local/bin/smart-alert.sh
Bu satırı açıklayalım:
- -a: Tüm SMART özelliklerini izle
- -o on: Offline veri toplama etkin
- -S on: Attribute kaydetmeyi etkin
- -n standby,q: Bekleme modundaki diskleri uyandırma
- -s (S/../.././02|L/../../6/03): Her gün saat 02:00’de short test, her Cumartesi saat 03:00’de long test çalıştır
- -W 4,45,50: Sıcaklık izleme; 4 derece değişim uyarısı, 45°C uyarı, 50°C kritik
- -m root@localhost: Uyarıları bu adrese gönder
- -M exec: Uyarı geldiğinde custom script çalıştır
smartd‘yi başlatmak ve sistem başlangıcında aktif etmek için:
sudo systemctl enable smartd
sudo systemctl start smartd
sudo systemctl status smartd
Özel Uyarı Scripti Yazmak
-M exec parametresiyle çağrılan alert scripti gerçek işleri yapan yerdir. Slack, Telegram veya e-posta entegrasyonu buraya eklenir:
#!/bin/bash
# /usr/local/bin/smart-alert.sh
DISK="$SMARTD_DEVICE"
MESSAGE="$SMARTD_MESSAGE"
HOSTNAME=$(hostname)
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
# Log'a yaz
echo "[$TIMESTAMP] DISK UYARI: $DISK - $MESSAGE" >> /var/log/smart-alerts.log
# Slack webhook (opsiyonel)
SLACK_WEBHOOK="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
if [ ! -z "$SLACK_WEBHOOK" ]; then
curl -s -X POST "$SLACK_WEBHOOK"
-H 'Content-type: application/json'
-d "{
"text": ":warning: *DISK UYARISI* - $HOSTNAME",
"attachments": [{
"color": "danger",
"fields": [
{"title": "Disk", "value": "$DISK", "short": true},
{"title": "Zaman", "value": "$TIMESTAMP", "short": true},
{"title": "Mesaj", "value": "$MESSAGE", "short": false}
]
}]
}"
fi
# E-posta gönder
echo "Disk Uyarısı: $DISK üzerinde sorun tespit edildi.
Sunucu: $HOSTNAME
Disk: $DISK
Zaman: $TIMESTAMP
Detay: $MESSAGE
Acilen kontrol ediniz." | mail -s "[KRİTİK] Disk Uyarısı: $HOSTNAME - $DISK" [email protected]
Script’i kaydedin ve yetkilerini ayarlayın:
sudo chmod +x /usr/local/bin/smart-alert.sh
RAID ve Donanım RAID Durumları
Bir uyarı: Donanımsal RAID kartı kullanıyorsanız (Adaptec, LSI/Broadcom gibi) smartctl disklere doğrudan erişemeyebilir. Bu durumda -d parametresiyle RAID tipini belirtmeniz gerekir:
# MegaRAID için
sudo smartctl -a -d megaraid,0 /dev/sda
# Adaptec için
sudo smartctl -a -d aacraid,0,0,0 /dev/sda
Hangi parametrenin gerektiğini anlamak için önce şunu deneyin:
sudo smartctl --scan
Bu komut sisteminizdeki SMART destekli cihazları ve kullanılması gereken sürücü parametrelerini otomatik algılar.
Cron ile Periyodik Rapor
smartd dışında manuel bir cron tabanlı rapor sistemi de kurabilirsiniz. Bu, smartd‘ye ek olarak haftalık özet raporlar için idealdir:
# /etc/cron.d/smart-weekly-report
0 6 * * 1 root /usr/local/bin/disk-health-check.sh | mail -s "Haftalık Disk Sağlık Raporu - $(hostname)" [email protected]
Bu ayar her Pazartesi sabah 06:00’da disk sağlık raporunu e-posta olarak gönderir.
SSD’lere Özel Dikkat Edilecekler
SSD’lerin SMART attribute’ları HDD’lerden farklıdır. Üreticiye göre değişmekle birlikte genel olarak şunlara bakın:
- Wear Leveling Count veya Media Wearout Indicator: 100’den başlar ve azalır. 10’un altına düştüğünde SSD’yi değiştirme zamanı gelmiştir.
- Total LBAs Written: Üreticinin belirttiği TBW (Total Bytes Written) değeriyle karşılaştırın. Samsung 860 EVO 500GB için bu 300TBW’dir.
- Reallocated NAND Blocks: Flash bellekte kötü blok sayısı. Sıfırdan büyük değerlerde dikkatli olun.
- Program Fail Count / Erase Fail Count: Yazma veya silme hataları. Sıfır olmalıdır.
Bir SSD’nin gerçekçi kalan ömrünü anlamak için:
sudo smartctl -A /dev/sda | grep -E "(Wear|Wearout|TBW|LBA|Written|Erased)"
Sonuç
Disk izleme işi reaktif değil, proaktif yapılması gereken bir görevdir. smartctl ve smartd ikilisi, bu proaktif yaklaşımın temelini oluşturur. Yapılacaklar listesini özetlemek gerekirse: her sunucuya smartmontools kurun, smartd‘yi aktif edin ve uyarı mekanizmasını yapılandırın, kalan disklerde periyodik long testler çalıştırın ve kritik attribute’ları (özellikle ID 5, 197, 198) düzenli takip edin.
Reallocated sektör sayısının sıfırdan büyük olduğu bir disk, sizi bir gün mutlaka hayal kırıklığına uğratacaktır. Bunu erken fark etmek, planlı bir disk değişimi ile saatler süren acil veri kurtarma operasyonu arasındaki farktır. Bir sonraki disk ölümünde hazırlıksız yakalanmamak için bu araçları şimdi kurun.