다음 이전 차례

8. 그밖의 주제들

8.1 루트 파일시스템의 크기를 줄이는 방법

때로는 루트 파일시스템이 너무 커서 압축을 해도 디스켓 한 장에 다 들어가지 않을 수도 있습니다. 다음은 파일 시스템의 크기를 줄이는 몇가지 방법입니다. 가장 효과적인 것부터 나열했습니다.

디스크의 밀도를 높인다

기본적으로 플로피 디스켓은 1440 K 로 포맷됩니다, 하지만 더 높은 밀도의 포맷도 가능합니다. fdformat 명령어는 디스크를 다음과 같은 크기로 포맷할 수 있습니다: 1600, 1680, 1722, 1743, 1760, 1840, 1920. 대부분의 1440 K 드라이브들은 1722 K 의 포맷을 지원하며 필자도 언제나 부트디스크로 이 포맷을 쓰고 있습니다. fdformat 의 맨 페이지와 /usr/src/linux/Documentation/devices.txt 를 참조하십시오.

쉘을 바꾼다

리눅스에서 인기 있는 쉘은 bash, tcsh 등등이 있지만 이것들은 크기도 크고 많은 라이브러리들을 필요로 합니다. ash, lsh, kiss, smash 같은 경량급 쉘들은 훨씬 작고 라이브러리를 별로 필요로 하지 않거나 전혀 요구하지 않으므로 대안이 될 수 있습니다. 이러한 대용 쉘들은 대부분 다음 홈페이지에서 찾을 수 있습니다. http://metalab.unc.edu/pub/Linux/system/shells/ 어떤 쉘을 쓰든 간에 그 쉘은 부트디스크에 포함시킨 모든 rc 파일들 내의 명령어를 실행시킬 수 있어야 합니다.

스트립 라이브러리와 바이너리들을 사용한다

라이브러리들과 바이너리들은 보통 스트립되지 않은(즉, 디버깅 심볼을 포함하는) 상태로 존재합니다. 이런 파일에 대해 "file" 명령을 실행하면 "not stripped" 라는 결과가 출력됩니다. 바이너리들을 루트 파일시스템으로 복사할 때는 다음과 같은 습관을 들이는 것이 좋습니다.

                objcopy --strip-all FROM TO

라이브러리를 복사할 때는 다음과 같이 씁니다.

             objcopy --strip-debug FROM TO

중요하지 않은 파일들은 유틸리티 디스크로 옮깁니다

부트나 로그인 시에 반드시 필요한 것이 아니라면 그런 바이너리들은 유틸리티 디스크로 옮겨놓습니다. 자세한 것은 유틸리티 디스크 만들기 절을 보십시오. 모듈들을 유틸리티 디스크로 옮겨놓는 것도 고려해 볼 만 합니다.

8.2 램디스크 아닌 루트파일 시스템

루트 파일시스템의 제작 편에서는 시스템 부팅과 동시에 램디스크로 로드되는 압축 루트파일시스템을 만드는 법을 설명했습니다. 이 방법이 많은 장점이 있어 주로 사용됩니다만 메모리가 부족한 일부 시스템은 설치된 램이 램디스크를 만들만한 용량도 못되는 수가 있으므로 이때는 디스켓 상에서 직접 마운트되는 루트파일시스템을 만들어야만 합니다.

