커널 크기를 극도로 줄이고 싶은데요...( 혹은, 가장 작은 리눅스는 ? )

ukyoukyo의 이미지

커널 크기를 극도로 줄이려고 합니다.

커널이 최소한의 메모리만 먹게끔 하려구요.

SATA를 지원해야하는 조건이 있어서, 바닐라 커널 2.6.x 을 받아서 리빌드를 하고 있는데,

make menuconfig 에서 반드시 선택해야하는 항목은 어떠한 것들이 있는지요 ?

(좀 무식한 생각이지만), file system, 키보드, 마우스... 이정도만 남기고 모두 선택안하면 될까요 ??

커널 크기를 최소화하여 빌드해 보신분들의 힌트를 부탁드립니다.

힘들다면, 소스가 공개된 2.6.x 이상의 작은 리눅스를 알려주셔도 됩니다...

hohheup의 이미지

전 아치리눅스에서 3.0.4 버전을 쓰고 있는데요.
커널 크기 줄이는건 menuconfig에서 다량의 삽질이 필요해요. 전 nconfig를 쓰지만 기능은 같죠..

가장 편한방법은 현재 로드되어 있는 모듈만 자동으로 선택하게 하고 그 외의 대부분은 선택안되게 하는 옵션이 있어요.
그 옵션을 해도 자동으로 로드되는 불필요한 것들이 있죠. 예를 들면 cpu의 코어수는 처음에 몇십개 단위로 되어있어요. 전 2개인데. 얼마 안되지만 메모리를 잡아먹죠. GPU 코어수도 그렇고요. 그리고 현재 당장은 쓰지 않는 ipv6랑 제컴에서는 안쓰는 irda, joystic, kvm 가상화 지원, pcmcia, 그리고 현재 컴에 설치되어 있지 않은 수많은 vga 드라이버, 네트워크 드라이버, 사운드 드라이버, 커널최적화는 끝이 없지만, 보람은 있어요.

중요한 건 정말 확실한 것만 수정해야 한다는 거죠. 잘못 건드리면 커널 패닉. 부팅이 안되요. 그럴땐 원래 커널로 부팅해서 다시 컴파일. 완전 노가다죠.
혹은 필요한 모듈을 지웠을 경우 그 기능을 다시 컴파일 하기 전까진 못쓴다는 거죠. 예를 들어 fuse 모듈을 선택안한 상태로 컴파일 하면 ntfs 를 마운트할 수 없어요.

현재 로드되어 있는 모듈만 첨에 자동으로 선택되기 때문에 커널 컴파일 하기 전에 필요한 모든 모듈을 로드하세요. 잘 모르시겠으면 필요한 모든 작업을 하는거죠.
저같은 경우엔 ntfs를 마운트해야 하니 fuse를 로드해야 하는데 modprobe fuse 해도 되고 mount /dev/sda6 /mnt/tmp 이렇게 해도 되고요. 원격에 있는 윈도우 공유폴더를 마운트 할 필요도 있어서 cifs 모듈도 필요하고요. usb 스토리지도 마운트해야 하니 usbstorage, usb 마우스도 인식해야 하니 HID였나? 이것도 로드해야 하고요.

저같은 경우 core2duo 1.8G 에서 커널최적화를 안했을때는 컴파일 타임이 몇시간이지만 최적화했을땐 10~20분정보만 걸린답니다. 물론 빌드자체를 조금하기 때문에 크기는 작고요. 물론 메모리도 최소만 먹습니다.

그리고 속도에 관련한 가장 중요한건 cpu 타입지정입니다. 사실 이것만 해서 컴파일 해도 속도가 좀 빨라지죠. 하지만 메모리를 줄이시려면 커널에 포함되는 cpu, gpu코어수나
모듈이지만 자동으로 로드되는, ipv6나 joystic 것과 같은 녀석들을 손봐야 하죠. 어차피 필요없는 것들을 하나씩 선택해제하다보면 줄어듭니다.^^

삽질이지만 보람이 있어요 ㅋ^^

아 그리고 리눅스는 같은 커널을 공유하기 때문에 배포판에 따라서 커널 크기가 크게 달라지는 것 같진 않습니다. 물론 커널을 작게 수정한 배포판도 있지만 그만큼 기능들을 희생한것이기 때문에..

직접 님이 불필요한 것들을 지우는 것이 가장 좋고 충분히 작고 빠릅니다.

어떤 배포판을 쓰시는진 모르겠지만 linux-ck 라는 게 있답니다. 이걸로 빌드하면 위의 옵션을 쓸 수 있어요. 다른 옵션도 있고요. 다른 좋은 것도 있겠지만 잘 몰라서 그냥 제가 쓰는걸 ^^

익명 사용자의 이미지

