[완료]usb 부팅에 관한 질문입니다. 도와주십시요.

kwonsu의 이미지

안녕하세요. 더운 여름 수고많으십니다.
다름이 아니라 usb로 부팅하려 하는데요. usb를 linux가 설치된 컴퓨터에 꽂아두고 설치하는 방법 말고 이미지를 생성하여 usb에 이미지를 써서 부팅하고 싶습니다.
삽질을 해도 google을 해도 도무지 답이 안나와 이렇게 질문드립니다.

linux 환경은 centos 4.5 에서 했습니다.

우선 작업내용은 이렇게 했습니다.
1. dd if=/dev/zero of=test.img bs=1M count=995 --> 1G usb 사용목적
2. fdisk -b 512 -C 1012 -H 33 -S 61 test.img --> 파티션 생성
( 10M는 FAT16, 나머지는 리눅스 )
3. install-mbr test.img --force --> mbr 설치
4. rootfs 이미지 생성
5. losetup -o 31232 /dev/loop0 test.img --> 옵셋으로 첫번째 파티션을 loop device에 연결
6. mkdosfs -F 16 /dev/loop0 --> mkdosfs을 이용하여 dos 파티션 생성
7. losetup -d /dev/loop0 --> loop device 해제
8. syslinux -o 31232 test.img --> 부트로더 설치
9. losetup /dev/loop0 test.img
10. /sbin/losetup -o 31232 /dev/loop1 test.img
11. /sbin/losetup -o 11337216 /dev/loop2 test.img
12. mke2fs -j /dev/loop2
13. /etc/mtools.conf 파일에 추가
drive e: file="/dev/loop1" exclusive mformat_only
14. mcopy rootfs파일 e:
15. mcopy syslinux.cfg e:
16. mcopy display.txt e:
17. mcopy 부트이미지 e:
18. losetup -d /dev/loop0
19. losetup -d /dev/loop1

물론 syslinux.cfg는 설정을 알맞게 설정했습니다.

이렇게 하여 usb에 이미지를 쓰고 난 후 부팅하면

MBR
Boot failed

이렇게 나옵니다.

참고로
위 작업순서에서 mformat 는 loop device를 지원하지 않아서 생략했습니다.
mkdosfs를 실행하면 "Loop device does not match a floppy size, using default hd params" 이런 메시지를 출력합니다. 물론 위 메시지로 검색하였으나 뚜렷한 해결을 봤다는 내용은 못찾았습니다. ㅡㅡ;
mkfs.vfat, fsck.msdos등 dos fs 명령을 사용하여 해도 똑같은 결과를 얻었습니다.
syslinux 명령도 'syslinux -s /dev/loop0' 이렇게 하였으나 부팅 결과는 마찬가지 였습니다.

제가 판단하기론 mformat와 mkdosfs가 loop device에서 제대로 동작하지 않아 syslinux명령을 이용하여 부트로더를 설치하였으나 인식하지 못하고 부팅에 실패한것으로 생각됩니다.

이런 문제를 어떻게 하면 화끈하게 문제를 해결할 수 있을지 여러분의 고견을 부탁드립니다.

bushi의 이미지

임의로 정해준 CHS 값이 실제의 CHS 값과 틀리기 때문인 것 같습니다.
losetup, syslinux 에 사용된 offset 값도 틀려질테지요.

차라리... 남들 하는 대로 만드셔서 설치 테스트까지 다 마친 뒤에

dd if=/dev/??? of=/tmp/usb_image.bin bs=1M count=995 

처럼 해서 이미지를 뽑아내세요.
만드실 때 사용한 것과 같은 용량의 USB 메모리라면 대부분 공통적으로 사용할 수 있으리라 추측됩니다.

OTL

kwonsu의 이미지

위에서 CHS값은 태스트 중인 USB에서 지접 fdisk를 이용하여 값을 확인한 값입니다.
저도 처음에는 실제 USB에 위 과정과 비슷한 과정으로 부팅가능하도록 한 다음 img만을 뽑아 만들었습니다.
이 방법 이외 USB없이 이미지로만 만들수 있는 방법이 있나 해서 질문드렸습니다.
아직도 어찌해야 할지.. 머리만 아프네요. ㅡㅡ

지식의 여인은 옷을 쉽게 벗지 않는다.
하지만 보고싶다. ㅡㅜ 아.. 통재라~~~.

지식의 여인은 옷을 쉽게 벗지 않는다.
잡초인생. 잡초처럼 끈길기게....

bushi의 이미지

할 거 다 해보셨군요. 그럼 간단합니다.

이미지를 만들어서 USB 메모리에 기록한 다음, 그놈을 PC 에 다시 꽂고.

fdisk -l /dev/???
로 파티션 정보가 제대로 나오는지.

mount /dev/???1 /some/where_fat
mount /dev/???2 /some/where_ext2
로 마운트가 잘 되는 지.

/some/where_fat
/some/where_ext2
에 있어야 할 파일들이 잘 있는지.

셋 중 어느 하나라도 이상하다면,
실제로 USB 메모리를 연결해서 만든 놈과 test.img 를 비교해야 합니다.

