top of page
Writer's pictureMateusz Kaczyński

Creating a bootable USB

Updated: Apr 30



bootowanie usb



KB000006



Ogólnie zaleca się, aby stosować systemy kontroli wersji, robić kopie zapasowe, wykorzystywać wirtualizację w tym docker, kubernetes, rozwiązania chmurowe z wbudowanymi funkcjami i tak dalej.


Nie każdy jednak ma takie potrzeby, nie zawsze backup został zrobiony, bywa, że zostaliśmy zaatakowani i trzeba wszystko zaorać, no i póki co, nie wszystko da się zdalnie zrealizować bez fizycznej interwencji. Dobrym przykładem jest tu mobilne wykonanie testów przy użyciu HP PC Hardware Diagnostics czy instalacja np. Ubuntu na naszym lokalnym urządzeniu.


By skorzystać z tego KB, muszą być spełnione poniższe założenia:


  • Posiadasz >= Ubuntu 22.04.4 LTS jako system operacyjny

  • USB które posiadasz może zostać sformatowane

  • Masz uprawnienia do instalacji paczek, zależności itp. w systemie

  • Pobrałeś ISO np. Ubuntu


W zasadzie poniższa sekcja opisuje cały proces, bo jak pewnie już wiesz, Ubuntu upraszcza wiele zadań. Pewnie można by poszerzyć znacznie zagadnienie, ale ujmując to nieco metaforycznie, jestem za tym, aby funkcja realizowała konkretnie zadanie, a nie żeby cały program napisany był w jednej funkcji.



Tworzenie bootowalnego USB




Rozpocznij od sprawdzenia, czy posiadasz już narzędzie 'data definition' w skrócie 'dd'


which dd

Jeżeli w rezultacie nie otrzymałeś ścieżki ( no / empty output ), zainstaluj.


Następnie podłącz USB i sprawdź jego identyfikator za pomocą polecenia


lsblk

lub jeśli chcesz odfiltrować takie wyniki jak np. Loop$ użyj:


lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | awk '!/loop/'

Przykładowy wynik 'lsblk' to:


sda 8:0 1 28,7G 0 disk

├─sda1 8:1 1 26,7G 0 part /media/ehalluks/6598-448E

├─sda2 8:2 1 4,9M 0 part

└─sda3 8:3 1 300K 0 part



================================


*TIP: Jak rozpoznać które to USB?


Fakt, nie jest to zawsze oczywiste, ale tych kilka wskazówek powinno pomóc w identyfikacji.


  1. Odfiltruj z listy wszystko czego nie potrzebujesz ( ww. polecenie )

  2. Sprawdź rozmiar dysku ( zwykle ma 8GB, 16GB, 32GB ) i tu pomocne okaże się polecenie lsblk -o NAME,SIZE

  3. Sprawdź punkt montowania, zwykle są to katalogi '/media/username' lub '/mnt'

  4. Jeśli nie jesteś pewny czy sys w ogóle reaguje na USB, możesz użyć 'dmesg | tail' i odszukać czy jest jest jakaś pozycja z urządzeniem SCSI ( nośniki wymienne ). Przykład komunikatu to: Attached SCSI removable disk - wtedy:


dmesg | grep 'Attached SCSI removable disk'

Wreszcie, można też skorzystać ze skryptu, jeśli manualne obserwowanie zmian przed i po nie wchodzi w grę


#!/bin/bash

# zrzut stanu przed
lsblk > before.txt

echo "Wloz usb i odczekaj az otrzymasz komunikat, a następnie naciśnij ENTER."
read input

# zrzut stanu po
lsblk > after.txt

# wynik porownania 
diff before.txt after.txt

Tu trzeba pamiętać o dwóch rzeczach:


  1. Nadaj skryptowi uprawnienia ( chmod +x )

  2. Wywal pliki, w których znalazły się dane, bo są one tymczasowe. Jeśli nie wiesz gdzie zapisałeś, polecam użyć 'find' z parametrem -type f czyli:


sudo find /home/username -type f \( -name 'before.txt' -o -name 'after.txt' \)

================================


Kontynuując...


Nadal posługiwać się będziemy poniższym przykładem:


sda 8:0 1 28,7G 0 disk

├─sda1 8:1 1 26,7G 0 part /media/ehalluks/6598-448E

├─sda2 8:2 1 4,9M 0 part

└─sda3 8:3 1 300K 0 part


trzeba odmontować wszystkie te partycje. Aby się dowiedzieć które zostały zmontowane użyj:


mount | grep /dev/sda

a następnie odmontuj używając np.


sudo umount /dev/sda1
sudo umount /dev/sda2
sudo umount /dev/sda3

Zdarza się że w wynikach otrzymujemy komentarz: 'niezamontowany'. Może to wynikać z niedokładnego sprawdzenia. Ogólnie rzecz biorąc, zignoruj.


Następnie wyczyść USB. Ostrzegam, to zadanie 'chwilę' potrwa. Nie polecam przerywać, chyba że czas operacyjny przekroczył 24h. Nie no żart, ale nie powinno to trwać zbyt długo.


*WARNING: ta operacja wypełni pendrive zerami. Wszystkie dane zostaną utracone. Zanim zdecydujesz się na wykonanie tego polecenia, sprawdź 2x, czy na pewno tego chcesz.


sudo dd if=/dev/zero of=/dev/sda bs=4M status=progress


Etap docelowy: Creating a bootable USB



Po zakończeniu, zapisz obraz ISO na pendrive



sudo dd if=/ścieżka/do/pliku/ubuntu-server.iso of=/dev/sda bs=4M status=progress oflag=sync
   

W poleceniu podmień /ścieżka/do/pliku/ubuntu-server.iso na docelową.

Możesz użyć "home directory expansion" znane jako 'HDE' lub po prostu tyldy.


Gdy wszystkie powyższe kroki zostały wykonane, a proces tworzenia obrazu został zakończony, wykonaj zgodnie z poniższą kolejnością:


1 ↴

sudo sync

2 ↴

sudo umount /dev/sda

3 ↴

sudo eject /dev/sda

Gdzie:


  • 'sync' - służy do sflushowania buforów zapisu na dysku. Ma to znaczenie, bo po użyciu dd trzeba się upewnić, że wszystkie dane zostały faktycznie zapisane na USB

  • 'umount' - służy do zapobiegania utraty danych, zwalnia zasoby systemowe i pozwala zachować spójność plików już znajdujących się na pendrive. Oczywiście wielu użytkowników zapomina o tym i kolejnym etapie.

  • 'eject' - również zapewnia, że wszystkie operacje zostały zakończone oraz że można bezpiecznie 'zamknąć to urządzenie' lub inaczej zamknąć połączenie.





Warto zwrócić uwagę, że właściwie to da się stworzyć skrypt którego budowa mogłaby składać się z poniższych kroków:


>> Sprawdzenie dd

>> Jeżeli brak - instalacja

>> przedstawienie listy lsblk i pobranie danych do odmontowania

>> odmontowanie z ignorowaniem błędów

>> zmienna do przechowania danych do czyszczenia

>> czyszczenie

>> pobranie sciezki do pliku ISO ( lub innego )

>> zapis

>> sync

>> umount

>> eject

>> potwierdzenie


I w gruncie rzeczy, sprawa montażu załatwiona. Bez większej zabawy, można oprogramować proces, dodać alias i ułatwić sobie w ten sposób realizację operacji. Lepiej skrobnąć coś swojego, mieć jakąś kontrolę, przy okazji czegoś się nauczyć, niż np. zasysać apki nieznanego pochodzenia z netu, tudzież GitHuba.





LINKI:



Manual dd:


Repo z przykładowym skryptem





logo ubuntu

Comments


bottom of page