Có cách nào để bảo vệ SSD khỏi tham nhũng do mất điện không?


15

Chúng tôi có một nhóm các thiết bị đầu cuối tiêu dùng có Linux, máy chủ web cục bộ và PostgreSQL được cài đặt. Chúng tôi đang nhận được báo cáo hiện trường về các máy có vấn đề và sau khi điều tra có vẻ như đã bị mất điện và bây giờ có lỗi với đĩa.

Tôi đã giả định rằng vấn đề sẽ xảy ra với cơ sở dữ liệu bị hỏng hoặc các tệp có thay đổi gần đây bị xáo trộn, nhưng có các báo cáo kỳ lạ khác.

  • tập tin có quyền sai
  • các tệp đã trở thành thư mục (ví dụ: index.phpbây giờ là một thư mục)
  • thư mục đã trở thành tập tin
  • các tệp có dữ liệu bị xáo trộn

Có vấn đề với cơ sở dữ liệu bị hỏng, nhưng đó là điều tôi có thể mong đợi. Điều tôi ngạc nhiên hơn là các vấn đề hệ thống tệp cơ bản hơn - ví dụ: quyền hoặc thay đổi tệp vào thư mục. Các vấn đề cũng xảy ra trong các tệp gần đây không thay đổi (ví dụ: mã và cấu hình phần mềm).

Đây có phải là "bình thường" cho tham nhũng SSD? Ban đầu chúng tôi nghĩ rằng nó đã xảy ra trên một số ổ SSD giá rẻ, nhưng chúng tôi có điều này xảy ra trên một nhãn hiệu tên (cấp độ người tiêu dùng.)

FWIW, chúng tôi không thực hiện autofsck khi khởi động ô uế (không biết tại sao- Tôi mới). Chúng tôi có các UPS được lắp đặt ở một số vị trí, nhưng đôi khi nó không được thực hiện đúng cách, v.v. Điều này cần được khắc phục, nhưng ngay cả khi đó mọi người có thể tắt nguồn thiết bị đầu cuối một cách không sạch sẽ, v.v. - vì vậy nó không phải là bằng chứng ngu ngốc. Hệ thống tập tin là ext4.

Câu hỏi: có bất cứ điều gì chúng ta có thể làm để giảm thiểu vấn đề ở cấp hệ thống không?

Tôi đã tìm thấy một số bài viết đề cập đến việc tắt bộ nhớ cache phần cứng hoặc gắn ổ đĩa ở chế độ đồng bộ hóa, nhưng tôi không chắc liệu điều đó có giúp ích gì trong trường hợp này không (tham nhũng siêu dữ liệu và các thay đổi không gần đây). Tôi cũng đọc một tài liệu tham khảo về việc gắn hệ thống tập tin ở chế độ chỉ đọc. Chúng tôi không thể làm điều đó bởi vì chúng tôi cần phải viết, nhưng chúng tôi có thể tạo một phân vùng chỉ đọc cho mã và cấu hình nếu điều đó có ích.

Đây là một ví dụ về ổ đĩa 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

5
Bạn có thể mua SSD tốt hơn. SSD doanh nghiệp điển hình đã tích hợp các tụ điện để cung cấp đủ năng lượng cho thiết bị để hoàn thành việc ghi dữ liệu trên chuyến bay trong trường hợp mất điện. Số tiền bạn tiết kiệm được bằng cách không phải phục hồi từ một hệ thống tập tin hoàn toàn bị xáo trộn sẽ dễ dàng biện minh cho chi phí bổ sung khiêm tốn.
Michael Hampton

1
Chà, không ai nói bạn phải thay thế tất cả . Nhưng bạn có thể sử dụng ổ SSD tốt hơn để thay thế và / hoặc cài đặt mới.
Michael Hampton

2
"Thật không đơn giản để thay thế tất cả" - hoàn toàn là vậy. Bắt đầu bằng cách nói với anh chàng makiong quyết định mua hàng anh ta phải chịu trách nhiệm về chi phí do bỏ bê thô và không đủ năng lực Ai đó đã làm một số sai lầm khá lớn bằng cách không có thẩm quyền biên giới.
TomTom

