마운트 안된 디스크 정보도 가져오는 함수가 있나요?

hiscom의 이미지

즉, 시스템에 연결되어 있는 모든 하드디스크의 정보를 가져와야하는데요.

sfdisk -l
같은 기능이 필요합니다.
있으면 함수와 간단한 사용법좀 알려주세요.

ps. statfs(), vstatfs() 는 마운트된 디스크의 정보만을 가져오더라고요.

Necromancer의 이미지

블럭 디바이스를 직접 read() 할겁니다.
그다음 파티션 테이블을 분석하죠.

하드 대응 블럭 디바이스를 read()하게 되면 바로 하드에 접근하게 되니까요.

Written By the Black Knight of Destruction

익명 사용자의 이미지

ㅜㅜ 너무 어렵군요.
죄송 합니다만 약간만 더 자세히 알려 주실수 없나요?

익명 사용자의 이미지

/dev/hd..... 을 직접 read할수 있나요???

익명 사용자의 이미지

최신 리눅스 배포판중 udev를 쓰는 경우는 udev가 이 기능을 수행해서,

하드디스크가 있는데 파티션이 없는 경우는 /dev/hda1 /dev/hda2같은
파일이 없다가도, 파티션을 만드는 즉시 /dev/hda1 /dev/hda2 파일들이
생기더군요.

sfdisk, udev소스를 보시면 힌트가 나올지도..

elien의 이미지

물론 그냥은 불가능 할 것입니다.
제 수준에서는 ATA/ATAPI 커맨드를 이용하여 장치의 정보를 읽어오는 방법을 생각할 수 있겠습니다.
물론 파티션 정보와 같은 것은 파티션 테이블에 해당하는 어드레스 영역을 읽어와 분석하는 방법을 써야하겠고요.
(sfdisk, statfs, vstatfs 등이 어떻게 구현되어있는지는 모르겠습니다만, 더나은 방법이 있을지도 모르겠네요)

linux 환경에서라면 ioctl 을, windows 환경에서라면 winioctl 을 사용하여 장치에 ATA 커맨드를 날려줄 수 있습니다.
당연히 파일시스템을 거치지않고 LBA로 접근하기 때문에 마운트하지 않은 장치라도 상관없고요.
다만 문제는 ATA 커맨드셋과 그에 따른 커맨드 블락 레지스터의 셋팅을 알아야하기 때문에, ATA 인터페이스에 대한 지식이 없이는 어렵다는 것이...

훗, 못 믿겠나?

익명 사용자의 이미지

primary master 에 파티션이 두개인 하드를 끼워서 보니
/dev/hda /dev/hda1 /dev/hda2
이렇게 블럭 파일이 있었고 지금은 빼논 secondly slave 는
hdd1 hdd2 hdd3는 없고 hdd파일만 그대로 남아 있네요.

각각의 디스크립터를 read 했는데 내용은 안나오네요.

감사합니다. 참고할께요.

Necromancer의 이미지

/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

ganadist의 이미지

그냥 /proc/partitions 에 있는 내용을 적절히 파싱하면 됩니다.

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

익명 사용자의 이미지

Filesystem 및 BootActive 같은 것은 뽑을수 없잔아요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.