Apakah ada cara untuk melindungi SSD dari kerusakan akibat kehilangan daya?

15

Kami memiliki sekelompok terminal konsumen yang menginstal Linux, server web lokal, dan PostgreSQL. Kami mendapatkan laporan lapangan tentang mesin yang bermasalah dan setelah diselidiki sepertinya ada pemadaman listrik dan sekarang ada yang salah dengan disk.

Saya berasumsi masalahnya hanya dengan database menjadi rusak, atau file dengan perubahan baru-baru ini diacak, tetapi ada laporan aneh lainnya.

  • file dengan izin yang salah
  • file yang telah menjadi direktori (misalnya, index.phpsekarang menjadi direktori)
  • direktori yang telah menjadi file
  • file dengan data acak

Ada masalah dengan database menjadi rusak, tapi itu sesuatu yang bisa saya harapkan. Yang lebih mengejutkan saya adalah masalah sistem file yang lebih mendasar - misalnya, izin atau mengubah file menjadi direktori. Masalahnya juga terjadi pada file yang tidak berubah baru-baru ini (misalnya, kode perangkat lunak dan konfigurasi).

Apakah ini "normal" untuk korupsi SSD? Awalnya kami pikir itu terjadi pada beberapa SSD murah, tetapi kami memiliki ini terjadi pada nama-merek (tingkat konsumen.)

FWIW, kami tidak melakukan autofsck pada boot yang tidak bersih (tidak tahu kenapa- saya baru). Kami memiliki UPS yang dipasang di beberapa lokasi, tetapi kadang-kadang itu tidak dilakukan dengan benar, dll. Ini harus diperbaiki, tetapi bahkan orang-orang dapat mematikan terminal secara tidak bersih, dll. - jadi itu bukan bukti yang bodoh. Sistem file adalah ext4.

Pertanyaannya: adakah yang bisa kita lakukan untuk mengurangi masalah di tingkat sistem?

Saya menemukan beberapa artikel yang merujuk pada mematikan cache perangkat keras atau memasang drive dalam mode sinkronisasi, tapi saya tidak yakin apakah itu akan membantu dalam kasus ini (korupsi metadata dan perubahan yang tidak baru-baru ini). Saya juga membaca referensi tentang pemasangan sistem file dalam mode read-only. Kami tidak dapat melakukan itu karena kami perlu menulis, tetapi kami dapat membuat partisi read-only untuk kode dan konfigurasi jika itu akan membantu.

Ini adalah contoh drive sudo hdparm -i /dev/sda1:

Model=KINGSTON RBU-SMS151S364GG, FwRev=S9FM02.5, SerialNo=<deleted>
Config={ Fixed }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=125045424
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes:  pio0 pio3 pio4
DMA modes:  mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=yes: disabled (255) WriteCache=enabled
Drive conforms to: Unspecified:  ATA/ATAPI-3,4,5,6,7
Yehosef
sumber
5
Anda dapat membeli SSD yang lebih baik. SSD khas perusahaan telah membangun kapasitor untuk memberikan daya yang cukup ke perangkat untuk menyelesaikan penulisan data dalam penerbangan jika terjadi kegagalan daya. Uang yang Anda simpan dengan tidak harus memulihkan dari sistem file yang benar-benar acak akan dengan mudah membenarkan biaya tambahan sederhana.
Michael Hampton
1
Yah, tidak ada yang mengatakan Anda harus mengganti semuanya . Tapi Anda bisa menggunakan SSD yang lebih baik untuk penggantian dan / atau instalasi baru.
Michael Hampton
2
"Tidak mudah untuk mengganti mereka semua" -itu benar-benar. Mulailah dengan memberi tahu orang yang membuat keputusan pembelian bahwa ia bertanggung jawab atas biaya karena kelalaian dan ketidakmampuan seseorang melakukan kesalahan yang cukup besar dengan tidak kompeten di perbatasan.
TomTom
7
WriteCache=enabled. Ini masalah besar. Cache tulis tidak boleh diaktifkan pada hard drive yang memiliki database. Beberapa vendor, HP misalnya, sebenarnya mencegah pengaktifan caching penulisan hard drive karena alasan ini.
Greg Askew
3
@Yehosef perhatikan bahwa menonaktifkan cache tulis di OS tidak akan memperbaiki fakta bahwa drive Anda merusak data kehilangan daya. Demi kecepatan dan daya tahan yang lebih tinggi, SSD tingkat konsumen mungkin tidak menulis data ke memori non-volatile ketika Anda menulis ke file, dan sayangnya tidak ada mekanisme perangkat keras untuk drive untuk mengambil data dari cache volatile ke penyimpanan non-volatile di kegagalan daya, hanya SSD perusahaan yang dapat melakukannya. Percaya atau tidak, saya berada dalam situasi yang sama ketika seseorang membeli banyak SSD konsumen, pemasok kami yang mengutip perangkat keras ini tidak tahu ini akan terjadi.
jrh

