Я работаю над встроенной системой Linux, которая монтирует SDCARD (отформатированную в FAT32) и непрерывно записывает около 500 КБ данных в секунду.
Теперь для обработки сбоев питания мы разработали батарею, которая дает резервную копиюоколо 3 секунд.
Это позволяет нам завершить корректное завершение работы.
У нас есть только один процесс записи данных на SDCARD. Так что никакой другой процесс не получит доступ к SDCARD в любом случае.
Во время сбоя питания и в процессе выключения Мы используем fflush и fsync, а затем, наконец, fclose текущего файла, в который записываются данные.
Мы даже проверили с помощью осциллографа, проверяя аппаратные линии, что транзакция данных становитсяактивен с SDCARD, когда мы вызываем fflush и fsync во время процесса выключения.то есть данные кеша пытаются быть записаны в SDCARD в течение этого времени.Это заставляет меня поверить, что fflush и fsync реализованы правильно.
Единственное, что я не сделал, так это размонтировал SDCARD, так как это занимает больше времени.
Но все же примерно за 10 попыток мы можем увидетьКорневой раздел SDCARD поврежден, а файлы отсутствуют.
Размонтирование необходимо для правильного корректного завершения работы.Что я понимаю, так это то, что mount только создает ссылку на inode корня этой файловой системы с остальной частью файловой системы.и umount удаляет только ссылку.
Каков идеальный способ или шаги для обеспечения защиты SDCARD при завершении работы во встроенном Linux.
Ниже приведен код, который выполняется во время процесса выключенияВ настоящее время.необходим размонтированный звонок.
if(fflush(file)<0)
printf("Failed fflush errno=%d",errno);
if(fsync(fileno(file))<0)
printf ("Failed fsync errno=%d",errno);
if(fclose(file)<0)
printf("Failed fclose errno=%d",errno);
file=NULL;