Это может быть более подходящим в UNIX и Linux, поэтому, пожалуйста, дайте мне знать. Мне интересно, есть ли в Linux доступная файловая система, которая может выдерживать (или предназначена для лучшей обработки) жесткое отключение SSD/ флэш-носителей? Хорошим ответом, занявшим второе место, будет предложение конфигурации параметров монтирования файловой системы, которая при правильной настройке может быть наилучшим образом подготовлена к событиям отключения.

Чтобы прояснить мой сценарий использования, в качестве примера можно было бы извлечь смонтированную SD-карту без прохождения процесса размонтирования программного обеспечения / ОС. Спасибо!

2 ответа2

1

Это страшная тема, с несколькими возможностями для расследования ... Я собираюсь охватить два больших.

Посмотрите этот доклад из ELC 2015: Особенности файловой системы для встроенных устройств.

Файловая система

Файловая система должна тщательно обрабатывать записи на диск. Проблема может возникнуть, если, например, длина файла увеличивается первой, а данные записываются вторыми. Это проблема, которая может легко возникнуть, и я только сегодня просматривал файл журнала, в котором обнаружена эта проблема - система неожиданно потеряла питание:

00017ea0  6f 74 29 20 43 4d 44 20  28 20 20 20 63 64 20 2f  |ot) CMD (   cd /|
00017eb0  20 26 26 20 72 75 6e 2d  70 61 72 74 73 20 2d 2d  | && run-parts --|
00017ec0  72 65 70 6f 72 74 20 2f  65 74 63 2f 63 72 6f 6e  |report /etc/cron|
00017ed0  2e 68 6f 75 72 6c 79 29  0a 00 00 00 00 00 00 00  |.hourly)........|
00017ee0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017ef0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f10  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f20  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f30  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f40  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f50  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f70  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f80  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017f90  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017fa0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017fb0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017fc0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017fd0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017fe0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00017ff0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00018000  4d 61 72 20 31 30 20 31  35 3a 31 38 3a 33 34 20  |Mar 10 15:18:34 |
00018010  72 6f 6c 6c 79 20 72 73  79 73 6c 6f 67 64 3a 20  |rolly rsyslogd: |
00018020  5b 6f 72 69 67 69 6e 20  73 6f 66 74 77 61 72 65  |[origin software|

Так что да ... файловая система должна быть в состоянии обрабатывать такие события. Существуют коммерческие предложения для файловых систем, которые обеспечивают устойчивость к потере мощности, но я не рекомендую такую.

Конечно, использование файловой системы только для чтения в максимально возможной степени является большим преимуществом - например, наличие ОС в файловой системе только для чтения и конфигурация (и т.д.) В файловой системе для чтения и записи. Это может потенциально помочь вам восстановиться после повреждения и возобновить обслуживание.

Кроме того, журналируемые файловые системы обычно лучше обрабатывают такие события, но не предполагают какого-либо уровня гарантии ... Мой файл журнала выше был в файловой системе ext4 с журналированием.

Средство хранения

Вы упоминаете SD-карты в качестве основного хранилища ... что касается. На самом деле все флэш-накопители имеют проблемы с неожиданным отключением питания. Это связано с тем, как они работают - выравнивание износа полностью выполняется контроллером хранилища, и поэтому он может решить перемещать страницы в любое время.

Кроме того, запись на страницу часто состоит из целого набора операций, и нет никакой гарантии / стандарта, определяющего, в каком порядке они происходят.

  1. Проверить на стертую / новую страницу - при необходимости стереть
  2. Читать данные со старой страницы
  3. Примените изменения согласно write()
  4. Написать новую страницу
  5. Пересвязать логическое с физическим отображением

Существует много историй о том, как люди отключали системы или устройства хранения данных и находили, что « мой 128 ГБ SSD отображается как 1 ГБ » или « моя SD-карта больше не работает » и т. Д ...

Цитата из JEDEC 84-A441: (по общему признанию, ссылающаяся на eMMC, но, вероятно, относящаяся к делу)

Сброс карты (с использованием CMD0, CMD15 или аппаратный сброс для e • MMC) или сбой питания приведет к прекращению любой ожидающей или активной операции программирования. Это может оставить некоторые или все данные, адресованные операцией, в неизвестном состоянии, если не была включена надежная запись. Ответственность за предотвращение этого лежит на хозяине.

Резюме

К сожалению, на самом деле нет хороших / надежных шагов, которые можно предпринять, чтобы упростить « извлечение смонтированной SD-карты без прохождения процесса размонтирования программного обеспечения / ОС » и не столкнуться с проблемами.

Мораль истории - найдите способ sync и unmount его правильно, чтобы гарантировать, что данные файловой системы являются непрерывными, и что write() не выполняются, когда пользователь отключает их.

0

RFS - файловая система Samsung "Robust File System" должна быть в порядке для этого.

На практике вы должны иметь возможность использовать любую журналируемую файловую систему или систему, которая выполняет копирование при записи (ext3, ext4 и даже более того btrfs). Риск, который вы запускаете - который будет применяться к любой файловой системе - заключается в том, что ОС может буферизовать информацию или может не завершить запись при извлечении диска - в этом случае любая информация, которая не была завершена, не будет сохранена (но существующие данные не будут повреждены, или, если это так, они могут быть воспроизведены из журнала.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .