VirtualBox를 사용하여 작은 Arch Linux 64비트 x86 시스템을 설정했습니다. VMDK 형식의 대형 8GB 가상 하드 드라이브에 설치되었으며 모든 것이 잘 작동합니다.
cfdisk는 내가 두 개의 파티션을 생성했음을 보여줍니다.
- 유형: 기본 파티션, 유형: Linux(ext4), 부팅 가능, 첫 번째 파티션, 크기: 7.5G
- 유형: 기본 파티션, 유형: 스왑, Solaris, 부팅 가능, 보조 파티션, 크기: 0.5G
저는 Arch Linux를 크게 사용자 정의했으며 이제 이를 사용하여 실제 부팅 가능한 미디어를 만들고 싶습니다.
1. 복잡한 Archiso 설치 과정 없이 부트 가능한 미디어를 생성하고, 어떻게든 생성한 드라이브 이미지를 바로 사용할 수 있는 방법은 무엇인가요?
실제로 부팅 가능한 미디어를 만들어 보았습니다. Ubuntu를 사용하여 명령을 os.vmdk
사용하여 내 것을 변환합니다./dev/sdc
qemu-img convert os.vmdk -O raw /dev/sdc
완료한 후 컴퓨터의 부팅 메뉴로 재부팅했지만 펜 드라이브가 표시되지 않았습니다. 보안 부팅을 끄고 활성화했지만 Legace Boot Support
아무 도움이 되지 않았습니다. 그래서 Ubuntu 설치의 Grub 명령줄에 가서 다음을 입력했습니다.
set root=(hd1,msdos2) # hd1 is my usb stick, msdos1 is swap, msdos2 is bootable
configfile /boot/grub/grub.cfg # in order to load the usb's grub
2. 그런데 이상한 일이 일어났어요
- 스틱을 노트북에 연결했습니다 -> USB2.0포트(USB 3.0 스틱이 있음) -> 부팅... -> 그래픽 Arch Linux 부팅 화면 -> Emergency Shell
Can't run fsck. Error: Can't find drive with UUID=...
에서 다음과 같이 말합니다(그러나 UUID는 확실히 정확합니다. Ubuntu와 Arch 자체에서/언제든지 변경했습니다) 비상 쉘에서 이 작업을 수행 하면blkid
USB 드라이브가 전혀 존재하지 않습니다. 대신 /dev/*에서 USB 드라이브를 찾을 수 없으며 dmesg는 이에 대해 아무 말도 하지 않습니다(훌륭하게). - 스틱을 노트북에 연결했습니다 -> USB3.0grub 명령줄에서 포트->드라이브가 감지되지 않습니다.
hd0
뭔가 는 있지만 아무것도 없습니다hd1
. 그러나 때때로 USB 3을 통해 연결된 외장 하드 드라이브에서 부팅하기 위해 BIOS 부팅 메뉴를 사용합니다. - USB를 통해 스틱을 워크스테이션 PC에 연결했습니다.3.0포트 -> BIOS 부팅 메뉴가 아닌
configfile
grub 및 명령을 통해 부팅 ->부팅은 되지만 노트북의 USB 3.0 포트에서는 부팅되지 않습니다.-> 다음과 동일한 비상 쉘1.
- USB를 통해 스틱을 워크스테이션 PC에 연결했습니다.2.0포트->GRUB를 통해 부팅->성공적으로 시작됩니다문제 없습니다.
내가 무엇을 해야할지 모르겠어요! ? 저는 기본적으로 복잡한 Arch 설치를 하지 않고도 어떤 장치로든 복사하고 전송할 수 있는 기존 가상 Arch Linux의 이미지를 만들고 싶습니다.
도움을 주시면 감사하겠습니다.
답변1
1.)이제 USB 스틱을 분할했으므로 실제 파일 시스템의 전체 콘텐츠(다른 tmpfs
RAM 기반 또는 완전 가상 파일 시스템(예 /dev
: , /proc
및 /sys
) 무시) ext4
를 USB 스틱의 파티션에 복사해 보는 것은 어떨까요?
제 생각에는 qemu-img convert
이것이 기본적으로 여러분이 하고 있는 일이지만 아마도 건너뛸 수도 있을 것입니다. 원래,마법이 없습니다:운영 체제에 필요한 모든 파일을 적절한 디렉터리 계층 구조에 복사하면 복사 방법에 관계없이 작동하는 시스템이 됩니다. 비활성 운영 체제는 본질적으로 파일 묶음일 뿐이므로 그렇게 생각할 수 있습니다.
유일한 특수 부분은 레거시 BIOS 부트로더입니다. 부트로더가 나중에 찾을 수 있도록 스틱의 특정 블록 위치에 데이터를 기록해야 합니다. 반면에 UEFI 부트로더는 FAT32 파티션에 특정 경로 이름을 가진 또 다른 파일입니다.
2.1.)USB 2를 사용하여 Ubuntu에 설치된 부트로더(아마도 UEFI)로 부팅하려고 시도 중: 부트로더가 커널 및 initramfs 파일을 성공적으로 로드하고 커널을 시작한 것처럼 보이지만 initramfs 파일은 USB에 필요한 모든 드라이버에 액세스할 수 없었습니다. 메모리 스틱의 루트 파일 시스템. 최소한 적절한 USB 컨트롤러 드라이버, usb-storage
드라이버, ext4
파일 시스템 드라이버 및 해당 종속성이 필요합니다. 또한 USB 컨트롤러가 칩셋에 포함되는 경우가 많기 때문에 칩셋 내의 특정 PCI ID가 실제로 USB 컨트롤러임을 알 수 있도록 커널 버전은 칩셋을 인식할 수 있을 만큼 새 버전이어야 합니다.
2.2.)USB 3.0 포트에서 USB 스틱이 감지되지 않음: BIOS 부팅 메뉴를 통해 실제로 요청하지 않는 한 노트북 펌웨어에 USB 3.0 지원이 포함되어 있지 않습니까? 아니면 USB2와 USB3 컨트롤러 사이에 USB2/USB3 토글 스위치가 있어서 어떻게든 뒤집어야 할까요?
2.3.)데스크톱에서는 USB 3.0 포트에서 스틱이 감지되지만 2.1에서와 같이 부팅에 실패합니다. 데스크톱의 USB 3.0 지원이 더 나은 것처럼 보이지만 기본적으로 2.1과 동일한 문제가 있습니다. USB 없음3 USB-initramfs의 컨트롤러 및/또는 스토리지 드라이버.
2.4.)흥미로운. 데스크탑에는 표준 유형을 사용하는 반면 노트북에는 특별한 유형의 USB 2.0 컨트롤러가 있습니까 ehci_hcd
? initramfs에는 데스크톱에서는 USB 2.0에 액세스하는 데 필요한 모든 드라이버가 있지만 랩톱에는 없는 것 같습니다. 아니면 노트북에 아주 새로운 칩셋이 있는데 커널이 USB 컨트롤러를 찾을 수 없나요?
2.1 및 2.3의 문제는 initramfs 파일에 더 많은 USB 컨트롤러 드라이버를 추가하고 커널이 노트북의 칩셋을 완전히 인식할 수 있을 만큼 새로운지 확인하면 해결될 수 있습니다.
2.2. 펌웨어 제한이 있는 것 같습니다. 시스템의 제조업체와 모델을 알지 못하면 조언을 제공하기가 어렵습니다.
실제로 USB 스틱에 작은 FAT32 파티션을 추가하고 여기에 GRUB의 UEFI 버전도 추가하면 \EFI\BOOT\BOOTx64.efi
UEFI 방식으로 부팅이 가능해집니다. 현재 스틱은 전통적인 BIOS 방식으로만 부팅할 수 있는 것으로 보입니다. 이렇게 하면 기존 부트로더와 UEFI 부트로더가 모두 있는 "하이브리드" USB 스틱을 만들 수 있습니다.
일반적으로 레거시 BIOS는 1986년 원래 IBM PC/AT까지 거슬러 올라가는 최대 레거시 호환성을 제공하기 위해 BIOS 메뉴에서 특별히 활성화되지 않는 한 모든 펌웨어 수준 USB 저장소 지원을 완전히 숨깁니다(가능한 한). ). UEFI는 이러한 부담이 없으며 기본적으로 부트로더에 USB 저장소 지원을 제공할 수 있습니다.
답변2
보안 부팅 및 UEFI/EFI BIOS에 문제가 있을 가능성이 높습니다.
부팅 가능한 USB를 생성할 때 PC/노트북 BIOS 구성(레거시 또는 UEFI일 수 있음)에 맞게 제작되었는지 확인해야 합니다.
VM 이미지에서 부팅 가능한 장치를 생성한다는 점을 고려하면 아마도 이 점을 고려하지 않았을 것입니다.
Arch Linux wiki[1]에 따르면 GPT/UEFI 및 GRUB를 사용하는 경우 다음이 필요합니다.
# grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub --removable --recheck
하지만 귀하의 설정에 적합한지는 모르겠습니다. 다른 옵션을 시도하고 싶다면 VMDK를 ISO로 변환하고 "불타다“Etcher와 같은 플래시 유틸리티를 사용하여 ISO를 USB 플래시 드라이브로 변환https://etcher.io
저것가능한UEFI 문제를 해결합니다.