이 문제에 대해 지금까지 내가 찾은 모든 정보는 내 취향에 충분하지 않습니다. 오래되었거나, 오해의 소지가 있거나, 심지어 잘못된 내용이거나, 지나치게 복잡해 보이거나, 이 특정 문제를 다루지 않습니다.
표적:
- 부팅 가능한 USB 드라이브(UEFI 및 레거시 BIOS 지원)
- (기반) 라이브 Debian 9(스트레치), 버스터 또는 불스아이
- 지속성(기본적으로 UEFI 및 레거시 BIOS에서 작동)
- 기본 독일어 키보드 레이아웃
- 다른 GNU/Linux 시스템 문제 해결에 적합
이유:
- 사용할 때마다 키보드 레이아웃을 설정해야 하는 것이 너무 머리가 아프다
- cryptsetup 및 efibootmgr이 기본 Debian Live 이미지에서 누락되었습니다.
- gnome-terminal은 기본적으로 짜증나는 흰색 배경을 가지고 있습니다.
해결책 없음:
- 사용자 정의 데비안 라이브 이미지를 (재)구축합니다. (아직 시도하지는 않았지만 지루해 보입니다.)
- unetbootin(debianstretch에서 부팅할 때 알 수 없는 비밀번호를 묻는 메시지가 나타납니다. 어쨌거나 UEFI를 지원하지 않는 것 같습니다.)
- 일부 외국 자동화 프로세스, 무슨 일이 일어나고 있는지 알 수 없음
데비안 라이브 및 설치 이미지는 isohybrid이며 블록 장치에 쉽게 쓸 수 있습니다 dd
. 그들은 USB 드라이브에서 작업을 수행하는데, 정말 좋습니다! 그러나 grub 및 isolinux 구성(라이브 ISO 이미지의 읽기 전용 ISO9660 파일 시스템에 포함되어 있음)을 편집하지 않으면 지속성이 없으며 영어가 아닌 키보드 레이아웃을 기본값으로 설정할 방법이 없습니다. 따라서 라이브 ISO를 USB 드라이브에 쓴 후에도 이러한 매개변수를 변경할 수 없습니다.
답변1
다음은 더 이상 데비안 책벌레에 작동하지 않습니다(다음과 같은 이유로).
이는 영구 데비안 라이브 USB 드라이브를 만드는 방법입니다. 누락된 패키지를 설치할 수 있으며 그 이후부터 지속성을 사용하여 모든 라이브 시작 시 사용할 수 있습니다. 읽기-쓰기 파일 시스템에서 라이브 ISO 이미지 파일 시스템 콘텐츠를 다시 생성하기 때문에 부트 로더 구성을 변경하여 지속성을 활성화하고 부팅 시 키보드 레이아웃을 설정할 수 있습니다.
여기에 설명된 단계는 테스트되었으며 Debian Stretch에서 작동하고 Buster 및 Bullseye를 사용하여 Debian Stretch 라이브 이미지를 생성합니다.
많은 단계가 필요하지만 이 방법은 매우 효율적인 것 같습니다.
부인 성명:대상 USB 드라이브의 데이터가 손실되며 다음 명령을 엉망으로 만들면 매우 안타까울 수 있습니다. 나는 당신의 행동에 대해 책임을 지지 않습니다.
아주 운이 좋은 것 같아
오늘 운이 특히 좋다면 이렇게 해보세요배쉬 스크립트귀하를 위해 프로세스를 자동화하십시오. ISO 이미지 경로를 첫 번째 매개변수로 전달하고 USB 드라이브 블록 장치 이름을 두 번째 매개변수로 전달합니다. 참고로 이 스크립트는극도로 위험하다그리고 먼저 읽고 이해하지 않은 채 실행해서는 안 됩니다.
긴 이야기 짧게
Debian 라이브 ISO 이미지를 가져오고 패키지( apt install syslinux parted
)를 설치한 후 다음을 수행합니다.
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 4GiB
parted /dev/sdX --script mkpart persistence ext4 4GiB 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 시스템에서 사용할 수 있는 다음 명령 대부분을 실행하려면 높은 권한을 사용해야 합니다 .
다운로드
원하는 창 관리자를 사용하여 Debian 라이브 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 4GiB
parted /dev/sdX --script mkpart persistence ext4 4GiB 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
지속성 파티션에서는 FAT를 사용해야 하며 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
지속성 구성 파일
필수 구성 파일을 사용하여 영구 파일 시스템을 준비합니다. 이 파일이 없으면 지속성 기능이 작동하지 않습니다.
echo "/ union" > /tmp/usb-persistence/persistence.conf
Grub은 UEFI를 지원합니다
UEFI 부팅을 지원하려면 grub2를 설치하십시오( grub-efi-amd64-bin
Debian의 패키지가 필요함). 우리는 grub-install
강요한다아니요--removable
UEFI 보안 부팅을 사용하면 이는 분명히 이 옵션 에 적용되지 않습니다 .
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
syslinux gptmbr.bin
부트로더를 드라이브에 설치합니다(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
ISO리눅스 수리
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는 gptmbr.bin
USB 드라이브의 보호 MBR에 작성한 부트로더 코드를 실행합니다. 부트로더는 플래그가 지정된 GPT 파티션을 찾고 legacy_boot
해당 파티션에서 syslinux를 로드합니다. 그런 다음 Syslinux가 작업을 대신합니다(menu.cfg 로드, 메뉴 표시 등).
암호화된 지속성
cryptsetup
영구 파티션에서 순수 ext4를 사용하는 대신 먼저 LUKS( 사용)로 영구 파티션을 암호화한 다음 ext4(올바른 레이블 사용)로 포맷할 수 있습니다 . 그러나 다음과 같이문서예를 들어 실시간 시스템에는 이 cryptsetup
패키지가 포함되어 있어야 합니다. 그렇지 않으면 암호화된 파티션을 라이브 시스템에서 해독할 수 없습니다. 이는 맞춤형 라이브 ISO를 먼저 구축해야 함을 의미합니다. 그러나 이는 이 답변의 범위를 벗어납니다.
역사
이 --no-uefi-secure-boot
옵션은 이전에는 통화에 포함되지 않았습니다 grub-install
. 스틱은 나에게 잘 작동했지만 데비안 버스터의 출현으로 내 컴퓨터에서 보안 부팅이 여전히 비활성화되어 있지만 이 기능이 중지되었습니다.
이 방법은 데비안 책벌레에게는 더 이상 작동하지 않습니다. ISO 이미지에는 기호 링크가 도입되어 FAT 파일 시스템에 복사할 수 없습니다. 라이브 파일 시스템을 ext*로 변경할 때 다른 부트로더 체인이 필요합니다. 또한 isolinux 부팅 메뉴가 리팩토링되었으며 sed
지속성 및 로케일 플래그를 설정하는 명령을 조정해야 합니다.