Oto sposób na stworzenie trwałego napędu USB Debiana. Pozwoli to zainstalować brakujące pakiety, które odtąd będą dostępne na każdym rozruchu na żywo przy użyciu trwałości. Ponieważ ponownie tworzymy zawartość systemu plików obrazu ISO na żywo w systemie plików z możliwością odczytu i zapisu, możemy zmienić konfiguracje programu ładującego, aby włączyć trwałość i ustawić układ klawiatury podczas rozruchu.
Opisane tutaj kroki zostały przetestowane pod kątem pracy na odcinku i pogromcy Debiana, aby stworzyć obraz na żywo odcinka Debiana.
W grę wchodzi wiele etapów, ale wydaje się, że ta metoda jest nadal dość wydajna.
Oświadczenie: utracisz dane na docelowym dysku USB, a jeśli zepsujesz poniższe polecenia, możesz później bardzo żałować. Nie jestem odpowiedzialny za twoje działania.
Czuję się szczęśliwy
Jeśli masz dzisiaj szczęście, możesz wypróbować skrypt bash automatyzujący ten proces. Podaj ścieżkę obrazu ISO jako pierwszy parametr, a nazwę urządzenia blokującego napęd USB jako drugi. Zauważ, że ten skrypt jest niesamowicie niebezpieczny i nie powinieneś go wykonywać bez uprzedniego przeczytania i zrozumienia.
TL; DR
Pobierz obraz ISO na żywo Debiana, a następnie wykonaj następujące czynności:
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
Szczegółowo i z pewnym wyjaśnieniem
Będziesz musiał wykonać większość poniższych poleceń z podwyższonymi uprawnieniami, tj. Używając sudo
większości systemów GNU / Linux.
Pobieranie
Pobierz obraz ISO Debiana na żywo z wybranym menedżerem okien:
https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/
Pobrany obraz ISO nazywamy po prostu „live.iso”.
Określ dysk docelowy
Znajdź urządzenie, z którego korzysta Twój dysk USB lsblk
. Nazwiemy to /dev/sdX
.
Odmontuj
Odmontuj istniejące partycje na dysku za pomocą umount /dev/sdX*
Utwórz partycje
Potrzebujemy partycji rozruchowej EFI, aby komputery z systemem UEFI mogły się uruchamiać z napędu USB. Następnie potrzebujemy wystarczająco dużej partycji, aby pomieścić oryginalną zawartość obrazu systemu plików ISO na żywo. Ta partycja musi mieć legacy_boot
ustawioną flagę. Następnie dodajemy partycję trwałości, zajmując całe pozostałe miejsce na dysku USB. Możesz to zrobić za pomocą dowolnego narzędzia do partycjonowania z obsługą GPT (pamiętaj o legacy_boot
flagach). Oto przykład z użyciem 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
Tworzy to tabelę partycji GPT i ochronną tabelę partycji MBR.
Twórz systemy plików
Chcemy FAT na EFI i partycji na żywo, chcemy ext4
na paradzie trwałości i wymagamy etykiety, persistence
aby funkcja trwałości działała.
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
Montowanie zasobów
Będziemy musieli zamontować źródłową ISO i docelowe partycje w tymczasowych punktach montowania.
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
Zainstaluj system na żywo
Skopiuj zawartość systemu plików ISO na żywo na partycję LIVE.
cp -ar /tmp/live-iso/* /tmp/usb-live
persistence.conf
Przygotuj system plików trwałości z wymaganym plikiem konfiguracyjnym. Funkcja trwałości nie będzie działać bez tego pliku.
echo "/ union" > /tmp/usb-persistence/persistence.conf
Grub dla obsługi UEFI
Zainstaluj grub2, aby uzyskać obsługę rozruchu UEFI (wymaga to grub-efi-amd64-bin
pakietu w Debianie). Zmusimy grub-install
do nie używać bezpiecznego rozruchu UEFI, które najwyraźniej nie działa z --removable
opcją.
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
Syslinux do obsługi starszych systemów BIOS
Zainstaluj gptmbr.bin
bootloader syslinux na dysku (pobierz syslinux lub zainstaluj pakiet syslinux-common
). Następnie zainstaluj syslinux na partycji na żywo.
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
Poprawka Isolinux
Ponownie użyj konfiguracji isolinux oryginalnego obrazu ISO na żywo do pracy z syslinux.
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
Parametry jądra
Teraz, gdy skopiowaliśmy pliki systemowe na żywo do rzeczywistego systemu plików do odczytu i zapisu, możemy manipulować konfiguracją grub i syslinux.
Dodaj parametr jądra trwałości do menu.cfg
i grub.cfg
. W obu plikach dodaj słowo kluczowe persistence
na końcu odpowiedniego pierwszego wiersza z boot=live
nim.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Ustaw parametr jądra układu klawiatury. W obu plikach dodaj słowa kluczowe na końcu odpowiedniego pierwszego wiersza z boot=live
nim.
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 splash
Napraw obraz powitalny grub (opcjonalnie; przenieśliśmy go do innego katalogu).
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
Odmontowywanie i czyszczenie
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
Dlaczego to powinno działać zarówno dla UEFI, jak i BIOS
Podczas uruchamiania w trybie UEFI komputer przeskanuje partycje FAT zdefiniowane w tabeli partycji GPT. Pierwsza partycja FAT zawiera program ładujący GRUB UEFI, który został znaleziony, ponieważ znajduje się w ścieżce określonej przez UEFI dla dysków wymiennych ( --removable
przełączenie to grub-install
zrobiło). Aby to zadziałało, nie jest wymagany wpis UEFI, wystarczy, że komputer spróbuje uruchomić komputer z napędu USB. Grub jest skonfigurowany do pobierania go z tego miejsca (załaduj grub.cfg, pokaż menu itp.).
Po uruchomieniu w trybie BIOS i wybraniu opcji rozruchu z napędu USB komputer wykona gptmbr.bin
kod bootloadera, który zapisaliśmy na ochronnym MBR napędu USB. Ten bootloader szuka partycji GPT oznaczonej legacy_boot
flagą i chainload syslinux z tej partycji. Następnie Syslinux przejmuje (ładuje menu.cfg, pokazuje menu itp.).
Szyfrowana trwałość
Zamiast używać zwykłego ext4 na partycji trwałości, można najpierw zaszyfrować partycję trwałości za pomocą LUKS (za pomocą cryptsetup
), a następnie sformatować ją za pomocą ext4 (za pomocą odpowiedniej etykiety). Jednak, jak wynika z dokumentacji , system na żywo musi zawierać cryptsetup
pakiet. W przeciwnym razie zaszyfrowana partycja nie może zostać odszyfrowana przez system na żywo. Oznacza to, że najpierw trzeba zbudować niestandardowe ISO na żywo. Jest to jednak poza zakresem tej odpowiedzi.
Historia
Ta --no-uefi-secure-boot
opcja wcześniej nie była częścią połączenia z grub-install
. Stick działał dla mnie dobrze, ale zatrzymał się wraz z Buster Debiana, mimo że bezpieczne uruchamianie jest nadal wyłączone na moim komputerze.