Jawaban:

14

Ketika tiba-tiba kehilangan daya, SSD MLC / TLC / QLC memiliki dua mode kegagalan:

  • mereka kehilangan tulisan dalam penerbangan dan hanya dalam DRAM;
  • mereka dapat merusak data yang disimpan di halaman bawah sel NAND yang diprogram.

Kondisi kegagalan pertama jelas: tanpa perlindungan daya, data apa pun yang tidak pada penyimpanan stabil (yaitu: NAND itu sendiri) tetapi hanya pada cache volatil (DRAM) akan hilang. Hal yang sama terjadi dengan disk mekanis klasik (dan itu saja dapat mendatangkan malapetaka pada sistem file yang tidak mengeluarkan fsyncs dengan benar).

Kondisi kegagalan kedua adalah urusan MLC + SSD: ketika memprogram ulang bit halaman tinggi untuk menyimpan data baru, kehilangan daya yang tidak terduga dapat menghancurkan / mengubah bit yang lebih rendah (yaitu: data yang dilakukan sebelumnya ) juga.

Satu-satunya solusi yang benar, dan paling jelas, adalah mengintegrasikan cache DRAM yang kehilangan daya (umumnya menggunakan baterai / supercaps), seperti yang dilakukan sejak dulu oleh pengontrol RAID kelas atas; ini, bagaimanapun, meningkatkan biaya / harga penggerak. Drive konsumen biasanya tidak memiliki cache yang dilindungi kehilangan daya; alih-alih, mereka menggunakan serangkaian solusi yang lebih ekonomis sebagai:

  • cache tulis yang dilindungi sebagian (mis: Crucial M500 / M550 / M600 +);
  • NAND mengubah jurnal (yaitu: drive Samsung, lihat atribut SMART PoR);
  • daerah SLC / pseudo-SLC NAND khusus untuk absorbe penulisan baru tanpa data sebelumnya yang berisiko (yaitu: Sandisk, Samsung, dll).

Kembali ke pertanyaan Anda: drive Kingstone Anda sangat murah, menggunakan pengontrol yang tidak ditentukan dan pada dasarnya tidak ada spesifikasi publik. Tidak mengejutkan saya bahwa kehilangan daya secara tiba-tiba merusak data sebelumnya. Sayangnya, bahkan menonaktifkan cache DRAM disk (dengan hilangnya kinerja besar-besaran yang diperintahkan) tidak akan menyelesaikan masalah Anda, karena data sebelumnya (yaitu: data-at-rest) dapat, dan akan, rusak oleh kehilangan daya yang tidak terdeteksi. Jika mereka didasarkan pada pengontrol Sandforce lama, bahkan total drive bata dapat diharapkan dalam keadaan "benar".

Saya sangat menyarankan untuk meninjau UPS Anda dan, dalam jangka menengah, untuk mengganti drive yang menua ini.

Catatan terakhir tentang PostgreSQL dan database Linux lainnya: mereka tidak akan menonaktifkan cache disk dan seharusnya tidak diharapkan untuk melakukan itu. Sebaliknya, mereka melakukan fsyncs / FUAs secara berkala / diperlukan untuk mengkomit data kunci ke penyimpanan yang stabil. Ini adalah cara segala sesuatu harus dilakukan kecuali ada alasan yang sangat menarik (yaitu: drive yang terletak tentang ATA FLUSHES / FUA).

EDIT: jika mungkin, pertimbangkan untuk bermigrasi ke sistem file checksumming sebagai ZFS atau BTRFS. Paling tidak mempertimbangkan XFS, yang memiliki jurnal checksum dan, belakangan, bahkan metadata checksum. Jika Anda terpaksa menggunakan EXT4, pertimbangkan untuk mengaktifkan auto-fsck saat startup (fsck.ext4 sangat baik dalam memperbaiki korupsi).

