2014-04-25 2 views
0

USB 스틱을 제거하기 위해 모든 작업이 완료된 직후에 USB 스틱에 일부 폴더와 파일을 복사하려고합니다. 구현은이 같은 것입니다 :안전하게 USB 스틱에 데이터를 쓰는 방법 - Linux (ARM) - C++

  • 폴더가 (C++ 스트림을 사용)
  • 이 파일 내용을 복사 만든 후 각 디렉토리 설명에 mkdir
  • fsync를 사용하여 USB 스틱에 해당 폴더 구조를 만들
  • fsync 각 파일을 복사 한 후 각 파일 설명자에

마지막 파일을 복사 한 직후에 USB 스틱 (~ 500ms - 1s). 그러나 때때로 전체 폴더 구조가 빠져 있습니다. 이를 피하기 위해 마지막 파일을 복사 한 후 각 디렉토리 설명자에 다시 fsync을 사용했습니다. 이번에는 모든 파일과 폴더가 USB 스틱에 있지만 때로는 폴더 구조에 쓰레기가 있거나 USB 스틱이 손상됩니다. USB 스틱 파일 시스템은 vfat입니다. 데이터를 올바르게 저장하는 방법에 대한 아이디어가 있습니까?

+0

초기 제안 동기화하는 것을 잊었다 희망의 끝에서() 하나의 동기에 의해 개별 fsyncs을 대체하는 옵션 "-o 다시 마운트, RW, noatime으로"와 "마운트"않습니다 다른 것. 이 방법으로 문제가 해결되지 않으면 동기화 후 장치를 강제 마운트 해제 할 수 있습니까? – hdante

+0

sync()를 사용하면 전체 파일 시스템이 동기화되고이를 피하려고합니다. Umount가 현재의 해결책이지만 다른 프로세스가 USB 스틱을 사용하고 있다면 umount가 실패합니다. – user3458705

+0

다른 프로세스가 사용 중일 때 USB 스틱을 제거하면 파일 시스템이 손상 될 수 있습니다. – hdante

답변

3

제거하기 전에 장치를 마운트 해제하십시오. VFAT와 같은 저널링되지 않은 파일 시스템의 경우 파일 시스템이 마운트되는 동안 파일 시스템이 디스크의 일관된 상태에 있다는 보장이 없습니다.

1

작성한 후에 "-o remount, ro"옵션을 사용하여 "mount"하십시오. 그러면 모든 내용이 쓰여지고 읽기 전용 모드로 변경됩니다. 다른 응용 프로그램에서 파일을 열 수 있습니다.

쓰기 위해

관련 문제