[질문]파일시스템의 메타데이터 읽어들이기
원본적인 질문을 드리겠습니다.
만약 hda1 : root(ext2) , hda5 : swap , hda6 : home(ext2) , hda7
이렇게 파티션을 나눴다고 가정하고
hda7에 mkfs를 해서 ext2 FS를 포맷했다면
이 디스크 파티션상의 맨 첫번째 블록은 부트영역인가요?
아님 첫번째 블록그룹에서의 수퍼블록인가요?(책에서는 당근 부트블록이다만...제 생각엔 root 파티션에만 부트블락이 있으면 충분할 것 같아서...)
만약 4096bytes/block이라면
전자의 경우 한섹터(512bytes)만 부트영역일까요?아님 한블록이?
후자라면 한 블록이 수퍼블록이겠죠...
후자라면
fd=open("/dev/hda7", O_RDONLY);
read(fd, buf, 4096);
한다면
수퍼블록 한블록을 읽어들이는게 맞나요?
그렇다면 ext2이므로
4bytes total number of inodes
4bytes filesystem size in blocks
4bytes number of reserved blocks
4bytes free blocks counter
4bytes free inodes counter
등등...
이런 순서로 각 필드값이 buf에 저장되었겠지요?
그러면
위의 buf에 저장된 데이터를 어떤 파일에 저장한 뒤에
그 파일로부터 4bytes씩(어떤 필드는 2bytes 또는 1byte씩)읽어서
그것을 10진수로 출력해주면 해당 필드값이 되지 않을까요?
그리고 hda6에도 hda7처럼 FS정보가 잡히겠죠?
첫번째 블록이 부트영역일지? 수퍼블락일지?
부탁드립니다.
감사합니다.
답변좀 해주셔요...ㅠㅠ부탁드립니다.
답변좀 해주셔요...ㅠㅠ
부탁드립니다.
그렇게 어렵지는 않습니다.
각 디스크 대응 장치파일에 open()으로 직접 접근해서
read(), write(), seek() 하고 close()로 끝내면 됩니다.
fopen(), fread() 같은 라이브러리함수 써도 되고요.
그리고 대부분 디스크에서는 첫번째 섹터의 경우 부트블록이 오는 게 관례화
되어 있습니다(부트디스크 아닐때는 쓰레기 값이나 딴걸로 채워져 있죠)
슈퍼블록 찾는 방법은 파일시스템 포맷과 관련된 문서를 찾아보셔야
할겁니다.
Written By the Black Knight of Destruction
댓글 달기