shodanshok
sumber
Jawaban yang sangat bagus. Silakan lihat pertanyaan saya yang terkait serverfault.com/questions/924054/… - jika Anda ingin menyalin / mengadaptasi jawaban ini di sana, saya akan senang untuk memperbaiki / memilihnya. Kedengarannya seperti menonaktifkan cache-tulis hanya akan membantu untuk kasus pertama. Apakah ada detail lebih lanjut tentang mode kegagalan kedua? Apakah ini terhubung ke penyeimbangan / pengumpulan sampah atau hanya kedekatan?
Yehosef
1
@Yehosef Coba lihat di sini, di bagian "kehilangan daya": anandtech.com/show/8528/…
shodanshok
1
Masalah dengan solusi perangkat lunak adalah bahwa banyak SSD langsung berbohong kepada sistem operasi tentang apakah data disimpan dengan aman atau tidak, termasuk sebagai respons terhadap perintah fsync / FUA. Untuk drive perusahaan yang memiliki penyimpanan energi yang cukup untuk menyelesaikan flush cache ketika daya terputus, ini bukan masalah.
BeowulfNode42
@ BeowulfNode42 ATA Barrier dan FUA diharuskan untuk dihormati. Sementara di IDE / PATA beberapa hari mem-drive flush palsu, saat ini setiap "pembohong" drive tidak sesuai dengan SATA / SAS, dan harus segera dibuang.
shodanshok
namun hard disk yang tidak patuh itu tetap dijual, khususnya di segmen pasar konsumen.
BeowulfNode42
11

Ya. Jangan dapatkan SSD super murah - apa pun di luar pasar konsumen kelas bawah memiliki kapasitor dan perlindungan penuh terhadap kehilangan daya. Amd benar-benar tidak membutuhkan biaya lebih banyak.

TomTom
sumber
Mereka Kingston - jadi saya tidak tahu apakah itu dianggap murah atau banyak yang rusak. Masalah yang lebih besar adalah bahwa unit (~ 6k) sudah ada di lapangan dan sebagian besar tidak gagal (mungkin hanya karena tidak memiliki daya-rugi). Jadi, menggantinya adalah pilihan terakhir yang mahal yang belum kami dapatkan.
Yehosef
menambahkan info drive ke pertanyaan.
Yehosef
5
Mereka sangat murah. Mereka adalah drive pengguna akhir yang berorientasi harga. Cari drive perusahaan kecil. BACA SPESIFIKASI. Umumnya perlindungan Power Failure adalah sesuatu yang ada di spec.
TomTom
1
Untuk menambah @TomTom - terkadang tidak benar-benar disebut perlindungan Kegagalan Daya - dan terkadang perlindungan Kegagalan Daya tidak benar-benar perlindungan kegagalan daya! Anda harus membaca untuk setiap produsen dan mencari tahu apa yang mereka sebut untuk merek SSD perusahaan mereka. (Lihat, untuk setiap mfr, untuk kertas putih mereka sudah menulis tentang bagaimana benar-benar unggul SSD enterprise mereka sendiri.) Dan, saya telah menemukan bahwa, setidaknya untuk pembelian tunggal, tidak biaya cukup sedikit lebih. Tapi saya tidak melakukan pembelian dalam jumlah besar dan bisa berbeda untuk jumlah 100 atau lebih, saya kira.
davidbak
3
Dari apa yang saya baca sejauh ini, manufaktur ini memiliki nama untuk fitur ini sebagai: Kingston = "Pfail" seperti pada seri DC400; Samsung = "Perlindungan Kehilangan Daya"; Intel = "Peningkatan Perlindungan Data Kehilangan Daya"; Sandisk = "Perlindungan kehilangan data dengan perlindungan kegagalan daya". Saya tidak tahu apa yang disebut pabrikan lain, tetapi dalam membaca lembar spesifikasi diperlukan. Catatan itu juga dapat dicapai dengan firmware jika pabrikan menyediakannya. Jika Anda benar-benar memiliki> 6000 di antaranya, saya akan menghubungi Kingston dan menjelaskan situasinya dan menawarkan untuk membayar firmware per drive.
BeowulfNode42
7

Hal pertama yang harus dilakukan adalah menentukan waktu pemulihan dan sasaran titik pemulihan. Berapa lama Anda harus memulihkan salah satu terminal ini, dan titik waktu apa yang dapat diterima? Mungkin dalam beberapa jam Anda harus dapat memulihkan cadangan minggu lalu.

