Tunas Akara
Kembali ke Blog

Kenapa Kartu SD Cepat Rusak di Perangkat Lapangan?

Kurangi penulisan pada kartu SD perangkat lapangan melalui sistem berkas hanya-baca, pencatatan terkendali, dan perhitungan umur penyimpanan.

oleh RayhanDiperbarui 8 menit baca

Untuk Tim Teknis

iotedgestoragelinuxreliability
Kenapa Kartu SD Cepat Rusak di Perangkat Lapangan?
Daftar isi

Pada kelompok perangkat penghubung Linux di berbagai lokasi, kegagalan kartu dapat mulai terlihat pada bulan kedua belas hingga kedelapan belas. Perangkat masih menyala, tetapi sistem berkas berubah menjadi hanya-baca. Mengganti kartu tanpa memperbaiki pola penulisan dapat membuat masalah yang sama kembali muncul enam bulan kemudian.

Kartunya tidak cacat dan lokasinya tidak luar biasa panas. Perangkatnya memang dirancang menulis terus-menerus ke media penyimpanan yang jatah tulisnya terbatas dan tidak bisa melaporkan sisa jatahnya. Ini masalah desain, dan biaya perbaikannya nyaris nol kalau diputuskan sejak awal.

Perataan keausan bergantung pada ruang yang tersedia

Sel memori NAND memiliki batas siklus hapus. Wear leveling, atau perataan keausan, menyebarkan penulisan agar blok tidak aus lebih cepat daripada yang lain. Ada dua pendekatan; periksa implementasi pengendali pada model kartu yang dipilih.

Perataan keausan dinamis memutar tulisan ke blok yang sedang kosong. Perataan keausan statis ikut memindahkan data dingin — kernel, berkas biner, berkas yang ditulis sekali saat penyiapan awal lalu tidak pernah disentuh lagi — supaya blok itu ikut giliran. Pendekatan yang dipakai bergantung pada model, bukan harga semata.

Jika pengendali hanya memakai perataan dinamis, kartu 8 GB dengan 6 GB data tetap dapat memusatkan penulisan baru pada ruang yang tersisa. Perataan statis juga memindahkan data lama. Perilaku pengendali menentukan apakah contoh ruang rotasi 2 GB ini berlaku.

Anggaran tulis yang tidak pernah dihitung

Hitung volume penulisan sebelum perangkat dipasang. Perkiraan dua menit ini membantu memilih media penyimpanan yang sesuai.

Ambil contoh gateway yang menulis baris log 200 byte lima kali per detik. Itu 1 KB per detik, 86 MB per hari, sekitar 31 GB per tahun menurut hitungan host. Jika dibagi ruang rotasi 2 GB, hasilnya hanya lima belas siklus penuh per tahun. Perkiraan awal ini tampak aman.

Hitungan host bukan hitungan NAND. Amplifikasi penulisan adalah rasio antara byte yang ditulis aplikasi dan byte yang benar-benar diprogram ke flash. Pada kartu murah dengan blok hapus 4 MB, selisih penulisan dapat besar.

Tulisan kecil yang sinkron dapat menambah pekerjaan metadata, jurnal sistem berkas, dan pengendali flash. Pengendali dapat memetakan ulang halaman tanpa menulis ulang seluruh blok hapus untuk setiap tambahan log. Ukur beban sebenarnya; jangan menganggap semua kartu memiliki pengali amplifikasi 10x sampai 100x.

Sebagai perhitungan hipotetis dengan amplifikasi 50x, gateway yang sama mendorong sekitar 1.500 GB per tahun lewat ruang rotasi 2 GB. Anggap saja 750 siklus hapus per tahun. Untuk contoh ini, asumsikan ketahanan 1.000 siklus di tingkat sel; angka sebenarnya harus diperiksa pada spesifikasi kartu. Dengan asumsi tersebut, batas ketahanan tercapai sekitar bulan kelima belas. Umur sebenarnya bergantung pada pengendali kartu dan beban penulisan.

Tiga angka menentukan hasilnya, dan ketiganya ada di tangan Anda:

  • Byte yang ditulis per hari. Turunkan dengan pengumpulan data sebelum penulisan dan dengan tidak memakai level log diagnosis di produksi.
  • Ukuran ruang bebas. Naikkan dengan membeli kartu lebih besar lalu mempartisi sebagian saja.
  • Ketahanan sel. Beli kartu industri yang punya angka TBW — Terabytes Written, total volume tulisan yang dijamin pabrik sebelum kartu aus — bukan kartu konsumen yang tidak punya angka apa pun.

Mati listrik merusak data yang Anda tulis berbulan-bulan lalu

Keausan terjadi bertahap. Terputusnya daya dapat menimbulkan kerusakan langsung, termasuk pada berkas yang sudah lama disimpan.