임베드시스템이 아닌바에야 극도로 줄인다고 해서 그다지 효과가 없습니다.
그냥 배포판에서 배포하는데로 올리는게 정신건강상 좋지요.
커널 옵션 줄이는 기술은 윗분이 말씀하신 대로 그야말로 state of art입니다.
그렇다고 별로 남는게 없으니 작심하지 않으면 시도하는 것 자체가 사실 별 엄두가 안나죠.

Orb의 이미지

지나가던 초보인데 북마크 해둔 글이 있어 올려봅니다.
http://sirjhswin.tistory.com/346
에 작은 리눅스 6종이 소개되어 있는데, 배포판 이름이 링크입니다....
주분투는 이미 아실테고....주분투와 비슷한 급으로 루분투도 있는데, 이것도 꽤 알려졌으니 아실 듯 하고...
주분투를 제외하면 초소형급 리눅스들인 듯..외에도 찾아보면 더 나오겠지요...

퍼피리눅스는 좀아까 우연히 보게 되었는데, 커널 3 이상까지 나왔나 보더군요.... 데비안 커널은 뭐 당연히 아실테고요...
외에 슬랙도 작은 것 같은데 확실친 않고요...

근데, 커널...디펜던시 때문에 못 줄이는 것도 많기도 해서, 본인 시스템 아니면 말해주기 힘들지 않을까요..
저도 줄여보겠다던가 했던적이 있었는데, 찾아보면, 자기가 시도/정리한 기록은 보이는데,
남에게 알려주는건, 명령어와 에러메시지를 통한 질답류 외엔 못 본 듯합니다.

# emerge --oneshot world

jachin의 이미지

시스템마다 다르겠지만, 필수 드라이버만 넣는다면 크기를 꽤 줄일 수 있을 것 같은데요? :)

직접 컴파일하면 좋습니다. +_+ (그런 의미에서 젠투 리눅스가.. 퍽!)

커널이 필요하시면 직접 오셔서 컴파일 해보시는건 어떨까요?

이번주 북서부지역 리눅스 사용자 모임은 용산에서 합니다.

장비 가지고 오시면 커널 컴파일 해드릴께요. ^^

세벌의 이미지

amorette의 이미지

저도 동일한 목적으로 커널 옵션을 조정해 본 경험이 있습니다.

처음에는 커널 설정 옵션들이 너무 많아서 어떻게 접근해야 할 지 몰랐습니다.
그런데 해보면 실제로는 의외로 간단합니다.

일단 전반적인 설정에 대한 몇가지 공개된 웹 문서 훑어봅니다.
그런뒤 make i386_defconfig 또는 make localmodconfig로 얻어진 기본 설정값에서 출발해서,
모든 설정들을 순회하면서 구글링을 하는 식으로 접근했습니다.

모듈 컴파일은 대부분 빼고 initrd도 제거하면, 설정이 잘못된 경우 부팅이 안되거나
곧 오류가 발생해 버리곤 하기 때문에 재빨리 문제를 캐치해낼 수 있었습니다.

시간이 널널한 주말을 이용해서 하루종일 집중해서 삽질을 해보면 의외로 커널 옵션이 그렇게 많지 않다는 걸
느낄 수 있습니다. 당장은 넘어가도 되는 설정들과 일단 신경쓰지 않아도 되는 것들을 분류하고 제외해보면서 시작해보면 확실히 그렇습니다.

몇 주를 붙잡고 있어야 하는 문제는 아니기 때문에 이렇게 접근하는 것도 경험상 나쁘지 않습니다.

문제는 다른 곳에 있습니다. 의외로 사이즈가 많이 작아지지 않습니다.
0.1MB 정도 줄었습니다. 쿠궁.... (커널 버전은 서로 다른 것과 비교했습니다.)

제 환경이 임배디드가 아니었기 때문일 수도 있습니다.
제가 빌드한 환경은 씽크패드 노트북 X61 버전입니다.

그 대신, 7.5MB 정도 되는 initrd 이미지 파일과 89M 정도 되는 커널 모듈들이 전부 배제되었습니다.
만약 애초에 initrd도 사용하지 않았고, 커널 모듈도 사용하지 않은 상황이라면 0.1M의 이득만 얻는 셈입니다.
하지만 불필요한 모듈이 많이 있고, initrd를 사용하고 있다면 initrd 이미지 크기와 불필요한 모듈 크기만큼 이득을 얻게 됩니다.

한편 최소화한 커널을 사용하는 컴퓨터가 만약 랩탑이나 대스크탑이라면 가끔 귀찮은 상황이 발생하곤 합니다.
급한 상황에 핸드폰 테더링이 안되서 배포판에서 제공하는 커널로 재부팅해야 하는 경우 등입니다.

만약 이정도의 크기를 줄이는 것이 턱없이 부족한 상황이라면,
아마도 커널 외의 부분(예를 들어 배포판)을 바꾸거나 줄여야 하는 상황이라고 생각합니다.

댓글 달기

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