itsrda

Raspberry Pi SD Kart Ömrünü Uzatmak: Yazma Trafiğini Azaltmanın Yolları

SD kartlar sınırlı sayıda yazma döngüsüne dayanır. 7/24 çalışan bir Raspberry Pi'de kartın bozulmasını geciktirmek için günlük kayıtları, swap'ı ve veritabanı yazımını nasıl yöneteceğinizi anlatıyoruz.

Raspberry Pi'nin en sık anlatılan sorunu, haftalarca sorunsuz çalıştıktan sonra bir sabah açılmayan cihazdır. Çoğu zaman suçlu SD karttır. Flash bellek hücreleri sınırlı sayıda silme/yazma döngüsüne dayanır; sürekli küçük yazmalar yapan bir sistem kartı beklenenden çok daha hızlı yıpratır. Elektrik kesintisinde yarım kalan yazma da dosya sistemini bozabilir.

Bu yazıda kartın ömrünü uzatmak için işe yarayan, test edilebilir adımları sıralıyoruz. Hiçbiri garanti vermez; amaç riski azaltmak ve her durumda yedek bulundurmaktır.

Önce ölçün: kim yazıyor?

Önlem almadan önce yazmaların nereden geldiğini görün. iotop paketi bunu gösterir:

sudo apt install iotop
sudo iotop -oPa

-a kümülatif toplamı, -o yalnızca yazan süreçleri gösterir. Bir kaç saat sonra liste genellikle şu isimleri öne çıkarır: günlük kaydı (journald, rsyslog), veritabanı ve uygulamanın kendi log dosyaları.

1. Günlükleri RAM'e almak

Raspberry Pi OS'ta systemd-journald varsayılan olarak kalıcı ya da otomatik modda çalışabilir. Günlükleri yalnızca bellekte tutmak yazmaları büyük ölçüde azaltır. /etc/systemd/journald.conf içinde:

[Journal]
Storage=volatile
RuntimeMaxUse=50M
sudo systemctl restart systemd-journald

Bunun bedeli: yeniden başlatmadan sonra önceki açılışın günlükleri gider. Çökme sonrası "ne olmuştu" sorusunu cevaplamak zorlaşır. Bu nedenle kritik cihazlarda günlükleri ağdaki bir sunucuya göndermek (uzak syslog) daha dengeli bir çözümdür.

Alternatif olarak log2ram gibi araçlar /var/log dizinini RAM diskine bağlar ve belirli aralıklarla kalıcı depoya yazar. Kurmadan önce projenin güncel belgesini okuyun.

2. Swap'i azaltmak

Raspberry Pi OS varsayılan olarak dosya tabanlı swap kullanır. Bellek yeterliyse swap'e yazmak gereksiz yıpranmadır. Mevcut durum:

free -h
swapon --show

Bellek kullanımınız sürekli düşükse swap'i kapatabilirsiniz. Ancak 1 GB'lık bir Pi 3'te bellek aşıldığında süreçlerin öldürülmesi (OOM) riskini göz önünde bulundurun. Orta yol: vm.swappiness değerini düşürmek.

echo "vm.swappiness=10" | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system

3. Dosya sistemi bağlama seçenekleri

/etc/fstab içindeki kök bölümüne noatime eklemek, her dosya okunduğunda erişim zamanının diske yazılmasını engeller:

PARTUUID=xxxx-02  /  ext4  defaults,noatime  0  1

Küçük görünür ama okuma ağırlıklı sistemlerde fark yaratır. /tmp için tmpfs kullanmak da geçici dosyaların kartı yormasını önler:

tmpfs  /tmp  tmpfs  defaults,noatime,nosuid,size=64m  0  0

4. Veritabanı yazımını ayarlamak

MariaDB her işlemde günlüğü diske zorlar (fsync). Yoğun olmayan bir iç uygulamada bile bu sürekli yazmaya dönüşür. İki yaklaşım vardır:

  • Veritabanını harici SSD veya USB diske taşımak. En etkili çözümdür. Pi 3, USB'den doğrudan açılış desteğine sahiptir; Pi 4 ve sonrasında daha da kolaydır.
  • innodb_flush_log_at_trx_commit=2 ayarı. Her işlem yerine saniyede bir yazar. Yazmayı azaltır ama elektrik kesilirse son bir saniyenin işlemleri kaybolabilir. Personel giriş-çıkışı gibi kayıtlarda bu riski bilerek kabul edin.

Ayrıca uygulamanın gereksiz yazdığı alanları (ör. her isteği veritabanına loglamak) gözden geçirin.

5. Elektrik kesintisine karşı

Dosya sistemi bozulmalarının en yaygın sebebi ani elektrik kesintisidir. Kaliteli bir adaptör (en az 2,5 A) kullanın, mümkünse küçük bir UPS veya "UPS HAT" ekleyin. Sunucu odasında çalışıyorsa cihazı gelişigüzel fişten çekmek yerine sudo shutdown -h now ile kapatma alışkanlığı edinin.

6. Kaliteli kart ve alan bırakmak

  • Markalı, "endurance" ya da "high endurance" olarak satılan kartlar sürekli yazma için tasarlanmıştır; sıradan kameralar için üretilmiş kartlar bunu çok daha kötü kaldırır.
  • Kartı tamamen doldurmayın. Boş alan, kartın aşınma dengelemesi (wear leveling) için yer bırakır. Kapasitenin en fazla %70-80'ini kullanmak iyi bir hedeftir.

7. Asıl çözüm: bozulacağını varsaymak