Flash translation layer menyimpan peta dari alamat blok logis ke halaman NAND fisik, dan peta itu sendiri tinggal di flash. Putus listrik saat pengendali sedang memprogram halaman sekaligus memperbarui peta, dan kartu tanpa perlindungan saat daya terputus bisa kehilangan satu blok hapus utuh. Termasuk data yang ditulis jauh sebelum perangkat terakhir dimulai.

Jurnal sistem berkas tidak dapat mencegah kegagalan ini. Media penyimpanan sudah melaporkan penulisan berhasil, tetapi data tetap hilang akibat terputusnya daya.

Karena itu journal ext4 bukan jawaban seperti yang banyak orang kira. Mode bawaan data=ordered menjamin konsistensi metadata sistem berkas setelah crash. Mode ini tidak menjamin apa pun soal media penyimpanan blok yang mengaku sukses lalu membatalkan tulisannya.

FAT32 masih jadi bawaan di banyak image vendor, dan FAT32 bahkan tidak punya journal. Mati listrik saat pembaruan tabel FAT bisa membuat separuh volume kehilangan induknya. Pola kegagalan inilah yang ada di balik sebagian besar pekerjaan recovery storage lapangan.

Perlindungan daya pada kartu industri berbeda antar-model. Periksa perilaku pemulihan pengendali dan perlindungan perangkat keras pada spesifikasi model yang dibeli. Label industri tidak membuktikan bahwa kartu memiliki kapasitor.

Desain: pindahkan tulisannya keluar dari kartu

Saat operasi normal, jadikan kartu hanya-baca dan arahkan penulisan ke memori atau jaringan. Sediakan penyimpanan lokal terbatas hanya untuk data yang memang memerlukannya.

Memuat diagram…

Sistem berkas utama hanya-baca dengan overlay. Pasang sistem berkas utama sebagai hanya-baca, lalu pasang overlay tmpfs di atasnya. Penulisan masuk ke RAM dan hilang saat perangkat dimulai ulang. Pola ini sesuai jika keadaan utama perangkat disimpan pada server.

Di Raspberry Pi OS pilihan ini sudah ada di raspi-config. Di image custom, bentuknya overlayroot atau hook initramfs kecil. Proses yang harus menulis ke /var tetap dapat berjalan karena penulisannya diarahkan ke RAM.

Log ke tmpfs, lalu keluar dari perangkat. Set Storage=volatile dan batas RuntimeMaxUse di journald.conf, lalu forward ke log server pusat. Tentukan batas ukuran tmpfs. Ruang yang terlalu kecil menghilangkan catatan untuk diagnosis. Ruang terlalu besar dapat membuat proses dengan banyak catatan menghabiskan memori dan memicu penghentian proses oleh sistem. Mulai dari 64 MB masuk akal untuk perangkat RAM 1 GB.

Batch telemetri, jangan append. Putaran sensor yang menulis satu baris dan menyinkronkan setiap pembacaan sangat membebani memori flash. Tampung di memori, tulis sekali per menit, dan terima risiko kehilangan enam puluh detik data saat crash.

Jika data tidak boleh hilang, gunakan penyimpanan lokal tahan gangguan dengan strategi penyimpanan yang sudah diuji sebelum pembacaan dinyatakan tersimpan. Menulis ulang seluruh berkas penyangga tidak dengan sendirinya menjamin ketahanan data atau mengurangi keausan. Pembaca meter berbasis kamera yang mengirim gambar tanpa riwayat lokal mengambil pilihan berbeda: menghindari penyimpanan lokal, tetapi bergantung pada keberhasilan pengiriman.

Opsi pemasangan partisi untuk partisi yang tetap bisa ditulis. noatime menghindari pembaruan waktu akses berkas saat pembacaan. commit=60 di ext4 mengumpulkan commit journal jadi satu menit sekali, bukan lima detik sekali. Anda menukar jendela kehilangan data yang lebih lebar dengan lebih sedikit penulisan jurnal berkala. Opsi ini tidak menunda pemanggilan fsync oleh aplikasi. Kedua opsi tersebut dapat diatur di /etc/fstab.

Overprovision dengan mempartisi pendek. Beli kartu 32 GB, buat partisi 8 GB, sisanya biarkan tidak terpakai. Blok yang tidak pernah ditulis tetap ada di ruang bebas pengendali dan melipatgandakan ruang rotasi.

Pada kartu yang mendukung perintah ini, tidak terpasang, dan tidak menyimpan data yang perlu dipertahankan, blkdiscard dapat memberi tahu pengendali bahwa blok tidak lagi diperlukan. Perintah ini menghilangkan data pada area yang dibuang. Periksa dukungan serta manfaatnya pada model kartu yang dipakai.

Kalau kartunya memang harus tetap dipakai

Tidak semua desain bisa pindah ke eMMC, dan eMMC yang disolder di board orang lain punya jebakannya sendiri. Saat kartu lepasan jadi keharusan, ada tiga hal di lembar spesifikasi yang layak dibaca.