이러한 파일 시스템은 다른 디바이스가 아닌 디스켓 위에 그대로 만들고 압축도 필요없기 때문에 사실 압축 루트 파일시스템을 만드는 것보다 쉽습니다. 위에서 우리가 배운 절차와는 조금 다르므로 그 개요를 적어보겠습니다. 이 방법을 택하면 사용할 수 있는 공간이 훨씬 적어진다는 사실을 잊지 마시기 바랍니다.

  1. 루트파일들에 할당할 수 있는 공간이 얼마나 되는지 계산한다. 만일 한장짜리 boot/root 디스크를 만든다면 커널의 블록과 루트 파일시스템의 블록을 더한 값을 디스켓 한 장의 용량에 맞추어야 한다.
  2. mke2fs 를 써서 디스켓 위에 적절한 크기의 루트 파일시스템을 만든다.
  3. 앞에서 배운 대로 파일 시스템을 구성한다.
  4. 다 되었으면 파일 시스템을 언마운트시키고 4.7 에서 설명한 것처럼 디스크파일로 만든다. 단, 압축시키지는 말라.
  5. 앞에서 배운대로 커널을 플로피디스켓에 담는다. 램디스크 워드를 계산할 때는 비트 14 를 0으로 설정한다. 이는 루트 파일시스템이 램디스크로 로드되지 않도록 하는 것이다. 앞에서 배운 대로 rdev 를 실행한다.
  6. 앞에서 배운대로 루트 파일시스템을 플로피 디스켓에 담는다.

몇가지 지름길이 있습니다. 만일 두장의 디스크 세트를 만든다면 직접 두번째 디스크 상에 루트 파일시스템을 만들면 됩니다. 굳이 하드디스크 위에서 만들어 옮겨올 필요가 없지요. 또한 한장짜리 boot/root 디스크를 만들면서 LILO를 사용하겠다면 한장의 디스켓에 커널, LILO 파일, 루트파일 셋이 모두 들어있는 단일한 파일 시스템을 만든 후, 마지막에 LILO 만 실행시키면 됩니다.

8.3 유틸리티 디스크 만들기

유틸리티 디스켓을 만드는 것은 비교적 쉽습니다 -- 그저 포맷된 디스크에 파일 시스템을 만들고 거기에 파일들을 카피하면 되는 것입니다. 부트디스켓에서 이 유틸리티 디스켓를 이용하려면 시스템이 부트된 후 유틸리티 디스켓을 수동으로 마운트하면 됩니다.

이 문서의 앞부분에서 유틸리티 디스켓를 /usr 디렉토리에 마운트할 수 있다고 말했습니다. 이 경우 바이너리들은 유틸리티 디스켓 상에 존재하면서 /bin 디렉토리 아래에 위치하게 되는 것입니다. 따라서 /usr/bin 을 PATH 에 포함시켜두면 이를 액세스 할 수 있습니다. 실행화일에 필요한 각종 라이브러리들은 유틸리티 디스켓의 /lib 디렉토리에 두면 됩니다.

유틸리티 디스크 제작시 명심해야할 중요한 사항들이 몇가지 있습니다.

  1. 핵심적인 시스템 바이너리나 라이브러리들은 유틸리티 디스크에 담지 마십시요. 유틸리티 디스크는 시스템이 부트된 후에야 마운트될 수 있기 때문입니다.
  2. 플로피 디스켓과 플로피 테이프드라이브를 동시에 엑세스할 수는 없습니다. 이 말은 플로피 테이프 드라이브를 가지고 있다해도 유틸리티 디스켓이 마운트 되어있는 동안에는 이 테이프 드라이브를 액세스 할 수 없다는 뜻입니다.
  3. 유틸리티 디스켓에 있는 파일을 엑세스하는 속도는 상당히 느립니다.

부록 유틸리티 디스크 견본 은 유틸리티 디스크에 들어가는 파일들의 예를 보여줍니다. 도움되는 아이디어를 발견할 수 있을 것입니다: 디스크를 다루는 프로그램들(format, fdisk)과 파일 시스템용 프로그램들(tt/mke2fs, fsck, debugfs, isofs.o/), 간단한 텍스트 에디터 (elvis,jove), 압축및 아카이브 유틸리티(gzip, tar, cpio, afio), 테이프 유틸리티(mt,tob,taper), 통신 유틸리티(ppp.o, slip.o, minicom), 디바이스용 유틸리티(setserial, mknod) 등이 들어있습니다.


다음 이전 차례