Fedora 36(커널 5.19.6-200.fc36.x86_64)의 Firewire(IEEE1394)에서 부팅하는 것을 방해하는 문제가 있습니다.
Fedora는 여기서 오랫동안 멈춥니다.
Dracut Emergency Shell의 최종 출력:
로그가 있습니다 /run/initramfs/rdsosreport.txt
(라인 1843). 발췌:
mac2011-linux% cat '/media/alba/sauve/rdsosreport.txt' |grep -E "fw|firewire"
[ 2.786192] fedora kernel: firewire_ohci 0000:04:00.0: added OHCI v1.10 device as card 0, 8 IR + 8 IT contexts, quirks 0x0, physUB
[ 3.290214] fedora kernel: firewire_core 0000:04:00.0: created device fw0: GUID a4b197fffe435f8e, S800
[ 3.291200] fedora kernel: firewire_core 0000:04:00.0: phy config: new root=ffc1, gap_count=5
[ 8.368893] fedora kernel: firewire_core 0000:04:00.0: created device fw1: GUID 0030e002e0011462, S800
ls /lib/modules/5.19.6-200.fc36.x86_64/kernel/drivers/firewire
반품 firewire-core.ko.xz firewire-ohci.ko.xz
.
modprobe -c|grep fw
와 같은 행에 대한 점수를 반환합니다 alias symbol:fw_bus_type firewire_core
.
저는 4개의 SATA 장치(3개의 SSD와 1개의 회전 장치), 3개의 Macbook Pro(2009, 2010, 2011), 2개의 다른 Firewire 연결 및 2개의 다른 케이블을 사용해 보았습니다.
장치가 내부적으로 SATA에 연결되어 있거나 Mac OS X El Capitan 또는 Sierra를 부팅하는 데 사용되는 경우에는 문제가 없습니다. 가끔 결함이 관찰되기는 했지만 Ubuntu(커널 5.15)에서도 작동합니다.
이 질문은 Firewire 및 Fedora에 적용됩니다..
다음과 같이 깔끔하게 재현할 수 있습니다.
- EFI 파일 시스템용 HFS+ 파티션 하나와 루트 파일 시스템용 Ext4 파티션 하나를 사용하여 Fedora를 새로 설치합니다.
- 내부적으로 새 설치를 시작합니다.
- Firewire 드라이버가 설치되어 있는지 확인하려면 Firewire에 다른 장치를 설치할 수 있는지 확인하거나 다른 장치가 없는 경우 를 시청하세요
modprobe -c|grep firewire
. - Firewire에서 재부팅해 보세요. Plymouth 단계 이후에는 실패합니다(로그를 보려면 Fedora 로고가 보일 때 Esc를 누르십시오).
누구든지 문제를 재현하거나 해결하는 데 도움을 줄 수 있습니까?
답변1
따라서 부팅 프로세스의 initramfs 단계 동안 비상 셸에 있게 됩니다. 이는 펌웨어가 GRUB을 로드한 다음 GRUB가 커널과 initramfs를 로드하고 커널을 시작했음을 의미합니다. 이 시점에서 시스템의 기본 목표는 하나입니다. 진정한 루트 파일 시스템을 설치하는 것입니다. 이를 위해 initramfs 파일에는 필요한 하드웨어와 필요한 설정을 수행하는 스크립트를 지원하는 커널 모듈이 포함될 수 있습니다. 루트 파일 시스템이 마운트되면 실제 프로세스 #1 바이너리가 실행되어 initramfs에 제공된 임시 프로세스를 대체하며, 이 프로세스에 따라 부팅 프로세스가 어떻게 진행될지 결정됩니다.
그림의 메시지는 커널이 firewire-core
모듈을 성공적으로 로드했으며 Firewire 장치의 존재를 감지했음을 나타냅니다. 그러나 핵심 모듈은 firewire-sbp2
Firewire 기반을 지원하기 위해 다른 모듈이 필요합니다.저장장비.
귀하의 경우, initramfs에는 분명히 모듈 이 포함되어 있지 않습니다 firewire-sbp2
( firewire-spb2
주석에 오타를 만들고 modprobe 명령을 올바르게 입력했다고 가정). 이 모듈은 Firewire 기반 저장 장치를 지원하는 데 필요합니다. 따라서 누락된 모듈은 Firewire 기반 부팅 실패의 가장 큰 원인입니다. 모듈이 없으면 커널은 Firewire 저장소에 있는 루트 파일 시스템에 액세스할 수 없으며 다른 파일 시스템이 마운트되지 않았기 때문에 initramfs는 커널의 결함입니다. 부팅 프로세스의 초기 단계에 액세스할 수 있는 유일한 위치입니다.
새 커널 버전이 설치될 때마다 Initramfs 파일이 먼저 생성됩니다(특정 커널이 이를 요구/사용하도록 구성되어 있다고 가정). initramfs 파일은 빌드된 커널 버전에 따라 다르며 배포판에서 사용하는 initramfs 생성기 프로세스에 따라 빌드된 시스템에 대해 어느 정도 사용자 정의될 수도 있고 그렇지 않을 수도 있습니다. 일부 initramfs 생성기 필요한 드라이버 모듈 식별 initramfs를 생성할 때 루트 파일 시스템에 액세스하고 initramfs 파일의 크기를 작게 유지하는 데 필요한 모듈만 포함합니다.
따라서 디스크가 SATA를 통해 연결되었을 때 initramfs 파일이 생성된 경우 Fedora initramfs 생성자( dracut
)는 Firewire 스토리지 지원 모듈을 생략했을 수 있습니다. "루트 파일 시스템이 Firewire 디스크에 없기 때문에 나중에 필요할 경우 /lib/modules
루트 파일 시스템을 마운트한 후 자동으로 로드할 수 있는 경우 이 모듈을 추가해야 합니다."
SATA와 Firewire 간에 시스템 디스크를 이동하는 데 익숙하다면, firewire-sbp2
당시에 필요하지 않은 것처럼 보이더라도 initramfs 생성자에게 항상 모듈을 initramfs에 포함하도록 지시할 수 있습니다.
의 경우 에서 파일을 생성하여 이 작업을 지속적으로 수행 dracut
할 수 있습니다 . 예를 들어 이름을 으로 지정할 수 있습니다 . 여기에는 다음 줄이 포함되어야 합니다.*.conf
/etc/dracut.conf.d/
/etc/dracut.conf.d/01-always-include-firewire-storage.conf
add-drivers+="firewire-sbp2"
( 의 파일은 /etc/dracut.conf.d/
이름에 따라 영숫자 순서로 처리되므로 순서가 모호하지 않도록 파일 이름에 두 자리 접두어를 추가하는 관례가 있습니다.)
이 파일을 추가한 후 initramfs 파일을 다시 빌드해야 합니다. 현재 커널에 대해 이를 수행하려면 다음을 입력하면 됩니다.
dracut --force
다른 커널 버전에 대해 이 작업을 수행하려면 명령은 다음과 같습니다.
dracut --kver <kernel version> --force
--force
이 옵션은 이미 존재하는 initramfs 파일을 덮어쓰는 데 필요합니다.