dd if=/dev/??? of=/tmp/mbr_real bs=512 count=1
dd if=test.img of=/tmp/mbr_img bs=512 count=1
로 MBR을 뽑아서 비교하시고.

dd if=/dev/??? of=/tmp/offs_XXXX_real bs=512 count=4 skip=`expr XXXX / 512`
dd if=test.img of=/tmp/offs_XXXX_img bs=512 count=4 skip=`expr XXXX / 512`
로 losetup,syslinux 에서 사용한 각 offset 들을 뽑아서 비교하시고.

ext2 는 그렇다치고, fat 파티션의 FAT,root,data 영역을 뽑아서 보셔야합니다.
mkdosfs 가 제대로 됐나 확인하려면요. 위치는 문서를 참고해서 계산해야지요.

OTL

kwonsu의 이미지

일단 마운트는 잘 됩니다.
dd 명령으로 뽑은 것을 어떤 방법으로 비교하는지, fat 파티션의 FAT,root,data 영역은 어떻게 뽑는지 제가 참조할수 있는
문서 링크라도 한번 걸어주신다면 정말 고맙겠습니다.
참고로 뽑은 파일을 diff로 비교는 해봤는데 이상이 없더군요
혹시나 mformat, mkdosfs명령을 loop device에서 정상 사용할수 있는 방법은 있는지 궁금합니다.
답변주셔서 감사합니다.

지식의 여인은 옷을 쉽게 벗지 않는다.
하지만 보고싶다. ㅡㅜ 아.. 통재라~~~.

지식의 여인은 옷을 쉽게 벗지 않는다.
잡초인생. 잡초처럼 끈길기게....

bushi의 이미지

FAT 파일시스템에 대한 문서는 MSDN 에서 찾을 수 있습니다.
(전에 찾아서 봤었습니다. 다시 찾으려니 살짝 귀찮네요.)

binary diff 는 cmp 를 이용하시면 편합니다. diff 로도 다르다/같다 정도는 문제없이 파악됩니다.
자세한 분석을 하려면 ghex2 나 khexedit 으로 일일히 눈으로 보며 해야하지만요.

mkdosfs 에 CHS 값을 지정할 수 있는 옵션이 없으므로... 좀 힘들 것 같습니다.
CHS 값은 root dir 영역의 위치, data 영역의 위치를 결정하는 데 사용됩니다.

이미지로 만든 USB 메모리가 리눅스에서 제대로 마운트 된다니 큰 문제는 없는 것 같네요.
부팅이 왜 안되는 걸까요 ?

비교는 "실제로 부팅이 되는 USB 메모리" 와 하신 거 맞죠 ?

MBR 이 동일하고,
FAT 파티션의 PBR 도 동일하고,
FAT 파티션에 있어야 할 파일들만 잘 있다면... 되야하는데요.

OTL

kwonsu의 이미지

저도 그래서 여쭤본겁니다.
실제 USB 메모리에서 지금도 아무런 문제 없이 부팅하고 동작도 잘 하는데 말이죠
위 작업을 실제 USB에 넣지 않고 img로 만들고 USB에 부어서 부팅하면 안되는 이 현상이 이상하게 생각됩니다.
구글링이나 기타 검색엔진으로 UBS 부팅 관련 문서를 참조해서 만들었는데 안됬습니다.
한가지 걸리는게 있다면 USB메모리에서 mkdosfs나 mformat수행은 무리없이 잘 되는데 img로 만든 파일의 FAT파티션은
mkdosfs나 mformat를 수행하면 올바로 수행이 안된다는 것을 확인했습니다. 찾아본 많은 문서들은 mkdosfs나 mformat가 수행되는것으로 되있지만 말이죠. 제가 의심한 부분이 mkdosfs나 mformat가 수행이 되지 않아서 MBR까지는 읽는데 부트로더가 로딩하지 못하는것 같습니다.
mkdosfs를 수행한 후 메시지는 이렇게 나왔습니다.

Loop device does not match a floppy size, using default hd params

mformat는 loopback device에서는 아예 동작하지 않더군요

그래서 가지고 있는 시스템에 dosfstool, mtools 최신버전으로 설치해보려 했으나 현재 시스템에서는 rpm이나 소스컴파일이 되지 않았습니다.

일단 img파일을 USB에 부어서 부팅해본 후 실패가 됬습니다. 이 후 USB메모리에 FAT파티션 부분을 모두 삭제하고 USB FAT부분을
부팅하게끔 설정하여 시도해보니 부팅이 성공하더군요.
답변 주셔서 감사합니다.

지식의 여인은 옷을 쉽게 벗지 않는다.
하지만 보고싶다. ㅡㅜ 아.. 통재라~~~.

지식의 여인은 옷을 쉽게 벗지 않는다.
잡초인생. 잡초처럼 끈길기게....

kwonsu의 이미지

게시판이 안지워지네요. ^^ 죄송...

지식의 여인은 옷을 쉽게 벗지 않는다.
잡초인생. 잡초처럼 끈길기게....

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.