7
WriteCache=enabled. Đây là một vấn đề rất lớn. Ghi bộ nhớ cache không bao giờ được kích hoạt trên các ổ đĩa cứng có cơ sở dữ liệu. Một số nhà cung cấp, ví dụ như HP, thực sự ngăn việc cho phép ổ cứng ghi bộ nhớ đệm vì lý do này.
Greg Askew

3
@Yehosef lưu ý rằng việc tắt bộ nhớ đệm ghi trong HĐH sẽ không khắc phục được thực tế là ổ đĩa của bạn làm hỏng dữ liệu khi mất điện. Vì lợi ích của SSD cấp độ người tiêu dùng tốc độ và độ bền cao hơn có thể không ghi dữ liệu vào bộ nhớ không bay hơi khi bạn ghi vào tệp và rất tiếc, không có cơ chế phần cứng nào để ổ đĩa lấy dữ liệu từ bộ đệm dễ bay hơi sang bộ nhớ không bay hơi trên mất điện, chỉ có SSD doanh nghiệp có thể làm điều đó. Tin hay không là tôi đã ở trong một tình huống tương tự khi ai đó đã mua rất nhiều ổ SSD tiêu dùng, nhà cung cấp của chúng tôi đã trích dẫn phần cứng này không biết điều này sẽ xảy ra.
jrh

Câu trả lời:


14

Khi đột ngột mất nguồn, SSD MLC / TLC / QLC có hai chế độ lỗi:

  • họ mất các bài viết chỉ trong chuyến bay và trong DRAM;
  • họ có thể làm hỏng bất kỳ dữ liệu nào được lưu trữ ở trang dưới của ô NAND đang được lập trình.

Điều kiện thất bại đầu tiên là rõ ràng: không có bảo vệ nguồn, mọi dữ liệu không được lưu trữ ổn định (nghĩa là: chính NAND) nhưng chỉ trên bộ đệm dễ bay hơi (DRAM) sẽ bị mất. Điều tương tự cũng xảy ra với các đĩa cơ cổ điển (và điều đó một mình có thể tàn phá hệ thống tập tin không phát hành fsyncs đúng cách).

Điều kiện thất bại thứ hai là sự cố MLC + SSD: khi lập trình lại bit trang cao để lưu trữ dữ liệu mới, việc mất điện đột xuất cũng có thể phá hủy / thay đổi bit thấp hơn (ví dụ: dữ liệu đã cam kết trước đó ).

Giải pháp duy nhất đúng và rõ ràng nhất là tích hợp bộ đệm DRAM được bảo vệ chống mất điện (thường sử dụng pin / siêu tụ điện), được thực hiện mãi mãi bởi các bộ điều khiển RAID cao cấp; điều này, tuy nhiên, làm tăng chi phí / giá ổ đĩa. Ổ đĩa tiêu dùng thường không có bộ nhớ cache được bảo vệ mất điện; thay vào đó, họ sử dụng một loạt các giải pháp kinh tế hơn như:

  • bộ nhớ đệm ghi được bảo vệ một phần (ví dụ: Crucial M500 / M550 / M600 +);
  • NAND thay đổi nhật ký (ví dụ: ổ đĩa Samsung, xem thuộc tính SMART PoR);
  • các vùng NAND SLC / giả-SLC đặc biệt để hấp thụ ghi mới mà không có dữ liệu trước có nguy cơ (ví dụ: Sandisk, Samsung, v.v.).

