วิธีการสร้าง USB ที่บูตได้จาก ISO ที่สามารถบูตได้ด้วยบรรทัดคำสั่งบน Linux


50

ฉันมีซีดีที่สร้างจากไฟล์ ISO ซึ่งฉันใช้ในการติดตั้ง Ubuntu รุ่นที่กำหนดเองผ่านทาง plop linux

ซีดีใช้งานได้ดี แต่ฉันต้องการใช้ไดรฟ์ USB ที่สามารถบู๊ตได้แทน ฉันใช้คำสั่ง dd เพื่อลองและสร้าง USB ที่สามารถบู๊ตได้:

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

ตอนนี้จะคัดลอกไฟล์และทำให้ USB สามารถบูตได้ แต่ฉันได้รับข้อผิดพลาด "ระบบปฏิบัติการที่หายไป"

ความคิดใด ๆ


คุณมีสิทธิ์เข้าถึงบรรทัดคำสั่งหรือไม่ มีการเชื่อมต่อเช่น UNetbootin ที่ทำงานได้เป็นอย่างดีและทำงานบนลินุกซ์มี ..
แดชบอร์ด

3
@ แดชบอร์ดฉันต้องการบรรทัดคำสั่งเพราะมันมีอยู่ในทุกเครื่องลินุกซ์
xsdf


@dashboard - เครื่องมือ GUI ดูเหมือนจะไม่ทำงานได้ดีสำหรับฉันและนี่เป็นเรื่องจริงตลอดหลายปีที่ผ่านมา ฉันยินดีที่จะรู้วิธีการบรรทัดคำสั่ง ฉันพบว่าง่ายขึ้นและน่าเชื่อถือยิ่งขึ้น มันน่าผิดหวังน้อยกว่ามาก!
MountainX

คำตอบ:


58

ตกลงหลังจากการวิจัยบางอย่างฉันได้หาวิธีแก้ปัญหาและฉันจะทำมันทีละขั้นตอน ปัญหาเป็นสองเท่า

  1. เสียบแฟลชไดรฟ์ USB และตรวจสอบอุปกรณ์ที่ติดตั้งด้วยคำสั่ง:

    sudo fdisk -l
    

    คราวนี้มันเป็น / dev / sdc1 สำหรับฉันดังนั้นฉันจะใช้มันเป็นตัวอย่างของฉัน

  2. เมานต์อุปกรณ์

    umount /dev/sdc1
    
  3. ไม่แน่ใจว่าจำเป็น แต่ฉันฟอร์แมตไดรฟ์ใน FAT32 ในกรณีที่

    sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
    
  4. ตอนนี้ ISO ของฉันใช้ isolinux ไม่ใช่ syslinux ฉันรู้ว่ามันใช้งานได้กับซีดีดังนั้นฉันจึงคิดว่าฉันต้องโทรหาคำสั่ง isohybrid ซึ่งทำให้ไบออสรู้จัก BIOS จากฮาร์ดไดรฟ์

     isohybrid filename.iso
    

    คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งนี้ได้ที่นี่แต่นี่เป็นสาเหตุของข้อความ "ระบบปฏิบัติการที่หายไป" ปัญหาแรกได้รับการแก้ไขแล้ว แต่ตอนนี้มันบอกว่า "isolinux.bin ขาดหายไปหรือเสียหาย"

  5. ขั้นตอนต่อไปคือการคัดลอก iso ปัญหาที่สองของฉันอยู่ที่นี่ซึ่งฉันกำลังคัดลอกไปยังพาร์ติชัน sdc1 ไม่ใช่อุปกรณ์ sdc

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

    ดูเหมือนว่าจะใช้งานได้ดี แต่ฟอรัมที่ฉันได้รับการแก้ไขล่าสุดขอแนะนำให้ทำสิ่งต่อไปนี้ก่อนที่จะถอดอุปกรณ์:

    sync
    sudo eject /dev/sdc
    

