외부 장치에 Linux 운영 체제를 설치하는 데 관심이 있는 사람들에게 도움이 되기를 바랍니다.
원본 URL/개발자 또는 ... l-fireboot.html
FireWire 장치에서 Linux 를 시작합니다
이동식 드라이브에 Linux 운영 체제를 설치합니다.
난이도: 중간
마틴 허니포드 (martynh @ uk.IBM.com) 소프트웨어 엔지니어, IBM 영국 연구소.
선크다 (austin.dada @ gmail.com) 는 webzi@linuxsir 를 번역했다.
2004 년 7 월 15 일
2005 년 7 월 26 일부터 번역을 시작하여 7 월 28 일에 완성한다.
번역 경험이 많지 않다. 질문이 있으시면 이메일을 보내주십시오.
외부 드라이브를 사용하는 것은 오래된 하드웨어에 새로운 생명을 불어넣고 내장 하드 드라이브를 교체할 수 없거나 교체하지 않는 컴퓨터에서 Linux 시스템을 사용할 수 있는 좋은 방법입니다.
이중 부트 환경에서 Linux 를 사용하려고 하지만 컴퓨터 하드 드라이브에 여유 공간이 없다고 가정합니다. 한 가지 솔루션은 CD 에서 직접 부팅할 수 있는 Knoppix 와 같은' live”Linux 릴리스를 사용하는 것입니다. 가끔 사용하는 경우 이 방법이 가능하지만 몇 가지 단점이 있습니다.
* 여전히 고정 파일 저장소가 필요합니다. 소량의 파일만 조작하면 1.44MB 의 디스크가 가능하거나 USB 디스크가 중간 파일에 적합하지만 모두 이상적이지 않습니다.
* 라이브 CD 를 사용할 때 가장 어렵고 최악이며 불가능한 것은 자체 어플리케이션을 설치하거나 기존 프로그램을 사용자 정의하는 것입니다.
* LiveCD 를 사용한 성능 저하는 모든 장치 테스트가 시작될 때 특히 두드러지며, 사용 중에도 자주 발생합니다 (모든 파일이 CD 에서 로드되는 것이 일반적으로 하드 드라이브에서 로드하는 것보다 느림).
사실, 다른 옵션이 있습니다. 예를 들어 추가 내장 드라이브를 구입하고 여기에 Linux 운영 체제를 설치할 수 있습니다. 하지만 보통, 당신은 여분의 확장 흙더미가 없을 수도 있다. (이 상황은 노트북에서 특히 쉽게 발생할 수 있으며, 일반적으로 내장형 하드 드라이브 하나만 허용됩니다. ) 을 참조하십시오
또는 현재 하드 드라이브 대신 더 큰 하드 드라이브를 사용하여 Linux 운영 체제를 설치할 수 있는 추가 공간을 확보할 수 있습니다. 그러나, 이것은 정말 시간이 많이 걸리는 솔루션이다. 새 하드 드라이브에 기존 운영 체제를 다시 설치하고, 모든 어플리케이션을 다시 설치 및 구성하고, 모든 데이터를 복구해야 한다.
더 좋은 해결책은 외부 하드 드라이브를 사서 Linux 운영 체제를 설치하는 것입니다. 이렇게 하면 기존 하드웨어 및 소프트웨어 없이 Linux 시스템을 사용할 수 있습니다. 단순히 외부 드라이버를 연결하기만 하면 됩니다.
이동식 장치 (옵션)
Linux 운영 체제를 설치하는 데 사용할 수 있는 장치에는 디스크 드라이브, USB 플래시 장치, USB/ Firewire 를 통해 연결된 하드 드라이브 등이 있습니다.
Linux 는 1.44MB 디스크 또는 32MB USB 디스크와 같은 소용량 장치에 설치할 수 있습니다. 일반적으로 (필수) 특정 목적에 맞게 사용자 정의되며, 중단된 설치 프로세스를 절약하기 위해 단순화된 릴리스를 채택합니다.
외장형 하드 드라이브는 범용 Linux 시스템을 사용할 수 있는 최대한의 유연성을 제공하는 동시에 합리적인 비용을 제공합니다.
여러 제조업체에서 다양한 용량의 외부 드라이브를 제공합니다. (마이토, 시시 데이터 등. ). 이들 드라이브에는 표준 3- 1/2 인치 또는 2- 1/2 인치 IDE 하드 드라이브를 고정하는 외부 케이스도 포함됩니다. 그런 다음 USB 또는 IEEE 1394 (Firewire) 를 통해 컴퓨터에 연결합니다.
USB 는 두 가지 주요 버전,1..1및 2.0 의 속도에 영향을 받습니다. 1. 1 버전은 12 Mbit/ s (초당 1Mbit) 이고 버전 2.0 전송 속도는 최대 480mbit 를 지원합니다 ) 을 참조하십시오
FireWire 표준은 또한 여러 가지 다른 속도를 정의합니다. 사실, 대부분의 사람들이 말하는 firewire 는 최대 400 Mbit/s 의 전송 속도를 지원하는 "FireWire400" 표준입니다.
USB2.0 과 FireWire 는 속도를 나란히 합니다. USB 2.0 의 전송 속도는 상대적으로 높지만 실제로 프로토콜이 다르기 때문에 속도가 매우 가깝습니다. 컴퓨터에 두 가지 인터페이스가 있다면 firewire 대신 USB 를 사용하는 것이 가장 좋지만, firewire 인터페이스만 있다면 당연히 선택하는 것이 좋습니다. 최대한의 유연성을 위해 USB 2.0 및 FireWire 를 지원하는 다양한 드라이버 중 하나를 선택할 수 있습니다. 제가 이 기사의 뒷부분에서 사용하겠습니다. ) 을 참조하십시오
PCI (데스크탑) 와 PCMCIA (노트북), FireWire 및 USB 2.0 확장 카드는 불필요한 인터페이스가 없는 사람들에게는 그리 비싸지 않습니다. 예를 들어 문장 뒤에서 PCMCIA FireWire 확장 카드는 약1이라고 언급합니다.
이 글의 목적을 달성하기 위해, 나는 5- 1/4 인치 외부 하드 드라이브 박스를 구입했다. 이것은 드라이브를 제공하지 않고 3- 1/2 인치 드라이브 및 5- 1/4 인치 CD-RW/DVD-RW 와 같은 IDE 장치를 포함한 모든 표준 ide 장치를 고정할 수 있는 매우 유연한 하드 디스크 카트리지입니다 하드 디스크 카트리지에는 USB 2.0 과 firewire 인터페이스가 모두 있습니다.
하드 디스크 카트리지를 내 IBM Thinkpad T30 노트북에 연결하기 위해 PCMCIA FireWire 어댑터 카드도 구입했습니다. (내부 USB 인터페이스는 USB1..1만 지원하기 때문입니다.)
하드 드라이브 상자와 firewire 어댑터는 비교적 저렴합니다. 각각 약 50 근과 10 근이다. ) 을 참조하십시오
테스트 도중, 나는 하드 디스크 상자에 유휴 13 GB 3- 1/2 인치 IDE 하드 드라이브를 넣었습니다. 사실, 나는 더 큰 용량의 하드 드라이브를 살 것이고, 지금은 또 다른 하드 드라이브를 사는 것이 저렴합니다 (각각 약 50 킬로그램) ) 을 참조하십시오
리눅스 지원
예상대로, Linux 는 이 하드 디스크 상자들을 정말 지지한다. SBP (직렬 버스 프로토콜) 표준을 준수하는 모든 대형 저장 장치는 Linux 에서 쉽게 사용할 수 있습니다.
일반적으로 이러한 장치를 지원할 수 있도록 하려면 커널에서 특정 옵션 (직접 컴파일 또는 전달 모듈) 을 지원해야 합니다. ) 을 참조하십시오
USB 와 firewire 의 경우 SBP 디바이스는 SCSI 에뮬레이션을 통해 구현됩니다. 즉, Linux 는 이를 SCSI 하드 드라이브로 취급합니다. 이는 Linux 세계에서 스토리지 디바이스를 사용하는 일반적인 방법입니다. 예를 들어, IDE CD/DVD 디바이스는 일반적으로 SCSI 에뮬레이션을 통해 연결됩니다. 이러한 이유로 커널은 다음 옵션을 지원해야 합니다.
* SCSI 지원
* SCSI 에뮬레이션
* SCSI 디스크 지원
또한 연결 방법에 따라 다음과 같은 커널 지원이 필요합니다.
* 핫 컨덕터의 경우:
* IEEE 1394 지원
* OHCI 1394 지원
* RAW 1394 지원
* SBP 새 프로토콜 지원
* USB 의 경우:
* (호스트측) USB 지원
* OHCI 지원
* UHCI 지원
* USB 대용량 스토리지 지원
분명히 비디오 카드와 같은 다른 하드웨어를 정기적으로 컴파일해야 합니다. 참고) 특정 하드웨어에 따라 추가 모듈이 필요할 수도 있습니다.
예를 들어, PCMCIA (카드버스) firewire 어댑터를 사용 중이므로 다음을 추가해야 합니다.
* PCMCIA 지원
* 카드버스 지원
고정
이제 우리는 완벽한 외부 드라이브를 갖게 되었고, 우리는 그 위에 Linux 를 설치하기 시작할 것이다.
현재 Linux 를 설치하는 가장 쉬운 방법 (물론 개인적인 관점) 은 모든 하드웨어를 연결하는 것입니다. (내 예에서는 FireWire 어댑터를 삽입하고 배선용 상자 드라이버를 연결한 다음 드라이버 전원을 켭니다.) 선택한 릴리스 설치 CD 에서 컴퓨터를 부팅합니다.
제가 사용하는 릴리스는 Gentoo (참고 자료 링크 참조) 이기 때문에 최신' general' x86 LiveCD 를 사용하고 있습니다. (2004. 1) 기타 분포에 필요한 단계는 대체로 비슷하다.
일단 설치 CD 를 사용하기 시작하면, 그에게 너의 드라이브를 알게 하는 것은 좀 운이 좋다. 이 디스크는 /dev/sdx 에 나타나야 합니다. 여기서 x 는 "a" 로 시작하는 소문자입니다. 내 시스템에서는 외장 하드 드라이브가 /dev/sda 로 간주되지만 다른 SCSI 하드 드라이브가 있으면 이 숫자가 변경됩니다. 이 경우 /dev/sdb 또는 다른 문자일 수 있습니다. 드라이브가 자동으로 감지되지 않을 경우 추가 조치가 필요합니다. 예를 들어 FireWire 또는 PCMCIA 인터페이스를 사용하기 위해 시작 옵션을 설정하거나 일부 커널 모듈 또는 기타 옵션을 수동으로 로드해야 할 수 있습니다. (자세한 자료는 장애 검색 및 유지 보수 가이드 링크를 참조하십시오. ) 을 참조하십시오
드라이브가 인식되면 설치 프로세스는 내장 하드 드라이브처럼 작동합니다. 그런 다음 파티션을 만들고 Linux 를 정상적으로 설치할 수 있습니다.
중요한 경고가 있습니다. 부트 로더 (일반적으로 GRUB 와 LILO) 를 설치할 위치를 선택할 때는 주의해야 합니다. 마스터 부트 레코드 (MBR) (일반적으로 기본값) 에 설치하지 말고 외부 드라이브의 루트 파티션 (또는 /boot 파티션 (별도로 있는 경우) 에 설치하는 것이 좋습니다.
우리는 이미 이 장치에 Linux 를 설치했기 때문에, 우리는 위에서 그것을 시작하고 싶다. 일이 좀 복잡해졌다.
시작
새 드라이브에서 부팅하는 방법에 대해 논의하기 전에 boot loader 에 대한 몇 가지 작은 지식을 설명하고 싶습니다.
부트 로더는 일반적으로 컴퓨터의 첫 번째 하드 드라이브의 MBR 에 설치됩니다. Boot loader 가 호출되면 (BIOS 가 MBR 의 코드를 자동으로 실행) 일반적으로 운영 체제를 시작하는 메뉴가 표시됩니다. 지정된 운영 체제를 선택하여 컴퓨터를 시작합니다.
이 장에서는 두 가지 세부 사항에 유의해야 합니다.
* 운영체제 선택 메뉴 (보통) 는 디스크에서 로드됩니다.
* 관련 운영 체제를 부팅하려면 boot loader 가 디스크에서 관련 커널을 읽어야 합니다.
운영 체제를 로드하기 전에 위의 단계를 수행했습니다. 즉, BIOS 호출 시 모든 디스크 읽기가 수행됩니다. 디스크를 직접 부팅하려면 BIOS 가 firewire 또는 USB 를 통해 연결된 디스크를 지원해야 합니다. 이러한 장치에서 부팅하는 옵션은 일반적으로 BIOS 에서 볼 수 있습니다. Firewire BIOS 지원은 현재 거의 없지만 USB 지원은 상당히 보편화되고 있습니다. 따라서 비교적 최신 컴퓨터에서 USB 인터페이스를 사용하는 경우 드라이버를 Linux 로 직접 부팅할 수 있어야 합니다.
USB 를 통해 연결할 때 외부 구동 MBR 의 유충을 설치한 후 바로 시작할 수 있습니다. 연결된 디스크를 사용하여 부팅할 때 BIOS 장치 유틸리티로 들어가기만 하면 됩니다. 외부 디스크는 일반 하드 드라이브처럼 나타납니다. 부팅 순서에서 내부 드라이브 앞에 오도록 이동합니다.
내장 하드 드라이브의 MBR 에 부팅 로더를 설치하여 USB 하드 드라이브 (GRUB 에서는 HD 1) 를 시작할 수도 있습니다. FireWire 를 사용한다면, BIOS 가 하드 드라이브를 직접 부팅하지 못할 수도 있습니다. 더 많은 단계가 필요합니다.
다행히 Linux 의 다양성 때문에, 이것은 잘 해결된다. 만약 직접 전원을 켤 수 없다면, (나는 바로 이런 상황이고, PCMCIA 어댑터 카드를 사용한다! 지원되는 장치에서 플로피 드라이브, CD-ROM, USB 스틱 또는 기본 하드 드라이브의 작은 파티션과 같은 초기 부팅 단계를 실행한 다음 외부 드라이브를 사용하여 추가 단계를 계속할 수 있습니다.
부트 이미지 패키지 만들기
우리는 두 가지 방법으로 시작할 수 있습니다.
* 주문 개시
커널이 시작되고 루트 파티션 파일 시스템이 마운트된 다음 초기화 교재를 호출하여 초기화를 계속합니다 (일반적으로 /sbin/init).
* 2 단계 시작의 시작 (initrd)
커널이 시작되고 초기 ram 디스크 (initrd) 를 마운트하고 사용자 정의 초기화를 추가로 실행한 다음 루트 파티션 파일 시스템을 마운트하여 초기화를 계속합니다 (일반적으로 /sbin/init 호출).
각 방법에는 고유한 장단점이 있다.
한 단계씩 시작하다
단일 레벨 부트를 사용하려면 루트 파티션 파일 시스템을 마운트하는 데 필요한 모든 드라이버가 포함된 커널을 구축해야 합니다. 다른 모든 드라이버는 하나의 모듈로 컴파일되어 루트 파티션이 로드될 때 정상적으로 초기화될 수 있습니다. ) 을 참조하십시오
플로피 디스크와 같은 매우 작은 장치에서 부팅을 시도하면 적절한 커널을 만들고 루트 외부 파티션 시스템을 설치하는 데 필요한 모든 드라이버를 컴파일하고 다른 모듈을 컴파일하는 것이 가장 좋습니다. 예를 들어 내 커널 컴파일에는 SCSI 지원, PCMCIA 지원, IEE1394, SBP 및 기타 유사한 지원이 있지만 기타 (그래픽 지원, 네트워크 장치 지원 등) 가 있습니다. ) 는 모듈로 컴파일되어 플로피 디스크가 아닌 루트 파티션 (외부 드라이브) 에 저장됩니다.
이 접근법의 주요 문제점은 커널 소스 코드를 패치해야 한다는 것입니다. 이것은 최악의 고통 (새로운 커널이 출시되었을 때) 이며, 진짜 문제는 패치가 유지 관리되지 않으면 커널의 변화를 따라가지 못한다는 것입니다.
컴퓨터 BIOS 가 USB 및 firewire 직접 부팅을 지원하면 위의 두 가지 문제를 피할 수 있다고 생각할 수 있습니다. 불행히도, 이 방법은 부팅 시 BIOS 를 사용하여 디스크를 호출합니다. 커널이 초기화를 시작하면 BIOS 가 작동하지 않고 커널 드라이버를 사용하여 디스크를 호출하므로 동일한 문제가 발생합니다.
2 차 시동
커널 버전 2.0.X 는 커널에 흥미로운 기능을 추가합니다. 초기 RAM 디스크 (또는 initrd) 를 사용하여 2 차 부팅을 수행합니다.
즉, 커널은 항상 시작됩니다. 실제 루트 파티션 시스템을 마운트하는 대신 메모리에 만든 미니 루트 파티션 파일 시스템을 마운트합니다. "실제" 루트 파티션 시스템을 마운트하기 전에 실제 루트 파티션 파일 시스템으로 전환하고 초기 RAM 디스크를 제거할 때까지 모든 명령이 이 초기 환경에서 실행됩니다.
이 기능은 다양한 환경에서 유용하지만 우리의 목표는 소규모 환경을 사용하여 SCSI 버스를 다시 검색하고, 외부 드라이브가 이를 인식할 때까지 기다린 다음 이를 사용하여 실제 루트 디렉토리로 전환하고 부팅을 계속하는 것입니다.
이 방법을 사용하려면 두 개의 파일, 커널 및 초기 이미지 파일을 만들어야 합니다.
커널은 일반 커널을 지원하는 내장 부트 이미지 (initrd) 일 뿐입니다. Initrd 이미지는 미니 루트 파티션 시스템을 포함한 순환 파일 시스템 이미지입니다. (이미지는 gzip 압축을 사용하여 선택적으로 크기를 줄일 수 있습니다.).
자체 초기 이미지를 만들고 사용자 정의하는 방법에 대한 자세한 내용은 참고 자료 섹션을 참조하십시오.
미러 파일에는 linuxrc 파일이 있습니다. 이미지를 로드할 때 파일이 자동으로 실행되므로 실행 권한이 있는지 확인하십시오! 목표를 달성하기 위해 linuxrc 파일은 매우 간단합니다.
열거형 1. Initrd linuxrc
#! /bin/sh
REAL_ROOT=/dev/sda 1
# /proc 파일 시스템 마운트
Mount -t 프로세스 없음/프로세스
# SCSI 시뮬레이션에 사용 (SCSI 시뮬레이션)
# modprobe sd_mod
# PCMCIA (PCMCIA 카드)
# modprobe pcmcia_core
# FireWire 의 경우
# modprobe IEEE 1394
# modprobe ohci 1394
# modprobe raw 1394
# modprobe sbp2
# USB 용 (범용 직렬 버스)
# modprobe USB 코어
# modprobe ohci-hcd
# modprobe uhci-hcd
# modprobe USB 저장소
# 루프 SCSI 버스 다시 검색+devfsd 다시 실행
재시도 횟수 =5
I= 1
[-e $REAL_ROOT] 까지
하다
[$ I-gt $ 재시도 횟수]
그리고 나서
Echo "실제 루트 ($ real _ root) 를 마운트할 수 없음-취소!"
/bin/ash
수출
선측은 화물 적재 비용을 부담하지 않습니다
Echo "실제 루트 ($REAL_ROOT) 를 찾을 수 없습니다. 재시도 중 ($i)"
수면 1
Echo "SCSI add-single-device 0 0 0" >/proc/SCSI/SCSI
Echo "SCSI add-single-device100" >/proc/SCSI/SCSI
Echo "SCSI add-single-device 20 0 0" >/proc/SCSI/SCSI
/bin/devfsd /dev -np
나 =$((i+ 1))
완성
#umount /proc-일반 init 프로세스에 의해 다시 마운트됩니다
/proc 파티션이 일반 INIT 프로세스를 다시 마운트할 때 마운트 해제합니다.
언로드/처리
# 이제 간단하게 종료하겠습니다. 정상적인 부트 프로세스를 계속해야 합니다
이제 우리는 종료 할 수 있으며 정상적인 시작 프로세스가 계속됩니다.
출구 0
외부 드라이브를 지원하기 위해 적절한 모듈을 로드하고 있습니다. 필요한 경우 해당 행을 확인하십시오. 필요한 모든 지원을 커널에 컴파일했기 때문에 모듈이 필요하지 않습니다. 그런 다음 루트 파티션 장치 (내 경우 /dev/sda 1) 가 나타날 때까지 SCSI 버스 (/proc 가상 파일 시스템의 다음 특수 파일에 응답하는 명령, devfsd 프로그램 호출) 를 순환합니다. 내 경우, 액세스된 FireWire 아날로그 SCSI 버스는 1000 이지만, 다른 버스 시도에는 영향을 주지 않습니다. 어떤 버스를 사용할지 알고 계시다면 이 교재를 잘라낼 수 있습니다. 또한 다른 SCSI 디바이스 (또는 아날로그 SCSI 디바이스) 가 있는 경우 드라이브의 문자가 다를 수 있습니다. (예: /dev/sdb 1) 외부 드라이브의 첫 번째 파티션을 사용하지 않을 경우 다른 번호를 사용해야 합니다. (예: /dev/sda2)
이제 우리가해야 할 일은 관련 파일을 initrd 이미지로 복사하는 것입니다. Mount -o loop 명령을 사용하여 압축되지 않은 이미지를 마운트할 수 있습니다. ) 특히 linuxrc 파일, 사용된 모든 명령 및 이에 의존하는 라이브러리가 있는지 확인해야 합니다. 이 (설치되지 않은) 이미지에는 선택적 접기 압축이 있을 수 있습니다.
커널 (bzImage) 및 initrd 이미지 (initrd.gz) 를 디스크에 복사합니다.
마지막 단계는 디스크에 부트 로더를 설치하고 커널 이미지 루트 =/dev/sda1initrd = initrd.gz 옵션을 사용하여 커널을 시작하는 것입니다. 。
이제 디스크를 사용하여 부트할 수 있어야 합니다. 플로피 디스크에서 커널을 로드하고, initrd 이미지를 메모리로 로드한 다음, 거기서 정상적인 부팅을 계속합니다. 그런 다음 디스크를 제거할 수 있습니다.
디스크가 적합하지 않은 경우 (예: 컴퓨터에 플로피 드라이브가 없는 경우) BIOS 에서 부팅에 사용할 수 있는 모든 장치를 사용할 수 있습니다. 저는 개인적으로 작은 32MB USB 로 이 목표를 달성했습니다.
참고 자료:
Http://www.linuxsir.org/BBS/showthread.php? T = 2 1 102 1