2014-10-23 3 views
0

나는 플래시 드라이브에 데이터를 저장하는 것을 좋아하는 시스템 (CentOS 6.3에서 실행 중)을 가지고있다.Linux : 마운트 된 vfat 볼륨이 제거되었는지 어떻게 알 수 있습니까?

사용자가 데이터를 아카이브하려고 할 때 드라이브를 마운트하려고하는 UI가 있습니다. 사용자가 아카이브 기능을 선택하고 드라이브 (있는 경우)를 마운트하고 통계를 확인합니다. 좋지 않은 경우 (예 : 데이터 세트보다 작게 드라이브) 사용자에게 다른 드라이브를 시도하도록 요청합니다.

이제 볼륨을 마운트 해제하고 다시 마운트하지 않으려 고하기 때문에 마운트 된 상태로 두는 것이 좋습니다. 그러나 그때, 사용자가 그것을 꺼낼 때, 나는 그것이 사라 졌다고 말하는 방법을 모른다.

드라이브를 폴링하는 루프가 있는데, 드라이브가있는 것처럼 계속 작동하는 statvfs64()과 같은 것을보고 있습니다. stat()도 드라이브가 실제로 제거 될 때 변경되지 않습니다.

오픈 디렉토리 (opendir())를 읽었지만 그 중 하나라도 실패하지는 않습니다. (드라이브에 파일이 있으면 그 파일이 더 이상 나타나지 않지만 물론 드라이브가있을 수도 있습니다. 시작하기에 비어있는, 그래서 나는 그것에 의해 갈 수 없다).

사용자가 NTFS 드라이브와 같은 플러그를 꽂았을 수도 있으므로 드라이브를 반복해서 마운트 해제하고 다시 마운트하지 않으려 고합니다. 마운트하는 데는 약간의 시간이 걸릴 것 같습니다.

마운트가 읽기 전용 일 수 있으므로 문제의 파일 시스템에 쓰기를 시도하는 것이 내가 할 수있는 일이 아닙니다.

지금까지 내가 알아 낸 유일한 점은 마운트 장치를 점검하고 여전히 존재하는지 (플래시 키를 가져올 때/dev/sd * 항목이 사라짐) 볼 수 있다는 것입니다. 이 일을하는 더 좋은 방법이있는 것 같지만 아직 이해할 수 없었습니다.

답변

0

/dev/sd *가 있다고해도 드라이브가 마운트되어있는 것은 아니며 시스템에만 있습니다. 어쩌면 당신은/proc/mounts 파일을 파싱 해보고 그 파일이 있는지 찾아 볼 수 있습니다.

+0

드라이브가 마운트 해제 될 때까지/proc/mounts에 있습니다. –

+0

드라이브가 물리적으로 제거 된 후에도/proc/mounts에 있습니까? – Alex

+0

네, 그게 문제입니다. 그뿐 아니라 마운트 포인트의 'stat'와 같은 것들이 드라이브가있는 것처럼 돌아가고 심지어 ls/mnt/mountpoint조차도 어떤 종류의 실패 대신 빈 디렉토리를 반환합니다. 필자는 모든 파일 시스템에서 발생하는지는 모르지만 fat32에서 발생하며 fat32를 지원해야하므로 더 이상 보지 않았습니다. –

0

좋아, 내가 한 일은 주기적으로 장치가 여전히 있는지 확인하는 것입니다. 따라서/dev/sdb1이/mnt/usbdrive에 마운트되어 있다면,/dev/sdb1이 여전히 존재하는지 주기적으로 확인합니다. 그렇지 않으면, 나는 마운트 해제하고 다시보고로 이동하십시오.

이 방법은 최적은 아니지만 제대로 작동하므로 지금은 특히 빈 드라이브의 읽기 전용 마운트에서 가장 좋은 방법입니다.

관련 문제