filesystem을 공유하는 여러 system에서 inotify 사용은 불가능하군요...
글쓴이: jekai / 작성시간: 토, 2012/11/24 - 8:11오후
filesystem을 감시하는 목적으로 inotify를 사용했는데,
제 환경이 filesystem을 여러 machine이 공유하고( **특정 path /user/ 밑으로만 모든 machine이 공유** )
각각의 machine에서 inotify를 사용하여 특정 directory를 monitoring합니다.
그런데, inofity가 /dev/input으로 동작하는거라서 같은 machine안에서 발생하는 file변경사항은 감지를 해도,
다른 machine에서 발생하는 file변경은 감지를 못하네요...
filesystem을 공유하고있지만, kernel이 각각 다르기때문에 /dev/input도 달라서 이건 어쩔수 없나봅니다.
그래서 저와 같은 환경에서는 어쩔수 없이 polling하면서 감지하는 방법밖에 없을까요???
/dev/input 를 옮기는 방법같은건 없을까요 ㅠㅠ
Forums:
..
하나의 파일 시스템이라면 inotify가 감지를 못할리가 없을 것으로 생각됩니다.
machine이 공유하는 디렉토리가 하나인가요 아니면 하나의 디렉토리안에 각 머신이 공유하는 디렉토리가 별도로 있나요?
상황이 조금 더 자세하면 더 많은 분들이 도움을 줄 수 있지 않을까 싶습니다 :)
답변 감사합니다.
각각의 machine 마다 local disk 영역이 있습니다. root 밑에 /usr , /sys , /dev, /proc 등 linux 설치시 자동으로 생성되는 놈들이지요, 이것들은 machine마다 분리가 되어있고요...
공유하는 디렉토리는 /user 아래 모든 하위 디렉토리들을 공유하고 있습니다.
제가 test한 방법은, machine_A에서 프로그램을 실행하여 /user 밑 특정 path (/user/AAA/BB)를 inotify_add_watch로 등록하였습니다.
그리고 machine_B에서도 같은 프로그램으로 같은 path를 inotify_add_watch로 등록하였습니다.
그런데, machine_A 에서 terminal을 하나 열어서 file add, remove를 하면
A에서 띄운 프로그램에서는 감지를 해도, B에서 띄운 프로그램에서는 감지를 못하더군요...
"하나의 파일 시스템이라면 inotify가 감지를 못할리가 없을 것으로 생각됩니다." <<-- 솔깃해지는군요 ;;
..
그렇다면 물리적으로 완전히 분리 되어있다는 말씀이신거죠?
공유는 nfs로 되고 있는겁니까? 그렇다면 노티를 받을 수 없습니다.
폴링보다는 감지한 하나의 머신에서 다른 머신들에게 브로드캐스팅을 해주는 것이 좋아보입니다.
도움이 되지 못해 죄송합니다 ㅠㅠ
넵 감사합니다 ㅎㅎ
네~~ 그렇군요 ㅋㅋ
이와 같은 환경에서 브로드캐스팅하는 가장 간단한 방법은 어떤게 있을까요??
지금 커널이 분리되있는 상태라서;;;;
ㅠㅠ
..
방법을 고려해보려고 비슷한 환경을 만들어서 시뮬레이션을 해봤는
소켓 같은 것을 이용해서 브로드캐스팅 해주는 방법 말고는 딱히 생각나는 방법이 없군요.
nfs 서버가 실행되는 곳에서 nfs로 마운트된 디렉토리가 아니라 실제 대상 디렉토리를 감시하고
이벤트가 발생하면 각 클라이언트로 뿌려주는게 가장 간단한 방법이 아닐런지요ㅠㅠ
다른 분들이 꼭 더 좋은 의견을 내어주시면 좋겠네요ㅠㅠ
넵 아무튼 답변 감사합니다 ㅎㅎ
일딴, 정말 안될까? 궁금해했었는데, 확답주셔서 감사합니다^^
socket쓰기에는 잡일이 너무 많아질것같아서, polling 방법으로 가기로 했습니다 ;;
찾아보니.. polling 기반 filesystem monitor library도 있길래요..
그럼 수고용~ㅎ
댓글 달기