Làm cách nào để tạo USB có thể khởi động từ ISO có thể khởi động bằng dòng lệnh trên Linux?


50

Tôi có một đĩa CD được tạo từ tệp ISO mà tôi sử dụng để cài đặt phiên bản Ubuntu tùy chỉnh thông qua plop linux.

CD hoạt động tốt nhưng thay vào đó tôi muốn sử dụng ổ USB có thể khởi động. Tôi đã sử dụng lệnh dd để thử và tạo USB có thể khởi động:

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

Bây giờ điều này không sao chép các tệp và làm cho USB có khả năng khởi động nhưng tôi gặp lỗi "Thiếu hệ điều hành"

Có ý kiến ​​gì không?


Bạn chỉ có quyền truy cập vào dòng lệnh? Có những giao diện như Unetbootin hoạt động rất tốt và chạy trên linux ..
bảng điều khiển

3
@dashboard Tôi thích dòng lệnh hơn vì nó có sẵn trên mọi máy linux.
xsdf


@dashboard - Các công cụ GUI dường như không bao giờ hoạt động tốt đối với tôi và điều này luôn đúng trong nhiều năm. Tôi rất vui khi biết phương pháp dòng lệnh. Tôi thấy nó dễ dàng và đáng tin cậy hơn. Nó là rất ít bực bội!
MountainX

Câu trả lời:


58

Ok sau một số nghiên cứu tôi đã tìm ra một giải pháp, và tôi sẽ từng bước thực hiện nó. Vấn đề là hai lần.

  1. Cắm ổ flash USB và xác định thiết bị được gắn với lệnh:

    sudo fdisk -l
    

    Lần này là / dev / sdc1 đối với tôi, vì vậy tôi sẽ sử dụng nó làm ví dụ của mình.

  2. Umount thiết bị

    umount /dev/sdc1
    
  3. Không chắc chắn nếu cần thiết nhưng tôi đã định dạng ổ đĩa trong FAT32, chỉ trong trường hợp

    sudo mkdosfs -n 'USB-Drive-Name' -I /dev/sdc -F 32
    
  4. Bây giờ ISO của tôi đã sử dụng isolinux chứ không phải syslinux. Tôi biết nó hoạt động với đĩa CD nên tôi nhận ra rằng tôi cần phải gọi lệnh isohy điều chỉnh, cho phép ISO được BIOS nhận ra từ ổ cứng.

     isohybrid filename.iso
    

    Bạn có thể tìm hiểu thêm về lệnh này tại đây , nhưng đây là nguyên nhân của thông báo "Thiếu hệ điều hành" Sự cố đầu tiên đã được khắc phục, nhưng bây giờ nó nói "isolinux.bin bị thiếu hoặc bị hỏng"

  5. Bước tiếp theo là sao chép iso. Vấn đề thứ hai của tôi nằm ở đây, nơi tôi đã sao chép vào phân vùng, sdc1, không phải thiết bị, sdc.

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

    Điều này có vẻ chỉ hoạt động tốt, nhưng diễn đàn nơi tôi đã sửa lỗi cuối cùng, bạn nên làm như sau trước khi rút phích cắm thiết bị:

    sync
    sudo eject /dev/sdc
    

3
Đây là một cách để kiểm tra tiến trình của dd: unix.stackexchange.com/a/11264/13011 .
Nikos Alexandris

3
Giả định ở đây, tôi nghĩ rằng mkdosfslệnh có thể không cần thiết, vì iso đã có một hệ thống tập tin nằm trên nó (có thể bao gồm cả MBR, không chắc chắn) được sao chép vào đầu thiết bị khối. Man, isohybridlà một mệnh lệnh hay, không biết về nó!
Ehtesh Choudhury

1
đối với Windows 7, USB có thể khởi động cài đặt, cũng xem superuser.com/questions/256869/,
cwd

7
Bước # 3 là không cần thiết; các ddlệnh trong bước # 5 sẽ tiêu diệt các hệ thống tập tin mới được tạo ra với các nội dung của ISO.
ewhac

Tôi đã gần 12 giờ để tìm kiếm vấn đề tương tự cho đến khi tôi tìm thấy bài đăng của bạn ở đây và tôi đã làm theo và bước và ... nó đã hoạt động! (bước 5 cũng là vấn đề của tôi, tôi chưa proở linux, nên cảm ơn bạn)
Ismael

3

Đây là một vấn đề phổ biến với các thanh USB SanDisk hoặc các thanh không được định dạng trong FAT32.

Nếu không phải một trong hai thì đó chắc chắn là một vấn đề với thứ tự phân vùng thanh của bạn hoặc tệp syslinux.cfg.


Ổ đĩa flash USB là từ Verbatim. Tôi đã định dạng lại trong FAT32 để chắc chắn và vẫn gặp lỗi tương tự.
xsdf