3
นี่คือวิธีการตรวจสอบสำหรับความคืบหน้าของ DD: unix.stackexchange.com/a/11264/13011
Nikos Alexandris

3
ทำให้สมมติฐานที่นี่ฉันคิดว่าmkdosfsคำสั่งอาจไม่จำเป็นเนื่องจาก iso มีระบบไฟล์อยู่แล้ว (อาจรวมถึง MBR ไม่แน่ใจ) ที่ถูกคัดลอกไปยังจุดเริ่มต้นของอุปกรณ์บล็อก ผู้ชายisohybridเป็นคำสั่งที่ยอดเยี่ยมไม่รู้เกี่ยวกับมัน!
Ehtesh Choudhury

1
สำหรับ Windows 7 ที่สามารถบู๊ตได้ติดตั้ง USB โปรดดูsuperuser.com/questions/256869/…
cwd

7
ขั้นตอนที่ # 3 ไม่จำเป็น ddคำสั่งในขั้นตอนที่ 5 จะลบล้างระบบแฟ้มที่สร้างขึ้นใหม่ที่มีเนื้อหาของมาตรฐาน ISO
ewhac

ฉันใช้เวลาเกือบ 12 ชั่วโมงในการค้นหาปัญหาเดียวกันนี้จนกว่าฉันจะพบโพสต์ของคุณที่นี่และฉันทำตามขั้นตอนแล้วและ ... มันได้ผล! (ขั้นตอนที่ 5 เป็นปัญหาของฉันเช่นกันฉันยังไม่ได้proอยู่ใน linux ดังนั้นขอขอบคุณ)
Ismael

3

นี่เป็นปัญหาทั่วไปของ SanDisk USB sticks หรือ sticks ไม่ได้ฟอร์แมตใน FAT32

หากไม่ใช่อย่างใดอย่างหนึ่งเป็นปัญหาแน่นอนกับลำดับพาร์ติชันของคุณ stick หรือ syslinux.cfg ไฟล์


USB แฟลชไดรฟ์มาจากคำต่อคำ ฉันฟอร์แมตใหม่ใน FAT32 เพื่อให้แน่ใจและยังคงมีข้อผิดพลาดเดียวกัน
xsdf

1

isohybridอาจไม่ได้ผลเสมอไป ตัวอย่างเช่นฉันมี. iso พร้อม FreeDOS และ isohybrid ไม่สามารถหาไฟล์สำคัญบางอย่างได้ที่นั่น (ฉันไม่รู้ว่าพวกเขาควรใส่ syslinux ที่ฉันใช้ด้วยหรืออย่างอื่น) ฉันเสนอทางเลือกหลายอย่างที่นี่

1) ติดตั้ง bootloader ตัวอื่นที่นั่นเช่น GRUB มันอธิบายไว้ที่นี่ :

"สมมติว่าพาร์ติชันแรกของยูเอสบีสติ๊กของคุณคือ FAT32 และพาร์ติชั่นนั้นเป็น / dev / sdy1" (ฉันมีgrub2บน Fedora Core ของฉันดังนั้นฉันจึงเปลี่ยนคำสั่งเล็กน้อย):

# 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 เสนอวิธีผสมกับ GRUB และ syslinux ที่นี่ (แต่ฉันไม่เข้าใจว่าพวกเขาเปิดตัวอย่างไรgrub>- ฉันไม่สามารถบูตจาก usb จนถึงขั้นตอนนั้นได้)

3) นี่คือโพสต์ที่อาจเป็นประโยชน์ - มีข้อความระบุว่า "ตราบใดที่คอมไฟล์, kernel.sys, syslinux.cfg, ldlinux.sys และไฟล์ fat32lba.bss อยู่ในรากของไดรฟ์และ MBR และบูต เซ็กเตอร์ไม่ได้ถูกเขียนใหม่ไดรฟ์ควรจะสามารถบูตได้ '

