AIC-7xxx SCSI 컨트롤러와 SMP의 궁합
안녕하세요, 데뱐으로 전환후에 열심히 커널 컴파일 하고 있습니다.
설치할 서버가 대용량 메모리(4G)와 멀티프로세서(4x)로 인하여 최고의 성능을 내 주려면, 2.4.x대의 커널 이상을 써야 할 것 같습니다.
그래서 2.4.22를 컴파일 중에 SCSI모듈 부분에서 에러가 나더군요.
SCSI 컨트롤러는 Adaptec AIC-7899입니다.
그래서 데뱐유저그룹과 적수네동네 등등을 돌아다니며 정보를 수집한 결과
AIC-7xxx SCSI 모듈은 SMP 옵션으로 컴파일하면 오류가 나는 증상이 있다는 발견했습니다 -,.-;
그리고 debian패키지 중에, kernel-patch중 adaptec aic-7xxx 패치도 발견했습니다. 그러나, 2.4.x대는 패치를 해도 오류가 뜨고, 2.2.x대는 패치를 하면 컴파일은 되는데, 계속 kernel panic.. SCSI컨트롤러를 못찾네요.. 패치가 패치 역할을 제대로 못해줍니다. smp옵션용 패치는 아닌가 봅니다.
시도해본 버전만 해도 2.2.19, 2.2.25, 2.4.10, 2.4.18, 2.4.22 까지 헉헉헉..
그런데 신기하게도, 와우 파란 7.1(kernel-2.2.17)로 깔면 SMP지원해주고 AIC-7899도 잘 지원해주는군요. 물론 이것은 커널컴파일이 아니라 디폴트 세팅의 경우입니다. 컴파일만 하면 에러가 납니다. 그대로 쓰고 싶지만, 그대로 쓰면 메모리를 1G밖에는 못쓰니 환장하죠.
어떻게 컴파일을 하면, SMP + AIC-7899 인식이 가능할까요?
데비안은 아닙니다만 래드햇에서 커널 2.4대에 aic-7xxx 스카시 모
데비안은 아닙니다만 래드햇에서 커널 2.4대에 aic-7xxx 스카시 모듈을 컴파일 한적이 있습니다.
어떻게 하니까 되었드라... 가 아니라 어찌어찌 하다보니 그냥 되더군요... :oops:
SCSI 관련 커널 컴파일 옵션을 모두 <M>으로 설정하고 initrd를 만들었던것으로 기억합니다.
혹시나 해서 올립니다. 이것저것 해보시고 결국 안되시면 한번 해보세요... (속는셈 치고 한번...) :wink:
해결되시면 어떻게 해결되었는지좀 가르쳐 주세요~
^^*
??
아무런 문제가 업는데요.
모듈이 아닌 그냥 커널에 때려 넣으시면 됩니다.
전혀 문제없습니다.
또한 부트이미지가 있는 곳은 모듈로 넣으면 initrd로 만들어주지 않으면
안되는건 당연한거 아닌가요? (제가 잘못아는 건지도)
결론은 아무런 문제없습니다. 입니다.
만세
initrd 로 만든다는건 어떻게 하는 건지요?
제가 쓰는 서버의 사양이 딱 맞네요. 커널 버전까지...
저도 처음엔 스카시 부분을 모듈로 했습니다만 그럴 경우 부팅이 되지 않아
지금은 항상 커널에 포함시켜 컴파일 합니다.
그런데 모듈로 쓸 경우에는 initrd 를 쓰면 된다는 소리에 눈이 번쩍 뜨이네요.
그건 어떻게 쓰는건지, 아니면 어디에 가면 정보를 알 수 있는지라도 알 수
없을까요? 저는 컴파일 할 때 항상 make install ; make modules ;
make modules_install 한 후 /etc/lilo.conf 를 손보는 걸로 끝내거든요.
initrd 라, /etc/lilo.conf 에서 보긴 했지만 /boot 에 실제 생성되진 않던데
말입니다. 배포판의 커널을 깔면 있긴 하지만 말이죠.
음... 저도 그냥 커널에 때려 박으면 된다고 생각했었는데요.컴파
음... 저도 그냥 커널에 때려 박으면 된다고 생각했었는데요.
컴파일시 에러가 나거나 컴파일이 된후에 리부팅할때 SCSI 장치를 찾지 못하더군요.
그래서 SCSI 와 aic-7xxx 드라이버를 모듈로 컴파일하고 initrd를 사용해보니 돼었구요.
저도 왜 그런지 잘 모르겠구... 그냥 하다보니 그런 상황이 있었다는것만 말씀드리는 거지요... :oops:
initrd 파일 만드는 법은 레드헷일 경우 mkinitrd란 스크립트가 있더군요.
레드헷이 아닌 경우는 잘 모르겠습니다.
^^*
답을 알아냈습니다 -_-;
답을 알아냈습니다.
자문자답이네요.. 하루만의 밤샘끝에... -_-;
커널 2.4.18 기준으로 설명하겠습니다. 사용하는 배포판은 데비안 woody 입니다.
1. 일단 AIC-7xxx류의 SCSI 컨트롤러들은 config중에 다음과 같은 탭이 있습니다.
이탭을 체크하면, 커널 컴파일중에 에러가 뜨면서 컴파일이 멈춰버립니다.
따라서 이탭을 체크하지 않습니다.
2. 커널에 포함시켜서 컴파일하고, 리부트하면
SCSI장치는 잘 인식합니다. 일단은 절반은 성공입니다. 그러나
라는 오류가 뜨면서, 루트 파티션을 찾지 못하고 Kernel Panic입니다.
3. 그래서 SCSI장치들은 모두 모듈로 놓고 컴파일하고 initrd를 안쓰고 리부팅하면 다시 2와 똑같은 증상.
4. SCSI장치를 모듈로 놓고 initrd를 이용하여 재부팅하면, 별 이상없이 부트에 성공합니다.
----------------------------------------------------------------
하루밤샌 삽질기였습니다.
도움이 되기를 바랍니다.
No Pain, No Gain.
initrd 만들어 봤습니다.
initrd는 부트로더로 로드되는 램디스크입니다.
그 내부도 소형 리눅스 배포본이나 다름 없고요. /sbin/init을 축으로 해서
여러 개의 스크립트나 프로그램이 돌아가게 되어 있습니다.
배포본이라면 커널모듈 적재니까 /sbin/init외에 modprobe같은 모듈
적재 프로그램과 몇몇 커널 모듈, 이들을 수행시키는 쉘, 스크립트 정도가
들어 있고요.
직접 만드는 방법이라면, 여기에 bootdisk-HOWTO문서가 있으니
그것을 응용해 보시기 바랍니다. 물론 리눅스 처음 하시는 분이라면
매우 까다로운 작업입니다.
Written By the Black Knight of Destruction
참 그리고...
몇몇 드라이버 모듈들이 /를 참조해야 하는 경우가 있다 합니다.
제 추측인데, initrd로 부트하지 않으면 AIC-7xxx 모듈이 제대로 동작하지 않는 이유는 /를 마운트하기도 전에 모듈이 /를 참조해서 그런것 같습니다.
(사실 모듈이 이러면, SCSI로 부트 못하는 낭패가 발생)
그래서 initrd로 램디스크에 /를 생성해서, 모듈들이 그것을 참조하게 하는것 같습니다.
initrd의 전번적 지식은 없지만, 이번 경우에는 다음과 같이 손쉽게 initrd로 부팅하게 할수 있습니다. initrd에 대해서 잘 모르시는 분은 따라하시면 됩니다.
1. 커널 컴파일 할때, initrd지원, ramdisk지원 탭이 있는데 이것 꼭 체크해주세요, 안해주면 낭패.
2. 일단 커널 컴파일하고 모듈 설치까지 끝내줍니다.
3. 로딩하려는 모듈이 있는 디렉토리가 /lib/modules/2.4.18 이고, /boot/imagename 이 원하는 initrd 이미지라면,
/sbin/mkinitrd -o /boot/imagename /lib/modules/2.4.18
의 명령으로, 새로운 부트 이미지 생성할수 있습니다.
4. lino.conf
에서 원하는 부트 이미지 부분에서
initrd=/boot/imagename
로 주어진 이미지를 사용해서 부트하도록 지시합니다.
5. lilo 를 업데이트한 후 리부트합니다.
No Pain, No Gain.
댓글 달기