Quay lại câu hỏi của bạn: các ổ đĩa Kingstone của bạn là những ổ cực rẻ, sử dụng bộ điều khiển không xác định và về cơ bản không có thông số kỹ thuật nào. Tôi không ngạc nhiên khi mất điện đột ngột làm hỏng dữ liệu trước đó. Thật không may, ngay cả việc vô hiệu hóa bộ đệm DRAM của đĩa (với sự mất hiệu năng lớn mà nó ra lệnh) sẽ không giải quyết được vấn đề của bạn, vì dữ liệu trước đó (ví dụ: dữ liệu tại phần còn lại) có thể, và sẽ bị hỏng do mất điện. Nếu chúng dựa trên bộ điều khiển Sandforce cũ, thậm chí toàn bộ khối ổ đĩa có thể được mong đợi trong các trường hợp "đúng".

Tôi thực sự khuyên bạn nên xem lại UPS của mình và, trong trung hạn, để thay thế các ổ đĩa cũ này.

Một lưu ý cuối cùng về PostgreSQL và các cơ sở dữ liệu Linux khác: họ sẽ không vô hiệu hóa bộ đệm của đĩa và không nên bỏ qua để làm điều đó. Thay vào đó, họ hiện định kỳ fsyncs / FUAs định kỳ / cam kết dữ liệu chính để lưu trữ ổn định. Đây là cách mọi thứ nên được thực hiện trừ khi có một lý do rất thuyết phục (ví dụ: một ổ đĩa nói về ATA FLUSHES / FUAs).

EDIT: nếu có thể, hãy xem xét chuyển sang hệ thống tập tin kiểm tra dưới dạng ZFS hoặc BTRFS. Ít nhất hãy xem xét XFS, có tổng kiểm tra tạp chí và gần đây, thậm chí là tổng kiểm tra siêu dữ liệu. Nếu bạn buộc phải sử dụng EXT4, hãy xem xét bật auto-fsck khi khởi động (fsck.ext4 rất tốt trong việc sửa chữa tham nhũng).


Câu trả lời tuyệt vời. Vui lòng xem câu hỏi liên quan của tôi serverfault.com/questions/924054/ - - nếu bạn muốn sao chép / điều chỉnh câu trả lời này, tôi rất vui lòng upvote / chọn nó. Có vẻ như việc vô hiệu hóa bộ đệm ghi sẽ chỉ giúp cho trường hợp đầu tiên. Bạn có biết thêm chi tiết về chế độ thất bại thứ hai không? Được kết nối với tái cân bằng / thu gom rác hay chỉ là sự gần gũi?
Yehosef

1
@Yehosef Hãy xem ở đây, trong phần "mất điện": anandtech.com/show/8528/
mẹo

1
Vấn đề với bất kỳ giải pháp phần mềm nào là nhiều ổ SSD hoàn toàn nói dối với hệ điều hành về việc dữ liệu có được lưu trữ an toàn hay không, bao gồm cả việc đáp ứng các lệnh fsync / FUA. Đối với các ổ đĩa doanh nghiệp có bộ lưu trữ năng lượng đủ để hoàn thành việc xóa bộ đệm của nó khi bị cắt nguồn, đây không phải là vấn đề.
BeowulfNode42

@ BeowulfNode42 Các rào cản ATA và FUA được yêu cầu phải được vinh danh. Mặc dù trong những ngày IDE / PATA, một số ổ đĩa bị làm giả, ngày nay, bất kỳ ổ đĩa "nói dối" nào như vậy đều không tuân thủ chuẩn SATA / SAS và ngay lập tức bị loại bỏ.
shodanshok

và những ổ đĩa không tuân thủ này vẫn được bán, đặc biệt là trong phân khúc thị trường tiêu dùng.
BeowulfNode42

11

Vâng. Đừng mua SSD siêu rẻ - bất cứ thứ gì ngoài thị trường tiêu dùng cấp thấp đều có tụ điện và bảo vệ hoàn toàn chống mất điện. Amd thực sự không tốn nhiều hơn thế.


Họ là Kingston - vì vậy tôi không biết những thứ đó được coi là rẻ tiền hay là một lỗi nhiều. Vấn đề lớn hơn là các đơn vị (~ 6k) đã ở trong lĩnh vực này và hầu hết không bị lỗi (có lẽ chỉ vì không bị mất điện). Vì vậy, thay thế chúng là một phương sách cuối cùng đắt tiền mà chúng ta chưa đạt được.
Yehosef

