Jak utworzyć bootowalny USB z bootowalnego ISO za pomocą wiersza poleceń w systemie Linux?


50

Mam płytę CD utworzoną z pliku ISO, którego używam do instalowania niestandardowej wersji Ubuntu przez plop linux.

Płyta CD działa dobrze, ale zamiast tego chciałbym użyć rozruchowego napędu USB. Użyłem polecenia dd, aby spróbować utworzyć rozruchowy USB:

dd if=filename.iso of=/dev/sdb1 bs=4k

Teraz kopiuje pliki i sprawia, że ​​USB można uruchomić, ale pojawia się błąd „Brak systemu operacyjnego”

Jakieś pomysły?


Czy masz dostęp tylko do wiersza poleceń? Istnieją interfejsy takie jak Unetbootin, które działają bardzo dobrze i działają na systemie Linux ..
Panel kontrolny

3
@ panel Wolałbym linię poleceń, ponieważ jest ona dostępna na każdym komputerze z systemem Linux.
xsdf


@dashboard - Narzędzia GUI nigdy nie wydają się działać dobrze dla mnie, i to jest konsekwentne przez wiele lat. Cieszę się, że znam metodę wiersza poleceń. Uważam to za łatwiejsze i bardziej niezawodne. To jest o wiele mniej frustrujące!
MountainX

Odpowiedzi:


58

Ok, po kilku badaniach wymyśliłem rozwiązanie i przejrzę je krok po kroku. Problem był dwojaki.

  1. Podłącz napęd flash USB i określ urządzenie, na którym jest zainstalowany, za pomocą polecenia:

    sudo fdisk -l
    

    Tym razem było to dla mnie / dev / sdc1, więc użyję tego jako mojego przykładu.

  2. Zamontuj urządzenie

    umount /dev/sdc1
    
  3. Nie wiem, czy to konieczne, ale na wszelki wypadek sformatowałem dysk w FAT32

    sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
    
  4. Teraz moje ISO używało izolinux, a nie syslinux. Wiedziałem, że działa z płytami CD, więc doszedłem do wniosku, że muszę wywołać polecenie isohybrid, które pozwala BIOSowi rozpoznać ISO z dysku twardego.

     isohybrid filename.iso
    

    Możesz dowiedzieć się więcej o tym poleceniu tutaj , ale to było przyczyną komunikatu „Brakujący system operacyjny”. Pierwszy problem został naprawiony, ale teraz powiedział „brak lub uszkodzenie pliku isolinux.bin”

  5. Następnym krokiem jest skopiowanie ISO. Mój drugi problem polegał na tym, że kopiowałem na partycję sdc1, a nie na urządzenie sdc.

    sudo dd if=filename.iso of=/dev/sdc bs=4k
    

    Wydaje się, że działa to dobrze, ale na forum, na którym mam ostatnią poprawkę, przed odłączeniem urządzenia zaleca się wykonanie następujących czynności:

    sync
    sudo eject /dev/sdc
    

3
Oto sposób sprawdzenia postępu dd: unix.stackexchange.com/a/11264/13011 .
Nikos Alexandris

3
Przyjmując tutaj założenie, myślę, że mkdosfspolecenie może nie być konieczne, ponieważ w ISO znajduje się już system plików (prawdopodobnie zawierający MBR, nie jestem pewien), który jest kopiowany na początek urządzenia blokowego. Człowieku, isohybridto fajne polecenie, nie wiedziałem o tym!
Ehtesh Choudhury

1
dla Windows 7 bootowalnej instalacji USB, patrz także superuser.com/questions/256869/…
cwd

7
Krok # 3 jest niepotrzebny; ddpolecenia w kroku # 5 będzie zniszczyć nowo utworzony system plików z zawartością ISO.
ewhac

Prawie 12 godzin szukam tego samego problemu, dopóki nie znajdę tu twojego postu, a ja śledzę i krok i ... to zadziałało! (krok 5 też był moim problemem, nie jestem jeszcze prow systemie Linux, więc dziękuję)
Ismael

3

Jest to częsty problem z pamięciami USB SanDisk lub pamięciami niesformatowanymi w FAT32.

Jeśli nie któryś z nich, z pewnością jest to problem z kolejnością partycji stick lub plikiem syslinux.cfg.


Pamięć flash USB pochodzi od firmy Verbatim. Ponownie sformatowałem w FAT32, aby się upewnić i nadal otrzymałem ten sam błąd.
xsdf

1

isohybridnie zawsze może działać. Na przykład miałem .iso z FreeDOS i izohybrid nie był w stanie znaleźć tam ważnych plików (nie wiem, czy powinny zostać tam umieszczone przez syslinux, którego też użyłem, czy cokolwiek innego). Proponuję tutaj kilka alternatyw.

