부트디스크를 만들 때 중요한 문제중의 하나는 모든 것을 하나의(혹은 두개의) 디스켓에 다 집어넣어야 한다는 것입니다. 리눅스 시스템 자체의 크기도 점점 커져가는 추세라 파일들을 압축하더라도 한장에 다 넣기는 매우 어렵습니다. 다음은 제한된 용량의 플로피디스켓 속에 다 집어넣기 위한 일반적인 방법들입니다.
디폴트 값으로 플로피 디스켓은 1440 K 로 포맷됩니다, 하지만 더 높은 밀도의 포맷도 가능합니다. 밀도를 더 높여 포맷했을 때 그 디스켓으로 부팅할수 있는지 여부는 대부분의 경우 BIOS 에 달려있습니다. fdformat 명령어는 디스크를 다음과 같은 크기로 포맷할 수 있습니다: 1600, 1680, 1722, 1743, 1760, 1840, 1920. fdformat 의 맨페이지와 /usr/src/linux/Documentation/devices.txt 를 참조하십시오.
그렇다면 당신 컴퓨터는 어떤 디스켓 밀도 및 지오메트리를 지원할까요? 다음은 fdutils 프로그램의 저자인 Alain Knaff 씨로부터의 답변입니다(약간 편집하였습니다).
이것은 디스켓의 물리적 포맷의 문제라기보다는 오히려 BIOS 에 관련된 문제라 할수 있습니다. 만약 BIOS 가 18 을 초과하는 섹터넘버를 에러(bad)로 간주해버린다면 더이상 우리가 할수 있는 일은 별로 없습니다. BIOS 를 디스어셈블링한 자료가 부족하기 때문에 이는 시행착오를 통해 확인할 수 밖에 없습니다. 하지만, 만일 BIOS 가 ED 디스크(extra density: 36 sectors/track, 2.88MB)를 지원하는 경우에는, 1722K 디스크도 같이 지원될 가능성이 있습니다.
트랙당 섹터수가 21 섹터를 초과해 수퍼포멧된 디스크는 부팅이 안되기 쉽습니다: 사실, 이러한 디스크들은 비표준 사이즈(예를 들면, 표준인 섹터당 512 바이트 대신 1024 바이트를 할당하는 것)의 섹터를 사용하기 때문에 부팅에 실패하기 쉽습니다. 하지만 이를 위해 특별한 부트섹터 프로그램을 작성한다면 문제를 해결할 수 있습니다. 제 기억이 맞다면, DOS 2m 유틸리티에 이런 기능이 있고, OS/2 의 XDF 유틸리티에도 이런 기능이 있습니다.
일부 BIOS 들은 18 을 초과하는 섹터넘버는 무조건 에러로 간주해 버립니다. 1722 K 디스크는 21 섹터까지 사용하기 때문에 이런 BIOS 하에서는 부팅되지 않을 것입니다. 이를 확인하는 가장 확실한 테스트 방법은 DOS 나 syslinux 디스켓을 1722 K 로 포맷한 후 부팅가능하게 만들어, 이것으로 부팅해 보는 것입니다. 만일 그대신 LILO 를 사용해 보겠다면 linear 옵션을 주어서는 안됩니다(linear 옵션을 주면 LILO 는 그 디스켓을 표준 18 sectors/track 디스켓으로 간주해버리기 때문에 BIOS 가 고밀도 디스켓을 지원함에도 불구하고 부팅에 실패할 것입니다).
루트 파일시스템이 가지는 공간의 상당부분은 cat, chmod, cp, dd, df 등등의 보통의 GNU 시스템 유틸리티들이 차지합니다. BusyBox 프로젝트는 이러한 보통의 시스템 유틸리티들을 최소크기의 것들로 대치하려는 프로젝트입니다. BusyBox 는 한덩어리의 큰 실행화일인 /bin/busybox 를 제공합니다. 그 크기는 약 150 K 로서 보통의 유틸리티들의 기능들을 모두 수행합니다. 이상태에서 각각의 유틸리티들을 이 실행화일과 심볼릭 링크해주면 busybox 는 자신이 호출된 상황에 따라 알맞은 코드를 호출하게 됩니다. 심지어 BusyBox 는 기본 쉘조차 포함하고 있습니다. BusyBox 는 많은 배포본들용으로 바이너리 패키지가 나와있습니다. 소스코드는 the BusyBox site 에서 찾을수 있습니다.
리눅스에서 인기 있는 쉘은 bash, tcsh 등등이 있지만 이것들은 크기도 크고 많은 라이브러리들을 필요로 합니다. BusyBox 쉘 까지는 쓰지 않는다 해도, 다른 쉘로 바꿔보는 것도 고려해볼만 합니다. ash, lsh, kiss, smash 같은 경량급 쉘들은 훨씬 작고 라이브러리를 별로 필요로 하지 않거나 전혀 요구하지 않으므로 대안이 될 수 있습니다. 이러한 대용 쉘들은 대부분 다음 홈페이지에서 찾을 수 있습니다. http://www.ibiblio.org/pub/Linux/system/shells/. 명심할 것은 어떤 쉘을 쓰든 간에 그 쉘은 부트디스크에 포함시킨 rc 파일들 내의 모든 명령어들을 실행시킬 수 있어야 한다는 것입니다.
많은 라이브러리와 바이너리들이 디버깅 정보를 포함한 채 배포됩니다. 이런 파일들에 대해 file 명령을 실행하면 "not stripped" 라는 결과가 출력됩니다. 바이너리들을 루트 파일시스템으로 복사할 때는 다음과 같이 하면 좋습니다.
objcopy --strip-all FROM TO |
중요: 라이브러리를 복사할 때는 strip-all 대신 strip-debug 을 사용하세요.
부트나 로그인 시에 즉각 필요한 것이 아니라면 그런 바이너리들은 유틸리티 디스크로 옮겨놓을 수 있습니다. 자세한 것은 9.2절 을 보십시오. 모듈들을 유틸리티 디스크로 옮겨놓는 것도 고려해 볼만 합니다.