Bagaimana cara membuat USB yang dapat di-boot dari ISO yang dapat di-boot dengan baris perintah di Linux?

50

Saya memiliki CD yang dibuat dari file ISO yang saya gunakan untuk menginstal versi kustom Ubuntu melalui linux plop.

CD berfungsi dengan baik tetapi saya ingin menggunakan drive USB yang dapat di-boot. Saya menggunakan perintah dd untuk mencoba dan membuat USB bootable:

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

Sekarang ini tidak menyalin file dan membuat USB bootable tetapi saya mendapatkan kesalahan "Sistem operasi yang hilang"

Ada ide?

xsdf
sumber
Apakah Anda hanya memiliki akses ke baris perintah? Ada antarmuka seperti Unetbootin yang bekerja dengan sangat baik dan berjalan di linux ..
dashboard
3
@dashboard Saya lebih suka baris perintah karena tersedia di setiap mesin linux.
xsdf
askubuntu.com/questions/116942/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
@dashboard - Alat GUI sepertinya tidak pernah bekerja dengan baik untuk saya, dan ini secara konsisten benar selama bertahun-tahun. Saya senang mengetahui metode baris perintah. Saya merasa lebih mudah dan lebih dapat diandalkan. Ini jauh lebih tidak membuat frustrasi!
MountainX

Jawaban:

58

Ok setelah beberapa penelitian saya sudah menemukan solusi, dan saya akan pergi melalui langkah demi langkah. Masalahnya dua kali lipat.

  1. Sambungkan USB flash drive dan tentukan perangkat yang terpasang dengan perintah:

    sudo fdisk -l
    

    Kali ini adalah / dev / sdc1 untuk saya, jadi saya akan menggunakan itu sebagai contoh saya.

  2. Umount perangkat

    umount /dev/sdc1
    
  3. Tidak yakin jika perlu tetapi saya memformat drive di FAT32, untuk berjaga-jaga

    sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
    
  4. Sekarang ISO saya menggunakan isolinux bukan syslinux. Saya tahu itu bekerja dengan CD jadi saya tahu bahwa saya perlu memanggil perintah isohybrid, yang memungkinkan ISO untuk dikenali oleh BIOS dari hard drive.

     isohybrid filename.iso
    

    Anda dapat mengetahui lebih lanjut tentang perintah ini di sini , tetapi ini adalah penyebab dari pesan "Sistem Operasi Hilang" Masalah pertama telah diperbaiki, tetapi sekarang dikatakan "isolinux.bin hilang atau rusak"

  5. Langkah selanjutnya adalah menyalin iso. Masalah kedua saya terletak di sini, di mana saya menyalin ke partisi, sdc1, bukan perangkat, sdc.

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

    Tampaknya ini berfungsi dengan baik, tetapi forum tempat saya mendapatkan perbaikan terakhir, disarankan untuk melakukan hal berikut sebelum mencabut perangkat:

    sync
    sudo eject /dev/sdc
    
xsdf
sumber
3
Inilah cara untuk memeriksa kemajuan dd: unix.stackexchange.com/a/11264/13011 .
Nikos Alexandris
3
Membuat asumsi di sini, saya pikir mkdosfsperintah itu mungkin tidak diperlukan, karena iso memiliki sistem file yang sudah ada di dalamnya (mungkin termasuk MBR, tidak yakin) yang disalin ke awal perangkat blok. Man, isohybridadalah perintah yang keren, tidak tahu tentang itu!
Ehtesh Choudhury
1
untuk windows 7 bootable instal USB, lihat juga superuser.com/questions/256869/…
cwd
7
Langkah # 3 tidak perlu; yang ddperintah pada langkah # 5 akan melenyapkan filesystem yang baru dibuat dengan isi dari ISO.
ewhac
Saya hampir 12 jam mencari masalah yang sama sampai saya menemukan posting Anda di sini dan saya memang mengikuti dan melangkah dan ... itu berhasil! (langkah 5 adalah masalah saya juga, saya belum prodi linux, jadi terima kasih)
Ismael
3

Ini adalah masalah umum dengan stik USB SanDisk, atau stik yang tidak diformat dalam FAT32.

Jika tidak salah satu dari mereka itu pasti masalah dengan urutan partisi tongkat Anda atau file syslinux.cfg.

