Как безопасно записать данные на 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"