Как безопасно записать данные на USB-накопитель - Linux (ARM) - C++

Я пытаюсь скопировать некоторые папки и файлы на USB-накопитель и сразу после того, как все сделано, удалить USB-накопитель. Реализация примерно такая:

  • создать соответствующую структуру папок на USB-накопителе, используя mkdir
  • fsync в каждом дескрипторе каталога после создания папки
  • скопировать содержимое файла (используя потоки C++)
  • fsync на каждом файловом дескрипторе после копирования каждого файла

Сразу после копирования последнего файла я вынимаю флешку (~500 мс - 1 с). Но иногда вся структура папок отсутствует. Чтобы избежать этого, я снова использовал fsync в каждом дескрипторе каталога после копирования последнего файла. На этот раз все файлы и папки присутствуют на USB-накопителе, но иногда у меня есть мусор в структуре папок или USB-накопитель поврежден. Файловая система флешки - vfat. Любая идея о том, как правильно сохранить данные?

2 ответа

Размонтируйте устройство перед его удалением. Для не журналируемой файловой системы, такой как VFAT, нет гарантии, что файловая система будет находиться в согласованном состоянии на диске во время монтирования.

После написания выполните команду "mount" с параметрами "-o remount,ro". Это запишет все и перейдет в режим только для чтения. Другие приложения могут иметь открытые файлы.

Для написания выполните "mount" с параметрами "-o remount,rw,noatime"

Другие вопросы по тегам