Shouvik Sayef
sumber
USB flash drive dari Verbatim. Saya diformat ulang di FAT32 hanya untuk memastikan dan masih mendapat kesalahan yang sama.
xsdf
1

isohybridmungkin tidak selalu berhasil. Sebagai contoh, saya punya .iso dengan FreeDOS dan isohybrid tidak dapat menemukan beberapa file penting di sana (saya tidak tahu apakah mereka seharusnya diletakkan di sana oleh syslinux, yang saya gunakan juga, atau apa pun). Saya mengusulkan beberapa alternatif di sini.

1) Instal bootloader lain di sana seperti GRUB. Dijelaskan di sini :

"Asumsikan partisi USB stick Anda yang pertama adalah FAT32 dan partisi itu adalah / dev / sdy1" (Saya grub2menggunakan Fedora Core saya, jadi saya sedikit mengubah perintahnya):

# 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 menawarkan metode majemuk dengan GRUB dan syslinux di sini (walaupun saya tidak mengerti bagaimana mereka diluncurkan grub>- saya tidak bisa boot dari usb ke tahap itu).

3) Berikut ini adalah posting yang mungkin berguna - ia mengatakan 'Asalkan command.com, kernel.sys, syslinux.cfg, ldlinux.sys dan file fat32lba.bss ada di root drive dan MBR dan boot sektor tidak ditulis ulang drive harus tetap bisa di-boot. '

4) Di sini dijelaskan cara membuat file .iso yang dapat di-boot dengan syslinux bootloader. Mereka bahkan tidak menggunakan isohybrid. Sayangnya itu tidak membantu saya (mungkin karena syslinux).

5 *) Gunakan program windows via wine. Saya mencoba rufus, tetapi itu tidak berhasil, tidak dapat menemukan perangkat.

Saya memperingatkan Anda bahwa sayangnya saya tidak dapat menyelesaikan masalah ini, perangkat saya tidak dapat di-boot, tetapi saya berharap ini dapat bermanfaat bagi orang lain (juga mereka yang ingin menginstal bukan linux di usb). Gambar usb yang dihasilkan oleh chtaube bekerja untuk saya, jadi saya pikir metode ini benar.

UPD: Metode ke-3 benar-benar berfungsi (dengan koreksi untuk file instalasi khusus).

UPD2: (tautan tetap). Masalah dengan isohybriditu mungkin karena versi isolinux.bin pada iso dan sistem saya berbeda. Kompilasi ulang iso menggunakan genisoimageseperti yang disarankan di sini :

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

Ada beberapa masalah juga, mereka diselesaikan dengan metode di sini sebelum genisoimage:

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

== end UPD2 ==

Yaroslav Nikitenko
sumber
2: freedos.sourceforge.net/wiki/index.php/USB#Linux_2 Anda dapat menambahkan tautan ini ke pos jika sistem mempercayai Anda lebih dari saya. StackOverflow sudah mengenal saya dengan baik, jadi mengapa masalah seperti itu di superuser? Saya juga punya masalah dalam memposting ini, itu tidak menunjukkan kepada saya bahwa jawaban saya sudah diposting.
Yaroslav Nikitenko
Tampaknya pengguna super menghitung tautan dengan referensi mereka, yaitu jika saya menautkan dua kali ke sumber yang sama, itu dihitung. Ini sepertinya bug. Solusi di UPD datang dari spiderbird.com/tag/fat32lba-bss
Yaroslav Nikitenko
Semua tautan di komentar diperbaiki. Saya meninggalkan mereka di sini untuk menunjukkan berapa banyak masalah yang diakibatkan oleh kebijakan ini.
Yaroslav Nikitenko
0

Anda dapat menggunakan bootisoutilitas , yang melakukan hal itu, dengan aman:

bootiso -d /dev/sdb filename.iso

bootiso akan memeriksa apakah perangkat yang dipilih /dev/sdbterhubung melalui USB dan gagal jika tidak, yang merupakan plus keamanan besar. Ini juga akan mendeteksi secara otomatis perangkat USB jika ada tepat satu drive USB yang terhubung ke sistem Anda, lihat dalam tindakan:

Jika Anda ingin menginstal syslinux bootloader untuk menghindari masalah yang disebutkan oleh @xsdf, gunakan -bopsi:

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

Untuk menginstalnya:

curl -L https://rawgit.com/jsamr/bootiso/latest/bootiso -O
chmod +x bootiso
Jules Randolph
sumber