2013-06-28 1 views
0

SD 카드 리더가있는 데비안 리눅스 박스가 있습니다. SD 카드가없는 경우 파일 IO (한 지점까지)를 수행 할 수있는 것 같습니다. 내가 읽고있는 파일이 캐시에있는 파일이 아니라 카드에있는 파일인지 확인하는 방법이 필요합니다.SD 카드에 파일이 있는지 테스트했는데 캐시 된가요?

세부 사항 : I는 SD 카드에 파일을 넣어 읽어 경우

#!/bin/bash 
if [-e "/media/usb3/disk_id"] 
    id=`cat /media/usb3/disk_id` 
    logger "disk id: $id" 
else 
    logger "not there" 
fi 

나는 그것의 'disk_id'파일이있는 디스크를 삽입하면이 (IE 예상 된 동작을) 작동합니다. 그러나 내가 SD 카드를 제거하면 계속 작동합니다 ... 또는 파일이없는 다른 카드에 넣으십시오.

blkid -d /dev/null을 사용하여 SD 카드의 유무를 감지 할 수 있지만 OS가 수행하는 캐싱 방법을 잘 모릅니다.

제안 사항?

+0

당기기 전에 카드를 분리 했습니까? –

+0

아니요. 테스트 케이스의 일부입니다. – ethrbunny

+2

미디어가 제거되면 메모리 구조를 플러시하는 것은 OS에 달려 있습니다. OS가 거짓말 할 때 소프트웨어가 올바르게 작동 할 것이라고 합리적으로 기대할 수는 없습니다. –

답변

0

장치를 올바르게 마운트 해제하지 않고 제거하면이 동작이 발생합니다. 당신이 할 수있는 일은 정말로 없습니다. 적어도 단순한 것은 없습니다.

차단 장치가 있는지 (예 : 새 파일을 작성한 후) fsync을 호출하여 블록 장치가 있는지 감지 할 수 있습니다. 블록 장치가 더 이상 존재하지 않으면 fsync가 실패합니다.

나는 어떻게 bash 스크립트에서 그렇게할지 모르겠다.

SD 카드를 먼저 마운트 해제하지 않고 꺼내야합니다.