linux inode에 직접 데이터를 기록하고 싶은데 어떻게 접근을 해봐야 할지....
글쓴이: requiemduke / 작성시간: 목, 2013/09/12 - 5:28오전
linux ext2 파일시스템에서 inode에 제가 필요로 하는 정보를 기록하고 싶은데
어떤 방법으로 접근을 시도해야 할지 감이 잡히지가 않습니다.
파일을 생성하는 cp 소스나 다른 소스들을 참고하여도 쉽지가 않네요.
혹시 위의 작업과 비슷한 작업(인위적으로 물리적 디스크의 원하는 위치에 데이터를 기록)을 해보신적이 있으시면 도움을 좀 주셨으면 합니다.
Forums:
e2fsprogs 패키지에 포함되어 있는
e2fsprogs 패키지에 포함되어 있는 debugfs를 이용하면
특정 파일의 아이노드번호 및 그 실제위치의 블록번호와 블록내의 오프셋까지 알려주는군요.
debugfs는 ext2/3/4에 대한 다양한 저수준의 조사/조작 명령을 제공하는데,
그중 imap 명령은 위와 같이 파일경로로부터 inode 정보를 찾아주고
modify_inode 명령은 inode 내용물을 변경하는 일도 해줍니다.
원하시는 바가 위 기능으로 해결 가능하다면 이것을 쓰시면 되겠고,
아니면 imap 명령으로 inode의 실 위치가 정확히 파악 가능하므로
블록장치(예: /dev/sda1)를 열어서 직접 내용물을 변경하실 수도 있겠죠.
debugfs에 의존하지 않으려면 debugfs 소스로부터 필요한 부분을 가져다 쓰실 수도 있겠고요.
/usr/include/linux/ext2_fs.h 을 보시면 디스크상의 ext2 아이노드 구조체가 있으므로
코딩할때 참고가 될 것입니다.
다만, 혹시 마운트된 파일시스템에 대해서 이런 변칙적인 접근을 하시려는 것이면
imap처럼 읽기만 하는 동작까지는 괜찮겠지만
modify_inode처럼 변경을 가하는 순간부터
파일시스템의 일관성을 깨뜨리는 결과가 생길 수 있으니 조심하시고요.
감사합니다.
댓글이 늦어서 죄송합니다.
정말 큰 도움이 되었습니다.
추석 잘 보내시길바랍니다.
댓글 달기