Hiçbir ayar kartın bir gün bozulmayacağını garanti etmez. Bu yüzden:

  1. Düzenli veritabanı yedeği alın ve başka bir cihaza kopyalayın (yazımız).
  2. Çalışan kartın tam kopyasını (imajını) bir kez alın: başka bir bilgisayarda dd veya Raspberry Pi Imager ile. Yedek kartı hazır tutarsanız arıza dakikalar içinde çözülür.
  3. Kartın sağlığını izleyin: dmesg | grep -i mmc komutunda tekrar eden I/O hataları görüyorsanız kartı hemen değiştirin.

Kısaca: önce ölçün, günlükleri ve geçici dosyaları RAM'e alın, veritabanını mümkünse SSD'ye taşıyın, kaliteli güç kaynağı kullanın ve her koşulda yedek bulundurun.

Kartın sağlığını ölçmek

Tahmin yerine ölçün. Birkaç yöntem:

  • Yazma miktarı: iostat -d mmcblk0 60 2 (sysstat paketi) ya da /proc/diskstats ile bir saatte kaç sektör yazıldığına bakın. İdle sistemde bile günlük yazıları nedeniyle dakikada onlarca kilobayt görmek olağandır; yüksek ise suçluyu iotop -o ile bulun.
  • Dosya sistemi hataları: dmesg | grep -i -E "mmc|ext4|i/o error" komutu kart ya da dosya sistemi sorunlarını gösterir. "I/O error" ya da dosya sisteminin salt okunur olarak yeniden bağlanması kartın ölmek üzere olduğunun ciddi işaretidir.
  • Okuma testi: Kartı başka bir makineye takıp badblocks ya da üreticinin test aracıyla (örneğin F3) gerçek kapasitesini sınayabilirsiniz; sahte kartlar etiketin çok altında kapasite taşır.
  • Davranışsal belirtiler: Rastgele donmalar, yavaşlayan açılış, kendiliğinden bozulan dosyalar, fsck sonrası kaybolan veriler.

Uyarı: Kartın belirli bir hata vermemesi sağlam olduğunu göstermez. SD kartlar çoğu zaman uyarı vermeden bozulur; bu yüzden asıl koruma yedektir (3-2-1 yedekleme).

Hangi kartı almalı?

Hızlı ya da büyük kart, uzun ömürlü kart demek değildir. 7/24 yazma yapılan işler için üreticilerin "dayanıklılık" (endurance) serisi kartları, tüketici kartlarına göre sürekli kayıt için tasarlanmıştır. Kapasiteyi gereğinden büyük almak da faydalıdır: aşınma dengeleme (wear leveling) boş alana yayıldığından, kartın yarısını boş tutmak ömrü uzatır. Güvenilir mağazadan alın; çok ucuz "büyük kapasiteli" kartların büyük kısmı sahtedir. Daha kalıcı bir çözüm olarak, işletim sistemini küçük bir karttan açıp veriyi USB SSD'ye taşımayı düşünün; SSD'ler çok daha fazla yazma dayanıklılığına sahiptir ve Pi 3'te bile kullanılabilir. Güç tüketimi ve ısınma konusunda güç ve ısınma rehberine bakın.

Elektrik kesintisi ve bozulma ilişkisi

SD kart bozulmalarının büyük kısmı aşınmadan değil, yazma sırasında güç kesilmesinden olur. Ani kesinti dosya sistemini tutarsız bırakır, veritabanı günlüğü yarım kalır. Bu yüzden iyi bir adaptör, kaliteli kablo ve mümkünse küçük bir UPS (ya da en azından düzgün kapanma sağlayan bir batarya) şarttır. Elektrik kesilince cihazın ne kadar dayanacağını UPS süre hesaplayıcı ile hesaplayabilirsiniz. Düşük gerilim uyarısı (ekranda ya da vcgencmd get_throttled çıktısında) veren bir sistemde kart bozulmasını beklemek akıllıca değildir.

Gerçek bir senaryo

Bir otel panelinde Pi 3'ü kuran ekip, ilk ayda dakikada birçok küçük yazma yaptığını fark etti: sistem günlükleri, veritabanı işlem günlüğü ve uygulama günlüğü. Günlükleri RAM'e almak ve veritabanının günlük yazma ayarını gözden geçirmek yazma miktarını belirgin biçimde azalttı. Ama karar "azalttık, artık sorun yok" değil, "yine bozulabilir, o yüzden her gece yedek alıp ayda bir geri yükleme deneyeceğiz" oldu. Bu denemenin sonuçlarını yedek tatbikatı notunda anlattık.

Sık sorulan sorular

Salt okunur kök dosya sistemi iyi fikir mi? Ömrü en çok uzatan yöntemdir ama bakım zorlaşır; her güncellemede yazılabilir yapmanız gerekir. Yedeğiniz sağlamsa denemeye değer.

Swap tamamen kapatılmalı mı? Bellek yeterliyse azaltmak ya da zram kullanmak iyi bir orta yoldur; bellek yetmezse kapatmak sistemin çökmesine yol açar.

Kartı ne sıklıkla değiştirmeliyim? Sabit bir süre yoktur; 7/24 çalışan bir sistemde 2–3 yılda bir önleyici değişim ve yedekten geri dönüş denemesi makuldür.

Belirtileri görünce ne yapmalıyım? Hemen yedek alın, ardından yeni kartla kurulumu yedekten geri yükleyin.

Not: Komutları üretim ortamında çalıştırmadan önce yedek alın ve önce test ortamında deneyin. Bir adım sizde farklı davranıyorsa bize yazın, rehberi güncelleyelim.