1

isohybridcó thể không luôn luôn làm việc Ví dụ: tôi đã có một .iso với FreeDOS và isohy điều chỉnh không thể tìm thấy một số tệp quan trọng ở đó (tôi không biết liệu chúng có nên được đặt ở đó bởi syslinux, mà tôi cũng đã sử dụng hoặc bất cứ thứ gì khác). Tôi đề xuất một số lựa chọn thay thế ở đây.

1) Cài đặt bộ tải khởi động khác ở đó, chẳng hạn như GRUB. Nó được giải thích ở đây :

"Giả sử phân vùng đầu tiên của thanh USB của bạn là FAT32 và phân vùng của nó là / dev / sdy1" (Tôi đã có grub2trên Fedora Core của mình, vì vậy tôi đã thay đổi các lệnh một chút):

# 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 cung cấp một phương thức kết hợp với GRUB và syslinux tại đây (mặc dù tôi không hiểu cách chúng khởi chạy grub>- Tôi không thể khởi động từ usb cho đến giai đoạn đó).

3) Đây là một bài viết có thể hữu ích - nó nói 'Miễn là các tệp lệnh.com, kernel.sys, syslinux.cfg, ldlinux.sys và fat32lba.bss nằm trong thư mục gốc của ổ đĩa và MBR và khởi động sector không được ghi lại ổ đĩa nên vẫn có khả năng khởi động. '

4) Ở đây giải thích cách tạo tệp .iso có thể khởi động với bộ tải khởi động syslinux. Họ thậm chí không sử dụng isohy điều chỉnh. Thật không may, điều đó đã không giúp tôi (có thể vì syslinux).

5 *) Sử dụng chương trình windows qua wine. Tôi đã thử rufus, tuy nhiên nó không hoạt động, nó không thể tìm thấy thiết bị.

Tôi cảnh báo bạn rằng thật không may, tôi không thể giải quyết vấn đề này, thiết bị của tôi không thể khởi động được, nhưng tôi hy vọng rằng điều này có thể hữu ích cho những người khác (cả những người muốn cài đặt không phải là linux trên usb). Hình ảnh usb được tạo bởi chtaube mặc dù làm việc cho tôi, vì vậy tôi nghĩ các phương pháp này là chính xác.

CẬP NHẬT: Phương pháp thứ 3 thực sự hoạt động (với sự điều chỉnh cho một tệp cài đặt tùy chỉnh).

CẬP NHẬT2: (liên kết cố định). Vấn đề với isohybridcó lẽ là do các phiên bản của isolinux.bin trên iso và hệ thống của tôi khác nhau. Biên dịch lại iso bằng cách genisoimageđề xuất ở đây :

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

Có một số vấn đề quá, chúng đã được giải quyết bằng phương pháp ở đây trước khi genisoimage:

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

== kết thúc UPD2 ==



Thứ 2: freedo.sourceforge.net/wiki/index.php/USB#Linux_2 Bạn có thể thêm các liên kết này vào bài đăng nếu hệ thống tin tưởng bạn hơn tôi. StackOverflow đã biết rõ về tôi, vậy tại sao một vấn đề như vậy ở superuser? Ngoài ra tôi có vấn đề khi đăng bài này, nó không cho tôi thấy rằng câu trả lời của tôi đã được đăng.
Yar Tư Nikitenko

Có vẻ như siêu người dùng đếm các liên kết bằng các tham chiếu của họ, tức là nếu tôi liên kết hai lần với cùng một tài nguyên thì nó sẽ được tính. Đây dường như là một lỗi. Một cách giải quyết trong UPD đến từ spiderbird.com/tag/fat32lba-bss
Yaroslav Nikitenko

Tất cả các liên kết trong các ý kiến ​​cố định. Tôi để chúng ở đây để cho thấy chính sách này mang lại bao nhiêu vấn đề.
Yar Tư Nikitenko

0

Bạn có thể sử dụng bootisotiện ích , chính xác, an toàn:

bootiso -d /dev/sdb filename.iso

bootiso sẽ kiểm tra xem thiết bị được chọn /dev/sdbcó được kết nối qua USB hay không nếu không, đây là một điểm cộng bảo mật lớn. Nó cũng sẽ tự động phát hiện thiết bị USB nếu có chính xác một ổ USB được kết nối với hệ thống của bạn, xem nó hoạt động:

Nếu bạn muốn cài đặt bộ tải khởi động syslinux để tránh các sự cố được đề cập bởi @xsdf, hãy sử dụng -btùy chọn:

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

Để cài đặt nó:

curl -L https://rawgit.com/jsamr/bootiso/latest/bootiso -O
chmod +x bootiso
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.