UBIFS: неожиданное поведение (выравнивание износа)

#filesystems #embedded #embedded-linux

#файловые системы #встроенный #встроенный-linux

Вопрос:

Я немного поиграл с UBIFS. Один тест, который я написал, был стресс-тестом, чтобы увидеть, работает ли выравнивание износа в системе, как ожидалось. В двух словах тест

  • Записывает файл со случайными данными в файловую систему, расположенную на томе ubi
  • Проверяет содержимое файла
  • Удаляет файл

Этот тест выполняется определенное количество раз (около 200 000). «Загруженный» том UBI был смонтирован на другом томе UBI. Как и ожидалось, максимальное количество стираний для «загруженного» тома ubi увеличилось. Я также заметил, что максимальное количество стираний для тома UBI в месте монтирования также увеличилось. Я бы этого не ожидал.

  1. Кто-нибудь знает, что может вызвать это? Что-то в UBI? Или какой-то механизм в ядре Linux (например, ведение журнала)?

  2. Кто-нибудь видел подобное поведение с другими файловыми системами, в которых реализовано выравнивание износа?

Ответ №1:

Первое предположение состоит в том, что включено ведение журнала во время доступа или, возможно, во время модификации, если тесты выполняются в корне «загруженного» тома. Скорее всего, время доступа — монтирует внешнюю файловую систему (на самом деле, вероятно, обе) с -noatime.

Комментарии:

1. Хорошая идея, но я нашел это на странице руководства для mount: Параметры монтирования для ubifs: «UBIFS — это файловая система flash, которая работает поверх томов UBI. Обратите внимание, что atime не поддерживается и всегда отключен. »

2. Тогда я бы предположил, что это какая-то другая запись данных — это работающая система Linux; различные вещи записываются на диск (особенно, но не ограничиваясь / var). Вы могли бы смонтировать диск tmpfs / ramdisk поверх ubifs, используя unionfs или другую оверлейную файловую систему для обработки записей, а также посмотреть, что записывается и кем

Ответ №2:

Два процесса в системе обмениваются данными через доменный сокет Unix. Этот сокет создается в томе UBI «mount» (я не знаю подходящего местоположения). Когда я переместил этот файл в папку на основе оперативной памяти (т. Е. / tmp), запись на подключаемый том UBI прекратилась. Во время стресс-теста сокет существовал, но не использовался. Было бы неплохо знать, почему файловая система считает, что ей необходимо записывать файл после каждой синхронизации.