UEFI + BIOS 부팅 가능 라이브 데비안 스트레치 amd64 with persistence


20

현재이 문제에 대해 찾은 모든 정보가 내 취향으로는 충분하지 않습니다. 구식이거나 오도하거나 잘못되었거나 지나치게 복잡 하거나이 특정 질문을 다루지 않는 것 같습니다.

목표 :

  • 부팅 가능한 USB 드라이브 (UEFI 및 레거시 BIOS 모두 지원)
  • (기반) 라이브 데비안 9 (스트레치)
  • 지속성 (기본적으로 UEFI 및 레거시 BIOS 모두)
  • 기본 독일어 키보드 레이아웃
  • 다른 GNU / Linux 시스템의 문제 해결에 적합

원인:

  • 사용할 때마다 키보드 레이아웃을 설정해야하는 것은 정말 골치 아픈 일입니다
  • 기본 데비안 라이브 이미지에서 cryptsetup 및 efibootmgr이 누락되었습니다
  • 그놈 터미널은 기본적 으로이 성가신 흰색 배경을 가지고 있습니다.

해결책 없음 :

  • (재) 맞춤형 데비안 라이브 이미지 구축 (아직 시도하지는 않았지만 지루한 것 같습니다)
  • unetbootin (데비안 스트레치에서 시작할 때 알 수없는 암호를 요구하며 어쨌든 UEFI를 지원하지 않는다고 생각합니다)
  • 무슨 일이 일어나고 있는지 알지 못하는 외국 자동화 프로세스

데비안 라이브 및 설치 이미지는 isohybrid이며를 사용하여 장치를 차단하기 위해 편리하게 작성할 수 있습니다 dd. 그리고 그들은 그런 USB 드라이브에서 작동합니다. 아주 좋습니다! 그러나 라이브 ISO 이미지의 매우 읽기 전용 ISO9660 파일 시스템에 포함 된 grub 및 isolinux 구성을 편집하지 않으면 기본적으로 영어 이외의 키보드 레이아웃으로 시작하는 지속성이 없으며 지속되는 방법이 없습니다. 따라서 라이브 ISO를 USB 드라이브에 쓴 후에도이 매개 변수를 변경할 수 없습니다.

답변:


30

지속성을 가진 데비안 라이브 USB 드라이브를 만드는 방법은 다음과 같습니다. 누락 된 패키지를 설치하여 지속성을 사용하여 모든 라이브 부팅에서 사용할 수 있습니다. 읽기 쓰기 가능 파일 시스템에서 라이브 ISO 이미지 파일 시스템 내용을 재생성하므로 부트 로더 구성을 변경하여 지속성을 활성화하고 부팅시 키보드 레이아웃을 설정할 수 있습니다.

여기에 설명 된 단계는 데비안 스트레치 라이브 이미지를 만들기 위해 데비안 스트레치 및 버스터에서 작동하도록 테스트되었습니다.

많은 단계가 관련되어 있지만이 방법은 여전히 ​​매우 효율적인 것으로 보입니다.

면책 조항 : 대상 USB 드라이브의 데이터가 손실되고 아래 명령을 엉망으로 만들면 나중에 미안하다고 느낄 수 있습니다. 나는 당신의 행동에 책임이 없습니다.

운이 좋은 느낌

오늘 운이 좋으면 프로세스를 자동화 하는 bash 스크립트를 사용해보십시오 . ISO 이미지 경로를 첫 번째 매개 변수로, USB 드라이브 블록 장치 이름을 두 번째 매개 변수로 지정하십시오. 이 스크립트는 매우 위험 하므로 먼저 읽고 이해하지 않고 실행하면 안됩니다.

TL; DR

데비안 라이브 ISO 이미지를 가져온 후 다음을 수행하십시오.

umount /dev/sdX*
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on

mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3

mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso

