TBW Değerini Hesaplayabilen Bash Shell Betiği

Programlama ve Script dilleri konusunda bilgi paylaşım alanıdır.
Cevapla
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15152
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2507 kez
Teşekkür edildi: 5303 kez

TBW Değerini Hesaplayabilen Bash Shell Betiği

Mesaj gönderen TRWE_2012 »

Merhaba forum üye ve ziyaretçileri

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.
Kullanım:
  • 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 İÇERİĞİ :

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
EKRAN GÖRÜNTÜSÜ (Sistem : GNU/Linux Mint 21.1 x64 LXDE)

Resim

--------------------------------------------------------------------

ÖZEL KULLANICI NOTLARI :

Terminal'den SATA Disk ve NWme Diskleri Görüntüleme komutları

SATA DİSK İÇİN (mekanik disk) :

Kod: Tümünü seç

sudo smartctl -A /dev/sda
NWME KATI HAL DİSK İÇİN (ssd) :

Kod: Tümünü seç

sudo smartctl -x /dev/nvme0n1
Özelleştirilmiş Komutlar :

Toplam Yazma TB Değerini Bulmak İçin :

Kod: Tümünü seç

sudo smartctl -x /dev/nvme0n1 | grep "Data Units Written"
NVMe SSD'nin Power On Hours (çalışma süresi)

Kod: Tümünü seç

sudo smartctl -x /dev/nvme0n1 | grep "Power On Hours"
Eğer sadece saat bilgisini almak istiyorsak:

Kod: Tümünü seç

sudo smartctl -x /dev/nvme0n1 | grep "Power On Hours" | awk '{print $4}'
NOT:

Yaptığım hesaplamalar da sezgisel olarak her birim TB değerine = 0,58 ( yüzde sıfır tam onda elli sekiz'lik sağlık kaybı denk geliyor) değeri gelmekte...

ÖRNEK HESAPLAMA :

SSD İçin Tahmini Sağlık Değerini Hesaplama

18,78 x 0,58 = 10,89

100 - 10,89 = %89,11

Gerçekten bendeki SSD diskin Windows OS tarafında portable çalışan CristalDiskİnfo yazılımının gösterdiği değer'de %89....


Ekran görüntüsü (Sistem : Windows 11 Yapı 22H2 x64 Home TR)

Resim

Son durum GNOME Diskler İle Performans Ölçümü :

100 örnek (bunun Windows dengi : 100 MB Veri Parçası) üzerinden

Resim
Kullanıcı avatarı
burak35
Zettabyte3
Zettabyte3
Mesajlar: 17556
Kayıt: 07 Eki 2016, 13:06
cinsiyet: Erkek
Teşekkür etti: 10117 kez
Teşekkür edildi: 11777 kez

Re: TBW Değerini Hesaplayabilen Bash Shell Betiği

Mesaj gönderen burak35 »

Hey Maşallah be.
Cevapla

“Programlama ve Script dilleri” sayfasına dön