thêm thông tin ổ đĩa cho câu hỏi.
Yehosef

5
Chúng siêu rẻ. Họ là ổ đĩa người dùng cuối định hướng giá. Hãy tìm ổ đĩa doanh nghiệp nhỏ. ĐỌC THÔNG TIN. Nói chung, bảo vệ mất điện là một cái gì đó trong thông số kỹ thuật.
TomTom

1
Để thêm vào @TomTom - đôi khi nó không thực sự được gọi là bảo vệ Mất điện - và đôi khi bảo vệ Mất điện thực sự không thực sự bảo vệ mất điện! Bạn phải đọc một số cho mỗi nhà sản xuất và tìm hiểu xem họ gọi nó là gì cho thương hiệu SSD doanh nghiệp cụ thể của họ. (Look, đối với mỗi mfr, cho giấy trắng họ đã viết về cách thực sự vượt trội SSD doanh nghiệp riêng của họ.) Và, tôi đã tìm thấy rằng, ít nhất cho việc mua bán duy nhất, nó làm chi phí khá hơn một chút. Nhưng tôi không mua hàng số lượng lớn và nó có thể khác với số lượng từ 100 trở lên, tôi cho rằng.
davidbak

3
Từ những gì tôi đã đọc cho đến nay, các nhà sản xuất này có tên cho tính năng này là: Kingston = "Pfail" như trên dòng DC400; Samsung = "Bảo vệ mất điện"; Intel = "Bảo vệ dữ liệu mất điện nâng cao"; Sandisk = "Bảo vệ mất dữ liệu với bảo vệ mất điện". Tôi không biết các nhà sản xuất khác gọi nó là gì, nhưng đọc sâu các tờ spec là bắt buộc. Lưu ý rằng nó cũng có thể đạt được với phần sụn nếu nhà sản xuất cung cấp nó. Nếu bạn thực sự có> 6000 người trong số họ, tôi sẽ liên hệ với Kingston và giải thích tình huống và đề nghị trả tiền cho phần sụn trên mỗi ổ đĩa.
BeowulfNode42

7

Điều đầu tiên cần làm là xác định thời gian phục hồi và mục tiêu điểm khôi phục. Bạn phải khôi phục một trong những thiết bị đầu cuối này trong bao lâu và thời điểm nào dữ liệu được chấp nhận? Có lẽ trong vài giờ nữa, bạn cần có khả năng phục hồi để sao lưu vào tuần trước.

Tất cả các loại điều kỳ lạ có thể xảy ra với các tập tin nếu trong chuyến bay ghi bị mất. Ưu tiên hệ thống tệp đang duy trì tính nhất quán siêu dữ liệu của riêng họ, họ có thể không cung cấp cùng một đảm bảo cho dữ liệu của bạn. Nói cách khác, fsckkhông được đảm bảo để khôi phục dữ liệu của bạn. Công việc của nó là giúp bạn có một hệ thống tập tin sẽ gắn kết.

Vì vậy, sức mạnh. Cài đặt, định cấu hình và kiểm tra rằng UPS sẽ tắt hệ thống một cách duyên dáng. Điều này cho phép lưu trữ hệ thống tập tin và các ổ đĩa tự ghi.

Và, độ bền của ghi vào đĩa. Đọc chương đáng tin cậy của PostgreSQL . Sử dụng diskchecker.pltập lệnh được liên kết ở đó để thực hiện kiểm tra sự cố và xác định xem liệu ổ SSD có nói dối hay không nếu ghi vào bộ lưu trữ không bay hơi. Nếu có mất mát, hãy xem xét thay thế bằng SSD được biết là có bảo vệ mất điện.

Chỉnh sửa: bạn đã thêm chi tiết ghi bộ đệm đã được bật. Bạn có thể cố gắng vô hiệu hóa điều đó: hdparm -W0 /dev/sdahoặc lệnh thích hợp cho một mảng phần cứng. Tham khảo: Hướng dẫn quản trị lưu trữ RHEL .