1) Zainstaluj tam inny program ładujący, taki jak GRUB. Wyjaśniono to tutaj :

„Załóżmy, że pierwszą partycją pamięci USB jest FAT32, a jej partycją jest / dev / sdy1” (miałem grub2na Fedorze Core, więc nieco zmieniłem polecenia):

# mkdir -p /mnt/usb ; mount /dev/sdy1 /mnt/usb
# grub2-install --target=i386-pc --recheck --debug --boot-directory=/mnt/usb/boot /dev/sdy
# grub2-mkconfig -o /mnt/usb/boot/grub2/grub.cfg

# optional, backup config files of grub.cfg
# mkdir -p /mnt/usb/etc/default
# cp /etc/default/grub /mnt/usb/etc/default
# cp -a /etc/grub.d /mnt/usb/etc

# sync; umount /mnt/usb

2) FreeDOS wiki oferuje metodę związek z GRUB i syslinux tutaj (choć nie rozumiem, w jaki sposób rozpoczęła grub>- nie mogę uruchomić z USB do tego etapu).

3) Oto post, który może być przydatny - mówi: „Tak długo, jak pliki command.com, kernel.sys, syslinux.cfg, ldlinux.sys i fat32lba.bss znajdują się w katalogu głównym dysku, a MBR i boot sektor nie został przepisany, dysk powinien pozostać bootowalny ”.

4) Tutaj wyjaśniono, jak wygenerować rozruchowy plik .iso za pomocą programu ładującego syslinux. Nie używają nawet izohybrydu. Niestety to mi nie pomogło (może z powodu syslinux).

5 *) Użyj programu Windows za pośrednictwem wine. Próbowałem Rufusa, jednak to nie działało, nie mogłem znaleźć urządzenia.

Ostrzegam, że niestety nie udało mi się rozwiązać tego problemu, nie można uruchomić mojego urządzenia, ale mam nadzieję, że może to być przydatne dla innych osób (także tych, którzy nie chcą instalować Linuksa na USB). Obraz USB wygenerowany przez chtaube działał jednak dla mnie, więc myślę, że te metody są poprawne.

UPD: Trzecia metoda naprawdę działa (z korektą niestandardowego pliku instalacyjnego).

UPD2: (stałe linki). Problem isohybridbył prawdopodobnie dlatego, że wersje pliku isolinux.bin na iso i mój system były różne. Ponowne skompilowanie pliku iso, genisoimagezgodnie z sugestią tutaj :

genisoimage -l -r -J -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -c isolinux/boot.cat -o fd11new.iso fd11new

Były też pewne problemy, zostały one rozwiązane tutaj metodą przed genisoimage:

cp /boot/extlinux/*.c32 fd11new/isolinux/
extlinux --install /boot/isolinux

== koniec UPD2 ==



2nd: freedos.sourceforge.net/wiki/index.php/USB#Linux_2 Możesz dodać te linki do postu, jeśli system ufa ci bardziej niż mnie. StackOverflow już mnie dobrze zna, więc po co taki problem u administratora? Miałem też problemy z opublikowaniem tego, nie pokazało mi to, że moja odpowiedź została już opublikowana.
Yaroslav Nikitenko

Wygląda na to, że superużytkownik zlicza linki według ich odnośników, tj. Jeśli połączę dwa razy z tym samym zasobem, zostanie to policzone. To wydaje się być błędem. Obejście w UPD pochodzi od spiderbird.com/tag/fat32lba-bss
Jarosław Nikitenko

Wszystkie linki w komentarzach zostały naprawione. Zostawiam ich tutaj, aby pokazać, ile problemów przynosi ta polityka.
Yaroslav Nikitenko

0

Możesz użyć bootisonarzędzia , które dokładnie to robi, bezpiecznie:

bootiso -d /dev/sdb filename.iso

bootiso sprawdzi, czy wybrane urządzenie /dev/sdbjest podłączone przez USB, a jeśli nie, zawiedzie, co jest dużym plusem bezpieczeństwa. Automatycznie wykrywa urządzenie USB, jeśli do systemu jest podłączony dokładnie jeden dysk USB, zobacz, jak działa:

Jeśli chcesz zainstalować bootloader syslinux, aby obejść problemy wymienione przez @xsdf, użyj -bopcji:

 bootiso -b -d /dev/sdb filename.iso

Aby zainstalować:

curl -L https://rawgit.com/jsamr/bootiso/latest/bootiso -O
chmod +x bootiso
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.