Segala macam hal aneh dapat terjadi pada file jika dalam penerbangan menulis hilang. Prioritas sistem file mempertahankan konsistensi metadata mereka sendiri, mereka mungkin tidak memberikan jaminan yang sama untuk data Anda. Dengan kata lain, fscktidak dijamin untuk memulihkan data Anda. Tugasnya adalah memberi Anda sistem file yang akan dipasang.

Jadi, kekuatan. Instal, konfigurasikan, dan uji apakah UPS akan mematikan sistem dengan anggun. Ini memungkinkan cache sistem file dan drive itu sendiri untuk menulis.

Dan, daya tahan penulisan ke disk. Baca bab keandalan PostgreSQL . Gunakan diskchecker.plskrip yang tertaut di sana untuk melakukan crash test dan tentukan apakah SSD berbohong tentang apakah penulisan dapat penyimpanan non-volatil. Jika ada kerugian, pertimbangkan untuk mengganti dengan SSD yang dikenal memiliki perlindungan kehilangan daya.

Sunting: Anda menambahkan detail yang menulis cache diaktifkan. Anda dapat mencoba menonaktifkannya: hdparm -W0 /dev/sdaatau perintah yang sesuai untuk larik perangkat keras. Referensi: Panduan administrasi penyimpanan RHEL .

Hambatan menulis sistem file memberlakukan urutan komitmen jurnal. Ini bukan jaminan data akan utuh, tetapi lebih aman untuk sistem file dengan cache volatil. Meskipun ini adalah default, menambahkan opsi mount "barrier" dengan jelas mendokumentasikan Anda menghargai konsistensi dibandingkan kinerja.

Akhirnya, garis pertahanan terakhir. Lakukan tes pemulihan untuk memastikan Anda bisa mendapatkan aplikasi dan database Anda ke titik waktu yang diinginkan. Ini berguna untuk semua jenis kehilangan data, bukan hanya kegagalan daya.

John Mahowald
sumber
Tembolok tulis disk ini kemungkinan jawabannya. Untuk beberapa alasan yang tidak diketahui, tampaknya Postgres tidak menonaktifkan cache tulis disk, yang merupakan pengaturan default yang buruk.
Greg Askew
1
Untuk memperjelas - kami memiliki cadangan harian dan kami sedang menyinkronkan data ke cloud, jadi masalahnya kurang terhubung dengan kehilangan data Postgres (ini merupakan masalah, tapi saya pikir ada opsi konfigurasi PG yang dapat membantu.). Masalah yang lebih memprihatinkan adalah mesin menjadi tidak dapat digunakan terhubung dengan keanehan metadata. FWIW, biasanya mesin melakukan boot dan kita dapat terhubung dengannya, tetapi aplikasi gagal karena file-nya telah diacak.
Yehosef
1
"Sepertinya Postgres tidak menonaktifkan cache tulis disk, yang merupakan pengaturan default yang buruk." @GregAskew Harap demosntrate cara menonaktifkan cache DRAM pada SSD coimumer. Itu tidak bisa dinonaktifkan.
TomTom
4
Karena cara kerja SSD. Tanpa cache tulis Anda akan membakar SSD jauh lebih cepat. Sel-sel SSD berukuran besar dan selalu harus benar-benar ditulis-jadi kemampuan untuk menggabungkan banyak penulisan kecil sangat penting untuk masa pakai SSD. Itulah sebabnya Anda TIDAK BISA menonaktifkannya pada drive konsumen (drive berbohong atau tidak mengizinkannya) DAN tidak dapat melakukannya pada drive perusahaan (drive pada dasarnya dapat berbohong karena mereka tidak stabil - mereka memiliki cadangan energi yang cukup untuk menulis ke flash
TomTom
3
@Yehosef Tidak, Postgres bahkan tidak dapat diandalkan memiliki kekuatan sihir untuk memulihkan jika mengirim data ke drive, drive mengatakan "Bagus, dapatkan data Anda", dan kemudian drive tidak pernah sempat menulis data itu dari internal sementara volatile cache ke penyimpanan nonvolatile aktual. Sangat penting untuk hanya menggunakan penyimpanan berkualitas perusahaan di mana unit drive atau raid memiliki cache internal yang didukung oleh baterai atau kapasitor. Postgres memiliki fitur (file WAL, dll.) Untuk melindungi Anda dari kehilangan data yang belum dikirim ke drive, tetapi Postgres tidak dapat memulihkan data yang hilang di dalam drive.
Basil Bourque