4) ที่นี่มีการอธิบายวิธีสร้างไฟล์. iso ที่สามารถบู๊ตได้ด้วย syslinux bootloader พวกเขาไม่ได้ใช้ isohybrid น่าเสียดายที่ไม่ได้ช่วยฉัน (อาจเป็นเพราะ syslinux)

5 *) ใช้โปรแกรม Windows wineผ่าน ฉันลองรูฟัส แต่ไม่ได้ผลก็หาอุปกรณ์ไม่เจอ

ฉันเตือนคุณว่าน่าเสียดายที่ฉันไม่สามารถแก้ปัญหานี้ได้อุปกรณ์ของฉันไม่สามารถบูตได้ แต่ฉันหวังว่านี่อาจเป็นประโยชน์สำหรับคนอื่น ๆ (เช่นผู้ที่ต้องการติดตั้งไม่ใช่ linux บน usb) อิมเมจ usb ที่สร้างโดย chtaube ทำงานได้ดีสำหรับฉันดังนั้นฉันคิดว่าวิธีการเหล่านี้ถูกต้อง

UPD: วิธีที่ 3 ใช้งานได้จริง (ด้วยการแก้ไขสำหรับไฟล์การติดตั้งแบบกำหนดเอง)

UPD2: (ลิงก์ถาวร) ปัญหาของisohybridอาจเป็นเพราะรุ่นของ isolinux.bin บน iso และระบบของฉันแตกต่างกัน รีคอมไพล์ iso โดยใช้genisoimageตามที่แนะนำไว้ที่นี่ :

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

มีปัญหาบางอย่างเช่นกันพวกเขาได้รับการแก้ไขโดยวิธีที่นี่ก่อน genisoimage:

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

== end UPD2 ==



2nd: freedos.sourceforge.net/wiki/index.php/USB#Linux_2คุณสามารถเพิ่มลิงก์เหล่านี้ไปยังโพสต์ได้หากระบบเชื่อใจคุณมากกว่าฉัน StackOverflow รู้จักฉันดีอยู่แล้วเหตุใดจึงมีปัญหาเช่นนี้ที่ superuser นอกจากนี้ฉันมีปัญหาในการโพสต์มันไม่ได้แสดงให้ฉันเห็นว่าคำตอบของฉันถูกโพสต์แล้ว
Yaroslav Nikitenko

ดูเหมือนว่า superuser จะนับลิงก์ตามการอ้างอิงของพวกเขาเช่นถ้าฉันลิงก์สองครั้งไปยังแหล่งข้อมูลเดียวกันมันจะถูกนับ นี่น่าจะเป็นบั๊ก วิธีแก้ปัญหาใน UPD มาจากspiderbird.com/tag/fat32lba-bss
Yaroslav Nikitenko

ลิงก์ทั้งหมดในความคิดเห็นได้รับการแก้ไข ฉันปล่อยให้พวกเขาที่นี่เพื่อแสดงว่านโยบายนี้มีปัญหามากน้อยเพียงใด
Yaroslav Nikitenko

0

คุณสามารถใช้bootisoยูทิลิตี้ซึ่งทำสิ่งนั้นอย่างปลอดภัย:

bootiso -d /dev/sdb filename.iso

bootiso จะตรวจสอบว่าอุปกรณ์ที่เลือก/dev/sdbเชื่อมต่อผ่าน USB และล้มเหลวหากไม่ได้ซึ่งเป็นความปลอดภัยที่ยิ่งใหญ่ นอกจากนี้ยังจะตรวจจับอุปกรณ์ USB โดยอัตโนมัติหากมีไดรฟ์ USB หนึ่งตัวเชื่อมต่อกับระบบของคุณอย่างถูกต้องให้ดำเนินการดังนี้

หากคุณต้องการติดตั้ง syslinux bootloader เพื่อหลีกเลี่ยงปัญหาที่ระบุโดย @xsdf ให้ใช้-bตัวเลือก:

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

วิธีติดตั้ง:

curl -L https://rawgit.com/jsamr/bootiso/latest/bootiso -O
chmod +x bootiso
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.