Rào cản hệ thống tập tin thực thi một lệnh của các cam kết tạp chí. Nó không đảm bảo dữ liệu sẽ còn nguyên vẹn, nhưng an toàn hơn cho hệ thống tệp với bộ đệm dễ bay hơi. Mặc dù nó là mặc định, việc thêm tùy chọn gắn kết "rào cản" rõ ràng là tài liệu bạn đánh giá cao tính nhất quán so với hiệu suất.

Cuối cùng, tuyến phòng thủ cuối cùng. Thực hiện kiểm tra khôi phục để đảm bảo bạn có thể đưa ứng dụng và cơ sở dữ liệu của mình đến thời điểm mong muốn. Điều này hữu ích cho tất cả các loại mất dữ liệu, không chỉ mất điện.


Đĩa này ghi bộ nhớ đệm là câu trả lời có khả năng. Vì một số lý do không rõ, có vẻ như Postgres không vô hiệu hóa bộ đệm ghi đĩa, đây là một thiết lập mặc định khủng khiếp.
Greg Askew

1
Để làm rõ - chúng tôi có các bản sao lưu hàng ngày và chúng tôi đang đồng bộ hóa dữ liệu lên đám mây, vì vậy vấn đề ít liên quan đến việc mất dữ liệu Postgres (đây là một vấn đề đáng lo ngại, nhưng tôi nghĩ có các tùy chọn cấu hình PG có thể trợ giúp.). Vấn đề liên quan hơn là máy trở nên không sử dụng được kết nối với sự kỳ lạ của siêu dữ liệu. FWIW, thường là máy khởi động và chúng ta có thể kết nối với nó, nhưng ứng dụng bị lỗi vì các tệp của nó đã bị xáo trộn.
Yehosef

1
"có vẻ như Postgres không vô hiệu hóa bộ nhớ đệm ghi đĩa, đây là một thiết lập mặc định khủng khiếp." @GregAskew Vui lòng giải thích cách vô hiệu hóa bộ đệm DRAM trên SSD coimsumer. Nó không thể bị vô hiệu hóa.
TomTom

4
Vì cách thức hoạt động của SSD. Nếu không ghi cache, bạn sẽ ghi SSD nhanh hơn rất nhiều. Các tế bào SSD rất lớn và luôn cần phải được ghi hoàn toàn - vì vậy khả năng kết hợp nhiều ghi nhỏ là rất quan trọng đối với tuổi thọ của SSD. Đó là lý do tại sao bạn KHÔNG thể vô hiệu hóa nó trên các ổ đĩa của người tiêu dùng (các ổ đĩa nói dối hoặc không cho phép nó) VÀ không thể làm điều đó trên các ổ đĩa doanh nghiệp (các ổ đĩa về cơ bản có thể nói dối vì chúng không dễ bay hơi - chúng có đủ năng lượng dự trữ để viết kịch ra ngoài chớp nhoáng
TomTom

3
@Yehosef Không, Postgres thậm chí không đáng tin cậy có khả năng phục hồi nếu nó gửi dữ liệu vào ổ đĩa, ổ đĩa nói Good Good, có dữ liệu của bạn, và sau đó ổ đĩa không bao giờ ghi được dữ liệu đó từ sự biến động tạm thời bên trong của nó bộ nhớ cache để lưu trữ không biến đổi thực tế. Điều quan trọng là chỉ sử dụng bộ lưu trữ chất lượng doanh nghiệp trong đó ổ đĩa hoặc đơn vị đột kích có bộ đệm trong được hỗ trợ bởi pin hoặc tụ điện. Postgres có các tính năng (tệp WAL, v.v.) để bảo vệ bạn khỏi mất dữ liệu chưa được gửi vào ổ đĩa, nhưng Postgres không thể khôi phục dữ liệu bị mất trong ổ đĩa.
Basil Bourque
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.