cp -ar /tmp/live-iso/* /tmp/usb-live

echo "/ union" > /tmp/usb-persistence/persistence.conf

grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2

mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso

상세하고 약간의 설명과 함께

sudo대부분의 GNU / Linux 시스템에서 높은 권한으로 다음 명령을 대부분 실행해야 합니다.

다운로드

선택한 창 관리자와 함께 데비안 라이브 ISO 이미지를 다운로드하십시오.

https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/

다운로드 한 ISO 이미지를 간단히 "live.iso"라고합니다.

대상 드라이브 결정

을 사용하여 USB 드라이브 인 장치를 찾으십시오 lsblk. 우리는 그것을 전화 할 것입니다 /dev/sdX.

마운트 해제

다음을 사용하여 드라이브에서 기존 파티션 마운트 해제 umount /dev/sdX*

파티션 생성

UEFI PC를 USB 드라이브에서 부팅하려면 EFI 부팅 파티션이 필요합니다. 그런 다음 원본 라이브 ISO 파일 시스템 이미지 내용을 담을 수있는 충분히 큰 파티션이 필요합니다. 해당 파티션에는 legacy_boot플래그가 설정되어 있어야합니다 . 그런 다음 USB 드라이브의 나머지 공간을 모두 사용하여 지속성 파티션을 추가합니다. GPT 가능 파티셔닝 도구를 사용하여이를 수행 할 수 있습니다 ( legacy_boot플래그에주의). 다음은 다음을 사용하는 예입니다 parted.

parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on

GPT 파티션 테이블과 보호 MBR 파티션 테이블이 생성됩니다.

파일 시스템 생성

EFI와 라이브 파티션에서 FAT를 원 ext4하고 지속성 분할 persistence을 원하며 지속성 기능이 작동 하려면 레이블이 필요합니다 .

mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3

리소스 장착

소스 ISO 및 대상 파티션을 임시 마운트 지점에 마운트해야합니다.

mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso

라이브 시스템 설치

라이브 ISO 파일 시스템 컨텐츠를 라이브 파티션에 복사하십시오.

cp -ar /tmp/live-iso/* /tmp/usb-live

persistence.conf

필수 구성 파일을 사용하여 지속성 파일 시스템을 준비하십시오. 이 파일이 없으면 지속성 기능이 작동하지 않습니다.

echo "/ union" > /tmp/usb-persistence/persistence.conf

UEFI 지원을위한 Grub

UEFI 부팅 지원을 위해 grub2를 설치하십시오 ( grub-efi-amd64-bin데비안 패키지 가 필요합니다 ). 우리는 강제 grub-install할 수 없습니다 UEFI에게 분명히으로 일을하지 않는 보안 부팅 사용 --removable옵션을 선택합니다.

grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX

레거시 BIOS 지원을위한 Syslinux

gptmbr.bin드라이브에 syslinux 부트 로더를 설치하십시오 (syslinux 다운로드 또는 패키지 설치 syslinux-common). 그런 다음 syslinux를 라이브 파티션에 설치하십시오.

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2

이소 리눅스 수정

syslinux와 함께 작동하려면 원래 라이브 ISO의 isolinux 구성을 재사용하십시오.

mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg

커널 매개 변수

라이브 시스템 파일을 실제 읽기-쓰기 파일 시스템으로 복사 했으므로 grub 및 syslinux 구성을 조작 할 수 있습니다.

지속성 커널 매개 변수를 menu.cfg및에 추가하십시오 grub.cfg. 두 파일 모두 persistence에서 첫 번째 줄 끝에 키워드 를 추가하십시오 boot=live.

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

키보드 레이아웃 커널 매개 변수를 설정하십시오. 두 파일 모두에서 첫 번째 줄 끝에 키워드를 추가하십시오 boot=live.

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

그럽 스플래시

grub 시작 이미지를 수정합니다 (선택 사항 : 다른 디렉토리로 이동).

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg

마운트 해제 및 정리

umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso

이것이 UEFI와 BIOS 모두에서 작동해야하는 이유

UEFI 모드에서 시작할 때 PC는 GPT 파티션 테이블에 정의한 FAT 파티션을 스캔합니다. 첫 번째 FAT 파티션에는 UEFI grub 부트 로더가 있으며,이 드라이브는 이동식 드라이브를 위해 UEFI에서 지정한 경로에 있습니다 (이 작업을 수행 한 --removable스위치 grub-install). UEFI 부팅 항목이 필요하지 않으므로 PC를 USB 드라이브에서 부팅하려고하면됩니다. 해당 grub은 grub.cfg를로드하고 메뉴를 표시하는 등의 작업을 수행하도록 구성되어 있습니다.

BIOS 모드에서 시작하고 USB 드라이브에서 부팅하도록 선택하면 PC는 USB 드라이브 gptmbr.bin의 보호 MBR에 기록한 부트 로더 코드 를 실행합니다 . 해당 부트 로더는 legacy_boot해당 파티션에서 플래그와 chainload syslinux 로 표시된 GPT 파티션을 찾습니다 . 그런 다음 Syslinux가 대신합니다 (load menu.cfg, 메뉴 표시 등).

암호화 된 지속성

지속성 파티션에서 일반 ext4를 사용하는 대신 먼저 LUKS로 지속성 파티션을 암호화 cryptsetup한 다음 (을 사용하여 ) ext4를 사용하여 지속성 파티션 을 포맷 할 수 있습니다 (적절한 레이블 사용). 그러나 설명서에 나와 있듯이 라이브 시스템에는 cryptsetup패키지 가 포함되어 있어야 합니다. 그렇지 않으면 라이브 시스템에서 암호화 된 파티션을 해독 할 수 없습니다. 즉, 사용자 정의 라이브 ISO를 먼저 구축해야합니다. 그러나 이것은이 답변의 범위를 벗어납니다.

역사

--no-uefi-secure-boot옵션은 이전에 대한 호출의 일부가 아니 었습니다 grub-install. 스틱은 나에게 잘 작동했지만 보안 부팅이 여전히 내 컴퓨터에서 비활성화되어 있어도 데비안 버스터와 함께 중지되었습니다.


1
감사합니다. 여기에 계정을 만들었습니다. 훌륭한 매뉴얼. 작은 제안-지속성 파티션을 암호화하는 것이 좋습니다.
Petr Havlicek

1
@PetrHavlicek 맞습니다. 나는 그것이 쉬운 일이라고 생각하지만 다른 문제와 함께이 Q & A를 만든 이후 여가 시간을 보냈으므로 여전히이 아이디어를 다시 방문해야합니다 (감사합니다 :).
schlimmchen

잘 작동합니다! 그래도 몇 가지 추가 설명이 좋을 것입니다. (매뉴얼 페이지에서 모든 것을 볼 수 있지만, 예를 들어 mktable은 mklable과 동일하지만 실제로 문서화되지는 않습니다.)
mikuszefski

지속성 볼륨을 포함하는 FAT 형식의 USB 스틱에 파일 만있을 수 있습니까? 파일을 루프 마운트하여 가능해야합니다. 그러나 데비안에게 initrd에게 파티션 대신 파일을 가져 오라고하는 방법은 무엇입니까?
ceving

자세한 내용은 debian-live.alioth.debian.org/live-manual/stable/manual/html/… 을 참조하십시오 . 간단히 말해서 : 파일 시스템의 루트에 이미지 (스파 스) 파일을 생성하고 파일 이름을 'persistence'로 지정한 다음 (예 : ext4) 형식을 지정하십시오.
schlimmchen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.