Aşağıda, NVMe ve SATA disklerin TBW (Terabytes Written) değerlerini hesaplamak için yazılmış bir bash scriptini paylaşıyorum. Bu script, kullanıcıdan disk türünü seçmesini istiyor ve ardından ilgili disk için SMART verilerini okuyarak TBW değerini hesaplıyor.
Betiğin Özellikleri:
Disk Türü Seçimi: Kullanıcı, NVMe veya SATA disklerden birini seçebilir ya da her ikisini ayrı ayrı hesaplayabilir.
SMART Verisi Okuma: NVMe diskler için smartctl, SATA diskler için ise /proc/diskstats kullanılarak veriler okunuyor.
Hesaplama: Okunan veriler kullanılarak TBW değeri terabayt (TB) ve gigabayt (GB) cinsinden hesaplanıyor.
Gereksinimler:
Scriptin sağlıklı çalışabilmesi için sistemde aşağıdaki uygulamaların kurulu olması gerekiyor:
- smartmontools: NVMe disklerin SMART verilerini okumak için.
- bc: Hesaplamalar için gerekli bir hesap makinesi.
- /proc/diskstats : GNU/Linux işletim sisteminin bir parçası olarak gelir ve kullanıcı tarafından ayrı bir kurulum gerektirmez. Bu dosya, Linux çekirdeği tarafından otomatik olarak oluşturulur ve sistemdeki disklerin istatistiklerini gerçek zamanlı olarak sağlar.
- Scripti çalıştırın. (chmod +x tbw_hesapla.sh) >>> ( sudo ./tbw_hesapla.sh)
- Disk türünü seçin (1: NVMe, 2: SATA, 3: İkisini hesapla).
- İlgili disk adını girin.
- Hesaplanan TBW değerini görüntüleyin.
Kod: Tümünü seç
#!/bin/bash
# Terminali temizle
clear
# Mevcut tarih ve saat
tarih_saat=$(date "+%d/%m/%Y - %H:%M:%S")
# Kullanıcıdan seçim yapmasını iste
echo "-------------------------------"
echo "Disk türünü seçin:"
echo "-------------------------------"
echo "1 - NVMe (örn: nvme0n1)"
echo "2 - SATA (örn: sda)"
echo "3 - İkisini ayrı ayrı hesapla, sonucu toplu göster"
echo "-------------------------------"
read -p "Seçiminizi yapın (1, 2 veya 3): " disk_secim
echo "-------------------------------"
echo "ℹ️ SONUÇLAR ($tarih_saat)"
echo "-------------------------------"
# NVMe TBW hesaplama fonksiyonu
hesapla_nvme() {
local disk=$1
echo "ℹ️ SMART verileri okunuyor..."
echo "-------------------------------"
local data_units_written=$(sudo smartctl -x /dev/$disk | grep "Data Units Written" | awk '{print $4}' | tr -d '.')
if [[ -z "$data_units_written" ]]; then
echo "❌ Hata: SMART verileri okunamadı!"
return
fi
local tbw=$(echo "scale=2; ($data_units_written * 512 * 1000) / (1024^4)" | bc)
local toplam_gb=$(echo "scale=2; ($data_units_written * 512 * 1000) / (1024^3)" | bc)
echo "✅ NVMe SSD için gerçek TBW: $tbw TB ($toplam_gb GB)"
echo "-------------------------------"
}
# SATA TBW hesaplama fonksiyonu
hesapla_sata() {
local disk=$1
echo "ℹ️ SMART verileri okunuyor..."
echo "-------------------------------"
local sector_size=$(sudo blockdev --getbsz /dev/$disk)
if [[ -z "$sector_size" ]]; then
echo "❌ Hata: Sektör boyutu alınamadı! Varsayılan olarak 512 bayt kullanılacak."
sector_size=512
fi
local total_lbas_written=$(sudo cat /proc/diskstats | grep "$disk " | awk '{print $10}')
if [[ -z "$total_lbas_written" ]]; then
echo "❌ Hata: SMART verileri okunamadı!"
return
fi
local tbw=$(echo "scale=2; ($total_lbas_written * $sector_size) / (1024^4)" | bc)
local toplam_gb=$(echo "scale=2; ($total_lbas_written * $sector_size) / (1024^3)" | bc)
echo "✅ SATA HDD/SSD için gerçek TBW: $tbw TB ($toplam_gb GB)"
echo "-------------------------------"
}
# Kullanıcının seçimine göre işlemi gerçekleştir
case "$disk_secim" in
1)
read -p "NVMe disk adını girin (örn: nvme0n1): " nvme_disk
hesapla_nvme "$nvme_disk"
;;
2)
read -p "SATA disk adını girin (örn: sda): " sata_disk
hesapla_sata "$sata_disk"
;;
3)
read -p "NVMe disk adını girin (örn: nvme0n1): " nvme_disk
read -p "SATA disk adını girin (örn: sda): " sata_disk
hesapla_nvme "$nvme_disk"
hesapla_sata "$sata_disk"
;;
*)
echo "❌ Hata: Geçersiz seçim!"
exit 1
;;
esac
