물론 그냥은 불가능 할 것입니다.
제 수준에서는 ATA/ATAPI 커맨드를 이용하여 장치의 정보를 읽어오는 방법을 생각할 수 있겠습니다.
물론 파티션 정보와 같은 것은 파티션 테이블에 해당하는 어드레스 영역을 읽어와 분석하는 방법을 써야하겠고요.
(sfdisk, statfs, vstatfs 등이 어떻게 구현되어있는지는 모르겠습니다만, 더나은 방법이 있을지도 모르겠네요)
linux 환경에서라면 ioctl 을, windows 환경에서라면 winioctl 을 사용하여 장치에 ATA 커맨드를 날려줄 수 있습니다.
당연히 파일시스템을 거치지않고 LBA로 접근하기 때문에 마운트하지 않은 장치라도 상관없고요.
다만 문제는 ATA 커맨드셋과 그에 따른 커맨드 블락 레지스터의 셋팅을 알아야하기 때문에, ATA 인터페이스에 대한 지식이 없이는 어렵다는 것이...
블럭 디바이스를 직접 read() 할겁니다.그다음 파티션 테이블을 분
블럭 디바이스를 직접 read() 할겁니다.
그다음 파티션 테이블을 분석하죠.
하드 대응 블럭 디바이스를 read()하게 되면 바로 하드에 접근하게 되니까요.
Written By the Black Knight of Destruction
ㅜㅜ 너무 어렵군요.죄송 합니다만 약간만 더 자세히 알려 주실수 없나
ㅜㅜ 너무 어렵군요.
죄송 합니다만 약간만 더 자세히 알려 주실수 없나요?
/dev/hd..... 을 직접 read할수 있나요???
/dev/hd..... 을 직접 read할수 있나요???
최신 리눅스 배포판중 udev를 쓰는 경우는 udev가 이 기능을 수행해
최신 리눅스 배포판중 udev를 쓰는 경우는 udev가 이 기능을 수행해서,
하드디스크가 있는데 파티션이 없는 경우는 /dev/hda1 /dev/hda2같은
파일이 없다가도, 파티션을 만드는 즉시 /dev/hda1 /dev/hda2 파일들이
생기더군요.
sfdisk, udev소스를 보시면 힌트가 나올지도..
물론 그냥은 불가능 할 것입니다.제 수준에서는 ATA/ATAPI 커맨
물론 그냥은 불가능 할 것입니다.
제 수준에서는 ATA/ATAPI 커맨드를 이용하여 장치의 정보를 읽어오는 방법을 생각할 수 있겠습니다.
물론 파티션 정보와 같은 것은 파티션 테이블에 해당하는 어드레스 영역을 읽어와 분석하는 방법을 써야하겠고요.
(sfdisk, statfs, vstatfs 등이 어떻게 구현되어있는지는 모르겠습니다만, 더나은 방법이 있을지도 모르겠네요)
linux 환경에서라면 ioctl 을, windows 환경에서라면 winioctl 을 사용하여 장치에 ATA 커맨드를 날려줄 수 있습니다.
당연히 파일시스템을 거치지않고 LBA로 접근하기 때문에 마운트하지 않은 장치라도 상관없고요.
다만 문제는 ATA 커맨드셋과 그에 따른 커맨드 블락 레지스터의 셋팅을 알아야하기 때문에, ATA 인터페이스에 대한 지식이 없이는 어렵다는 것이...
훗, 못 믿겠나?
primary master 에 파티션이 두개인 하드를 끼워서 보니/d
primary master 에 파티션이 두개인 하드를 끼워서 보니
/dev/hda /dev/hda1 /dev/hda2
이렇게 블럭 파일이 있었고 지금은 빼논 secondly slave 는
hdd1 hdd2 hdd3는 없고 hdd파일만 그대로 남아 있네요.
각각의 디스크립터를 read 했는데 내용은 안나오네요.
감사합니다. 참고할께요.
/dev/hda /dev/hdb .../dev/sda /dev/sdb
/dev/hda /dev/hdb ...
/dev/sda /dev/sdb ...
이들 블럭 디바이스의 처음 512바이트를 읽습니다
(512byte=1sector이기 때문에 가장 앞에 있는 섹터 즉, MBR을 읽죠)
그러면 Primary Partition Table을 얻을 수 있습니다. 위치는 다들 아시겠죠.
Extended Partition은 Primary에서 존재여부 확인합니다.
내부 논리 파티션은 Extended Partition 내에서 Linked List
형식으로 연결되어 있기 때문에 이들 정보를 다 찾아서
뿌려줍니다.
/dev/hda1, /dev/hda2 이들은 디스크가 아닌 각 파티션에 대응하기 때문에
굳이 찾을 필요 없습니다. 첫번째 512바이트는 파티션의
첫번째 섹터가 되고요. 파티션 위치 계산하기 귀찮다면
이렇게 해도 될거 같네요.
그리고 존재하는 디스크 정보는... /proc 파일시스템을 뒤지면 나올 거 같네요.
Written By the Black Knight of Destruction
그냥 /proc/partitions 에 있는 내용을 적절히 파싱하면 됩니
그냥 /proc/partitions 에 있는 내용을 적절히 파싱하면 됩니다.
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
Filesystem 및 BootActive 같은 것은 뽑을수 없잔아요.
Filesystem 및 BootActive 같은 것은 뽑을수 없잔아요.
댓글 달기