Mode pSLC. Sebagian kartu industri menyimpan satu bit per sel dalam mode pseudo-SLC untuk menukar kapasitas dengan ketahanan. Bandingkan batas siklus sel dan TBW model yang dibeli dengan pilihan TLC. Label industri tidak otomatis berarti pSLC atau kenaikan ketahanan 20x.

Angka TBW atau siklus P/E yang benar-benar ada. Kartu konsumen memasang speed class dan rating IOPS A2. Keduanya menjelaskan kecepatan, bukan umur. Kalau lembar spesifikasinya tidak menyebut terabytes written atau siklus program/erase, vendornya belum berkomitmen ke angka apa pun. Anda juga tidak punya angka untuk dihitung.

Power-loss protection. Harus disebut eksplisit di lembar spesifikasi, biasanya sebagai kapasitor onboard atau FTL power-fail-safe.

Bandingkan selisih biaya komponen dengan biaya kunjungan teknisi di lapangan. Kartu industri harganya beberapa kali lipat kartu konsumen. Satu kali kunjungan teknisi ke lokasi untuk ganti kartu sudah lebih mahal dari selisih itu.

Pemeriksaan kesehatan supaya Anda tahu sebelum teknisi berangkat

Kartu SD standar tidak menyediakan informasi SMART seperti SSD. Sisa umur kartu SD standar memang tidak bisa ditanyakan seperti pada SSD. Tiga sinyal berikut sudah menutup sebagian besar kebutuhannya.

Kesehatan eMMC, kalau perangkat Anda memakai eMMC. Register EXT_CSD membawa PRE_EOL_INFO dan DEVICE_LIFE_TIME_EST_TYP_A/B, dan mmc-utils bisa membacanya:

mmc extcsd read /dev/mmcblk0 | grep -iE 'PRE_EOL|LIFE_TIME'

Nilai PRE_EOL_INFO 0x02 berarti blok cadangan sudah terpakai 80 persen. Nilai 0x03 berarti 90 persen. Estimasi umurnya datang dalam kelipatan 10 persen. Periksa mingguan dan pasang peringatan saat nilainya berubah. Ini sinyal kondisi yang terstandardisasi. Sebagian kartu SD industri juga menyediakan pemantauan umur khusus dari vendor.

Remount hanya-baca. Saat kernel kena galat I/O, sistem berkas dipasang ulang jadi hanya-baca. Perangkat dapat terus berjalan meski penyimpanannya bermasalah, sehingga kegagalan tidak segera terlihat.

Cek keluaran mount untuk flag ro di partisi data tiap beberapa menit, lalu peringatan langsung. Satu cek ini mengubah kegagalan senyap jadi kunjungan terjadwal. Tempatnya di penyiapan pemantauan minimal yang sama dengan probe uptime Anda.

File canary. Tulis pola 1 MB yang sudah diketahui isinya saat penyiapan awal, baca ulang tiap minggu, bandingkan nilai pemeriksaan integritasnya. Murah, menangkap korupsi senyap, dan memberi Anda bukti saat vendor bilang kartunya baik-baik saja.

Pesan kernel menjadi sinyal tambahan yang dapat dicari pada catatan sistem. mmc0: error -110, I/O error, dan EXT4-fs error di dmesg dapat menunjukkan masalah media, daya, sambungan, atau sistem berkas. Periksa penyebabnya; pesan ini bukan bukti pasti keausan kartu. Teruskan semuanya bersama log Anda, lalu cocokkan polanya di pusat.

Rancang penulisan dan deteksi kegagalan sejak awal

Anggap kartunya pasti aus, lalu desain sistemnya supaya keausan itu tidak penting. Sistem berkas utama hanya-baca, log di RAM dan dikirim keluar perangkat, telemetri ditulis secara berkelompok, partisi jauh lebih kecil dari kapasitas kartu, dan kartu industri dengan perlindungan saat daya terputus saat anggaran mengizinkan.

Tambahkan pemantauan untuk kegagalan yang masih mungkin terjadi. Laporan bahwa partisi berubah menjadi hanya-baca memungkinkan kunjungan pemeliharaan dijadwalkan. Jika kegagalan baru ditemukan berbulan-bulan kemudian, data yang tidak dapat dibaca dapat menjadi insiden kehilangan data.

Artikel Terkait

Perlu bantuan menerapkan solusi ini?

Pengembangan Sistem Pemantauan Perangkat IoT

Satukan data meter, sensor, dan perangkat lain dalam satu dasbor. Pantau pembacaan terbaru, riwayat data, dan gangguan sesuai kebutuhan operasional.

Lihat layanan terkait

Ceritakan kendala operasional Anda agar kita dapat membahas langkah yang sesuai.

Bagikan artikel
Diskusi Awal Gratis