부팅 디스크 만들 때 여러가지 문제..
레드헷8.0을 플레시롬(16M : 옮기는 중에는 hdc에 꼽혀있습니다)로 부팅이 되도록 만들려고 하는데요.. 8)
The Linux Bootdisk HOWTOhttp://kldp.org/HOWTO/html/Bootdisk-HOWTO/ 을 참고해서 루트 디렉토리 다 만들어서 initrd.gz 으로 압축해 놓고..
롬을 fdisk로 파티션 만들어(부트체크했음) mke2fs로 /dev/hdc1 에 ext2로 파일시스템을 만들고요..
lilo.conf는
boot=/dev/hda image=/bz.2.4.19 label=testsystem initrd=/initrd.gz append="root=/dev/ram0 init=/sbin/init rw"
그리고 리로 실행은
# lilo -v -v -C ./lilo.conf -r /mnt
로 하고 하드 뽑고 ide0 에 롬 꼽고 재부팅을 하면..
Missing Operting System
가 되네요...
문제 1 : 부트 이미지가 /mnt 에 마운트 되어있는 hdc(hdc1)에 안올라가고 hda에 덮어 써서... 하드의 리로를 다시 깔아야 하게 됩니다.
문제 2 : 시디로 부트를 해서 linux rescue 로 들어가면.. 설치된 하드디스크가 없다고 나옵니다 :?
문제 3 : 하드로 부팅해서 /mnt 에 hdc1을 마운트 하고.. /mnt로 가서.. chroot . 하면..
chroot: cannot excute /bin/bash: No such file or directory
이 문제들을 어떻게 해결해야 할까요?
정확한 답이 아니더라도 힌트가 될만한 정보도 물론! 환영합니다 :D
(물론 회사내에서 분위기는 웃고 있을 상황이 아니지만 :roll: )
ps> 똑같은 질문을 LSN과 bbs.KLDP에 올렸습니다.
pps> 저랑 같은 질문을 가진 분이 또 있었네요.. [url]http://kldp.org/script/bbs/read.php?table=qa1&no=7066&o[sc]=a&o[ss]=%BA%CE%C6%AE%20%B5%F0%BD%BA%C5%A9&o[st]=a&o[at]=s&o[sct]=s&o[stt]=s[/url] 이 글도 답이 없습니다.. 흑~ :cry:
혹시 lilo 가 bzip2 를 쓰는지 아니면 gzip 을 쓰는지 확인해
혹시 lilo 가 bzip2 를 쓰는지 아니면 gzip 을 쓰는지 확인해 보세여
예전에 그런 경험이 있어서여..
보니까 님께서는 gzip 으로 압축을 하신것 같은데..
문제3의
chroot 를 했을 때 나오는 에러메시지의 원인은
말 그래도 /bin/bash 파일이 없기 때문에 나옵니다.
chroot 라는 실행파일이 실행 중간에 그걸 실행 하는 루틴이 있는 모양이군여..
그래도 믿지 마세여.. 전 chroot 는 한번도 않 써봤거든여..
[quote]문제3의 chroot 를 했을 때 나오는 에러메시지의
/bin 이 현재 있는 하드디스크(hda)의 /bin 인가요? 아니면 hdc에 넣을 /bin인가요? hda라면 화일은 분명히 있고요... hdc에 넣어봐도 같은 메시지 네요...
chroot는.. lilo가 날라갔을때.. =_=;;; 시디롬으로 부팅하고 하드 마운트 한 다음에 마운트 한 곳을 chroot로 루트로 지정하고 다시 lilo 하면 깔끔하게 복구 되는걸로 기억하네요.. 자주있는일이 아니라 정확히 기억은 안나지만..
----
http://poorpuppet.egloos.com
lilo.conf 를 다시 봤더니 이상한 것이 있네여...제가 님의
lilo.conf 를 다시 봤더니 이상한 것이 있네여...
제가 님의 글을 제대로 이해한 것인지 잘 모르겠지만
님께서 원하시는 것은 flash 에서 booting 이 되고
file system 은 hard disk 에 만들어 지는 것을 원하시는 거 맞나여
만약 그게 맞다면 boot=/dev/ram0 이 되야 되고
root=/dev/hda 가 되야 맞지 않을까여
==
문제 3의 그건 님께서 부팅하신 파일시스템에서의 /bin 위치겠죠..
님의 리플을 보니 멀쩡이 위치하고 있다고 하셨으니 제가 맨 처음 말한 것은
아닐지도 모르겠군여..
님의 flash 는 16M 이니 그런 경우는 발생하지 않겠지만
저 같은 경우는 4M 짜리였는데 압축을 푼 상태의 ramdisk, kernel image 사이즈가
4M 를 넘어서 안 되는 경우도 경험한 적이 있었습니다.
참고하세요~
제가 예전에 하던 삽질과 비슷한 일을 하시는 분이 계셨군요..^^;;
물론 저야;;; 아직 학생이기에 Floppy Disk 로 했었지만요....
일단 Lilo.conf 에서 좀 수정할게 있군요..
Lilo.conf 에서의 boot 는 현재 시스템의 부트 디바이스가 아니라
부팅될 디바이스를 의미하는 것이므로, /dev/hdc 가 되어야 할것입니다.
Missing Operating System 이 뜨는것은 이게 이유입니다.
LILO 가 실제로 플래쉬에 설치되지 않았기 때문이죠...
install= 부분을 빼먹으셨지만; 디폴트 이미지를 사용할테니 큰 관련은 없구요..
그리고 LILO 에서는 map 파일을 필요로 합니다. 이것 역시 디폴트가 있지만
map 파일의 디폴트가 /boot/map 이라는게 문제가 됩니다.
/boot 가 실제로 하드 디스크일텐데 하드 디스크를 빼고 테스트 할테니
아마도 LI 까지만 나오고 멈추는 현상이 발생할 것입니다.
따라서 map=/mnt/map 정도가 되어야겠죠.
(/mnt 에 /dev/hdc1 을 마운트 하신 상태겠죠..? ^^;;)
주저리주저리 쓴데다가...술 한잔 마시고 쓰고 있구....
미리 준비도 없이 온라인상에서 써서 글이 엉망진창이네요..^^;;;
간단하게, Lilo.conf 를 고쳐놓구 전 물러가겠습니다 ^^;
이 Lilo.conf 가 제대로 동작할지는 저도 장담 못하겠습니다만...
참고가 되셨으면 합니다...
이렇게 하고 lilo -v -v -C lilo.conf 하시면 됩니다..
-r /mnt 부분을 제외한 것은...
길게치는것도 그렇고..나중에 까먹기도 하는데다가 ^^;;;
lilo.conf 안에 이미 풀패스를 적었기 때문입니다 ^^;;;
아차차....문제 3의 chroot . 이 안되는 이유는
위에 분이 언급하셨다 시피.. ./bin/bash 가 없기 때문일 겁니다.
만약에 현재 디렉토리가 /mnt 라면, /mnt/bin/bash 가 있어야 합니다 ^^
PostScript) initrd 에 적는 파일은 gzip 이건 bzip2 건 관련 없습니다.
실제로 initrd 파일포맷에 관심있는것은 커널입니다. LILO 는 압축포맷이
뭐든 상관 안하고 메모리상에 그대로 로딩해서 커널에 해당 메모리 위치를
알려주게 됩니다.
답변 감사합니다 :)
그러나.. 산넘어 산이군요 ^^;
lilo를 수정해서 정상적으로(?) 부트로더를 쓰기는했는데...
부팅할때
04가 무언지! 열심히 찾아보니까 0x04 섹터 낫 파운드 라는군요..
어디에서 설정이 잘못되었는지 또 찾아봐야 겠습니다 ^^
ps> 이것저것 수정하다 보니 이제는
----
http://poorpuppet.egloos.com
참고할.. hdc1의 구조
로 되어 있습니다..
----
http://poorpuppet.egloos.com
한번 Lilo.conf 파일에 linear 를 적어서 해 보시기 바랍니다
한번 Lilo.conf 파일에 linear 를 적어서 해 보시기 바랍니다..
아..! linear 모드로 하니까.. 010101 또는 040404는
아..! linear 모드로 하니까.. 010101 또는 040404는 없어졌네요.. :)
그러나 아직도.. L 에서 멈춥니다 ㅠ_ㅠ
----
http://poorpuppet.egloos.com
L...
뭔가....가 문제가 있는거 같습니다 =_=;;
L 에서 멈춘다면...아무래도 필요한 몇몇 파일의 위치 문제가 아닐까..
싶습니다.
lilo 커맨드를 실행했을때 Warning 메세지가 뜨지 않았을까 싶은데요..
....지금보니...=_=;;;;
전단계에서 잘못 답한것도 보이네요....죄송합니다..
boot.b 파일 역시 롬에 있어야 하고...
boot= 뒤에 롬에 있는 boot.b 파일의 패스를 적어야 됩니다;;;
hdc1 의 구조를 보고 답해드린다면;;;
(역시나 hdc1 은 /mnt/ 에 마운트되어 있다고 가정합니다)
/boot/boot.b 파일을 /mnt/boot/boot.b 로 복사하고..
lilo.conf 에서 boot= 항목을
boot=/mnt/boot/boot.b
라고 적어야 될듯..
map 파일은 어떤 위치에 있을지 모르겠는데.;;;
map 파일 역시 롬에 있는지 확인해 보시구요;;;
map= 부분에 적은 패스 역시 맞는지 확인해 보세요.
(참고로, lilo.conf 에서 boot= 나 map=, install= 같은 경우에는
현재 시스템에서의 패스를 적는것입니다;)
그리고, 다른 문제가 될만한 것이라면...
아무래도 BIOS 상에서의 롬의 인식일듯 싶습니다.
현재는 /dev/hdc 지만 부팅 테스트시에는 어떤 디바이스가 될련지
모르겠네요..
하드디스크를 빼고 테스트 하신다고 했으니...BIOS 상에서의 인식에 대해서
좀 신경 써야 할듯 싶습니다.
아시겠지만;; BIOS 에서는 하드디스크를 번호로 인식하며,
보통 0x80 부터 시작해서 인식되는 순서대로 0x81, 0x82, ... 으로 붙입니다
이 번호가 중요한게, 부트로더들이 하드디스크 액세스를 할때는
BIOS Interrupt Call 을 통해서 하드디스크를 엑세스 하는데
이때 하드디스크의 번호가 필요하게 됩니다.
그래서 lilo 에서도 부트 코드상에 이런 번호를 기록하게 되는데..
lilo.conf 파일에 적힌 파일들이 실제로 어떤 디바이스에 기록되어 있는지
확인해서 해당 디바이스의 번호를 기록해 놓게 됩니다.
예를 들어서,
image=/boot/vmlinuz-2.4.19
라는 부분이 있다면, /boot/vmlinuz-2.4.19 파일이 실제로 어떤 디바이스에
적혀 있는지 찾아서 해당 파일을 액세스 할때 몇번 디바이스에서 찾아야 한다
라고 적어놓게 됩니다.(이 역할을 하는 파일이 map 파일인듯...)
하드디스크의 번호를 결정하는게 lilo.conf 파일을 보고 결정하게 되기에...
lilo 커맨드를 실행할때와 실제로 부팅할때의 하드디스크 구성이 틀리다면
해당 파일들을 적절히 읽어들일수 없어서 부팅될수 없습니다..
물론, 방법이야 있죠....
man lilo.conf 해 보시면 초반부에
disk= 라는 섹션의 설명이 있습니다..
여기 적힌대로...
lilo.conf 파일 초반부에 이렇게 적으면 되지 않을까..싶습니다만,
롬을 BIOS 상에서 어떤 번호로 인식할지 알수가 없네요...
일단은 =_=
무엇보다도 성의 있는 답변 감사합니다 ㅠ_ㅠ 그러나.. 무엇이 문제인지 적어주신 대로는.. 잘 안되는군요 ;;
일단은 다른 방법으로 커널은 통과 했습니다! >_<
lilo를 하드디스크의 MBR을 써서.. 부트 위치를 /dev/hdc1으로 설정 하고.. 부팅 시켰죠..
아무튼 커널은 성공적으로 로딩 됬습니다.... 루트 이미지를 읽고 나서
메시지가 나오는걸 해결 중입니다.. :roll:
이것도 많은 도움이 필요할꺼 같네요.. 성공할때까지 같이 관심 가져 주실분 계신가요 :)
----
http://poorpuppet.egloos.com
댓글 달기