GRUB บนไดรฟ์ USB - เพิ่มระบบปฏิบัติการ


9

พื้นหลังบางส่วน:

  • มาจากพื้นหลัง Windows ส่วนใหญ่ (แม้ว่าฉันจะคุ้นเคยกับ Ubuntu ฯลฯ ) และใช้เครื่อง Windows 7 เพื่อทำงานนี้ให้เสร็จ
  • ติดตั้ง GRUB เพื่อรับ MBR ของไดรฟ์ USB เรียบร้อยแล้ว (8 GB FAT32 ไดรฟ์):
  • ได้สร้างโครงสร้างพื้นฐานบนไดรฟ์: / boot / grub, / boot / img, / boot / kernel

คำถาม:

ฉันมีคำถามพื้นฐานเริ่มต้น แต่คำถามที่ฉันมีปัญหาในการหาคำตอบผ่านทาง Google / StackExchange ฯลฯ

  • ฉันเข้าใจว่าโฟลเดอร์ / boot / img / [SystemName] จะเก็บอิมเมจสำหรับระบบเฉพาะซึ่งอาจใช้เคอร์เนล linux รุ่นต่างๆ (หรือเดียวกัน) ที่เก็บไว้ในไดเรกทอรี / boot / kernel (อย่างน้อยนั่นคือวิธีที่ฉัน ต้องการตั้งค่า)
  • อย่างไรก็ตามระบบเหล่านี้ส่วนใหญ่มีเพียงเคอร์เนลในไดเรกทอรีที่เรียกว่า "linux" (ไม่ได้ระบุรุ่น) ฉันสามารถค้นหาเคอร์เนลที่ใช้ทั้งหมด แต่สิ่งที่ bst เพื่อรับเมล็ดตัวเองเพื่อคัดลอกไปยัง / boot / kernel?
  • หลังจากที่ฉันได้รับเมล็ดฉันคิดว่าส่วนที่เหลือส่วนใหญ่จะคัดลอกอุปกรณ์ไปที่ / boot / img / และสร้างรายการที่เหมาะสมในเมนู ฉันสามารถทำสิ่งนั้นบนระบบตามพื้นฐานของระบบเมื่อฉันได้รับเมล็ดเพื่ออ้างถึง

เป้าหมายโดยรวม:

ฉันพยายามสร้างแฟลชไดรฟ์ usb 8GB ที่ให้ฉันบูตหลายระบบจากเมนูการบูต GRUB ในการเพิ่มหรือลบระบบปฏิบัติการฉันต้องการเพียงคัดลอกไฟล์ที่เหมาะสมไปยัง / boot / img / [SystemName] และโฟลเดอร์ / boot / kernel ตามความเหมาะสมจากนั้นแก้ไขไฟล์ menu.lst ดังนั้นขั้นตอนแรกนี้เกี่ยวกับการค้นหาเมล็ดที่ระบบปฏิบัติการเหล่านี้แบ่งปันหลาย ๆ อันเนื่องจากฉันหวังว่าจะลดการทำซ้ำ


และสิ่งที่คุณต้องการหลังจากเพิ่มเคอร์เนล? คุณต้องการระบบปฏิบัติการที่สามารถใช้บู๊ตได้หรือไม่?
phunehehe

@phunehehe ขอบคุณ! ฉันได้อัปเดตโพสต์เพื่อรวมเป้าหมายโดยรวมของฉันแล้ว
SeanKilleen

ดูเหมือนว่าคุณกำลังพยายามที่จะถ่ายโอนอิมเมจ LiveCD สำหรับการกระจายไปยังไดรฟ์ USB และจากนั้นสามารถบู๊ตได้ ถูกต้องหรือไม่
Wodin

@Wodin: เป็นหลักใช่ LiveCD (แต่ด้วยความสามารถในการเขียนเนื่องจากมันจะอยู่ในสื่อบันทึกข้อมูลที่สามารถเขียนได้) พร้อมหนึ่ง bootloader ที่เป็นหนึ่งเดียวสำหรับ distros / tools ทั้งหมดที่ฉันต้องการ
SeanKilleen

คำตอบ:


4

สิ่งที่คุณพยายามบรรลุคือยืดเทคโนโลยีการบูต :) อย่างไรก็ตามฉันคิดว่าเป็นไปได้แม้ว่าฉันจะไม่มีความรู้เพียงพอที่จะให้การเดินผ่านที่สมบูรณ์

ก่อนอื่นต้องบอกว่า distros มีข้อกำหนดที่แตกต่างกันมาก ประการที่สองสิ่งที่ดีในทางกลับกันคุณสามารถหา distros ที่ต้องการความต้องการน้อยที่สุด

ฉันอยากจะแนะนำให้ใช้ GRUB4DOS เป็น bootloader ดูลิงก์นี้วิธีใช้กับ USB (เพราะมีคำสั่ง find - set root - ซึ่งเป็นสิ่งสำคัญหากคุณมีอุปกรณ์พกพาเช่น USB)

จากนั้นคุณต้องตัดสินใจว่าจะใช้พาร์ติชั่นกี่ตัว มาตรฐาน "การติดตั้งแบบเต็ม" จะอยู่ในพาร์ติชันเดียวเสมอ ดังนั้นหากคุณมีก้าน USB ขนาด 8 GB และใช้พาร์ติชั่น 4 GB (ซึ่งอนุญาตให้ติดตั้งได้น้อยที่สุด) คุณจะถูก จำกัด การติดตั้งแบบเต็ม "2 หลัก" ของ distros หลักอย่าง Debian หรือ Fedora

อย่างไรก็ตามมีการแจกแจงลินุกซ์ขนาดเล็กและพิเศษ ตัวอย่างเช่น "Puppy Linux" มีขนาดเล็กมากและมีโหมด "Frugal Installation" พิเศษ มันมีหลายรสชาติ (เช่นมี MacPup พร้อมพยายามที่จะใช้ Apple เช่น Desktop หรือ Fatdog64 ซึ่งเป็น Linux 64 บิต)

ในโหมด "การติดตั้งแบบประหยัด" มันใช้ไดเรกทอรีเพียง 1 ไดเรกทอรีเท่านั้นและสามารถติดตั้งแบบขนานกับ Linux หรือ Windows ที่มีอยู่บนฮาร์ดดิสก์ (หรือ USB) ฉันแน่ใจว่ามีการแจกแจงอื่น ๆ ที่สนับสนุนโหมดที่คล้ายกัน

เนื่องจาก Puppy Linux มีขนาดเล็ก (<150 MB) และสมมติว่าคุณจองไฟล์บันทึกขนาดเล็กสำหรับการติดตั้งแต่ละครั้ง (512 MB) คุณจึงสามารถติดตั้งระบบปฏิบัติการ 10 ระบบได้อย่างง่ายดายบน USB Stick มีลินุกซ์ขนาดเล็กกว่า (Slitaz, Tinycore) ซึ่งคุณสามารถใช้ได้

ตัวอย่างเช่นฉันแนบไฟล์ menu.lst (GRUB4DOS) จากพีซีปัจจุบันของฉันติดตั้ง 8 รายการแรกคือการติดตั้ง Puppy Linux ที่แตกต่างกันทั้งหมดใน hd0,2 (เช่นพาร์ติชันที่ 3 ในฮาร์ดดิสที่ 1) จากนั้นมีน้อย การติดตั้ง Debian ในพาร์ติชันพิเศษขนาดเล็กและ Windows-XP ดั้งเดิม

timeout=10
default=0  

  title Linux Buero (on /dev/sda3)
  root (hd0,2)
  kernel /puppy431-de/vmlinuz psubdir=puppy431-de pkeys=de ro vga=normal
  initrd /puppy431-de/initrd.gz

  title Live CD build (on /dev/sda3)
  root (hd0,2)
  kernel /puppylivecdbuild/vmlinuz psubdir=puppylivecdbuild ro vga=normal
  initrd /puppylivecdbuild/initrd.gz

  title sage developement(on /dev/sda3)
  root (hd0,2)
  kernel /Sage46dev/vmlinuz psubdir=Sage46dev pfix=nocopy ro vga=normal
  initrd /Sage46dev/initrd.gz

  title sage developement test and fun
  root (hd0,2)
  kernel /Sage-test/vmlinuz psubdir=Sage-test pfix=nocopy,noram ro vga=normal
  initrd /Sage-test/initrd.gz

  title Lupq 511
  find --set-root --ignore-floppies /lupq511/initrd.gz
  kernel /lupq511/vmlinuz psubdir="lupq511" pfix=nocopy pkeys=de ro vga=normal
  initrd /lupq511/initrd.gz 

  title Lupu 520 - New kid on the block
  find --set-root --ignore-floppies /lupu-520/initrd.gz
  kernel /lupu-520/vmlinuz psubdir="lupu-520" pfix=nocopy pkeys=de ro vga=normal
  initrd /lupu-520/initrd.gz 

  title wary beta (on /dev/sda3)
  root (hd0,2)
  kernel /wary/vmlinuz psubdir=wary ro vga=normal
  initrd /wary/initrd.gz

  title spup (on /dev/sda3)
  root (hd0,2)
  kernel /spup/vmlinuz psubdir=spup ro vga=normal
  initrd /spup/initrd.gz

  title Debian (on /dev/sda2)
  find --set-root --ignore-floppies /initrd.img
  kernel /vmlinuz root=/dev/sda2 ro
  initrd /initrd.img

  title Windows NT/2K/XP\nStart Windows if installed on HDD
  fallback 7
  find --set-root --ignore-floppies /ntldr
  chainloader /ntldr

boot

menu.lst บน USB ของคุณอาจมีลักษณะคล้ายกันคำสั่ง GRUB4DOS find --set-root --ignore-floppies /lupq511/initrd.gz (ค้นหาไฟล์นี้ในไดรฟ์ทั้งหมด) อาจมีประโยชน์มากหากคุณใช้ USB ดังนั้นคุณไม่จำเป็นต้องใช้รายการคงที่สำหรับไดรฟ์ของคุณ

จากข้อมูลข้างต้นมีความคิดเห็นเกี่ยวกับคำถามต้นฉบับของคุณ:

ถาม: * ฉันเข้าใจว่าโฟลเดอร์ / boot / img / [SystemName] จะเก็บอิมเมจสำหรับระบบเฉพาะซึ่งอาจใช้เคอร์เนล Linux รุ่นต่างๆ (หรือเดียวกัน) ที่เก็บไว้ในไดเรกทอรี / boot / kernel (อย่างน้อย นั่นเป็นวิธีที่ฉันต้องการตั้งค่า)

ตอบ: ฉันไม่แน่ใจว่าจะใช้งานได้หรือไม่เนื่องจากการกระจายที่สำคัญส่วนใหญ่คาดว่าจะมีสิทธิ์ในพาร์ติชันของพวกเขาและติดตั้งโครงสร้างไดเรกทอรีเฉพาะสำหรับไฟล์ของพวกเขา ในความคิดของฉันมันจะดีกว่าที่จะเคารพการตั้งค่าเริ่มต้นและให้สิ่งที่การกระจายคาดว่าคือบางคนต้องการพาร์ติชันพิเศษบางคนจะมีความสุขกับเพียงไดเรกทอรีในพาร์ทิชันที่ใช้ร่วมกัน ฉันไม่ได้บอกว่ามันเป็นไปไม่ได้ที่จะติดตั้งหลาย ๆ พาร์ติชันเป็น 1 พาร์ติชั่นในแบบที่ไม่ใช่ค่าเริ่มต้น แต่มันขอร้องให้มีปัญหา วิธีแก้ปัญหาที่เป็นไปได้ที่ฉันพูดถึงที่ด้านล่างของโพสต์ของฉัน (ติดตั้ง "เหมือน Wubi")

ถาม: * อย่างไรก็ตามระบบเหล่านี้ส่วนใหญ่มีเพียงเคอร์เนลในไดเรกทอรีที่เรียกว่า "linux" (ไม่ได้ระบุรุ่น) ฉันสามารถค้นหาเคอร์เนลเหล่านี้ใช้ทั้งหมด แต่สิ่งที่ดีที่สุดที่จะได้รับเมล็ดตัวเองเพื่อคัดลอกไปยัง / boot / kernel?

A: ฉันคิดว่าเมล็ดควรไปที่นั่นตรงที่การกระจายมักจะมีพวกเขา ไม่จำเป็นต้องจัดเก็บไว้ในโฟลเดอร์ / boot / kernel แยกต่างหากและฉันก็ไม่แนะนำให้ลองแชร์ระหว่างดิสทริบิวชัน พื้นที่เก็บข้อมูลมีน้อยสำหรับเคอร์เนล (เช่น 2-3 MB) มีหลายรุ่นและหลายรุ่นย่อยและบางครั้งก็มีแพทช์เฉพาะที่ใช้กับเมล็ดของการกระจาย หากต้องการปลั๊กอินในเคอร์เนลที่แตกต่างกัน / ยังไม่ทดลองนั้นเป็นการทดลองที่ไม่จำเป็น

ถาม: * หลังจากได้รับเมล็ดฉันคิดว่าส่วนที่เหลือส่วนใหญ่จะคัดลอกอุปกรณ์ไปที่ / boot / img / และสร้างรายการที่เหมาะสมในเมนู ฉันสามารถทำสิ่งนั้นบนระบบตามพื้นฐานของระบบเมื่อฉันได้รับเมล็ดเพื่ออ้างถึง

ตอบ: ดังที่กล่าวไว้ก่อนหน้านี้ให้สร้างพาร์ติชันแยกต่างหากสำหรับการแจกแจงที่ต้องการและผสมในการกระจายที่ไม่โลภในโฟลเดอร์ของตัวเอง รักษาเคอร์เนลเริ่มต้นและส่วนที่เหลือของ distro เป็นหน่วย

หนึ่งความคิดสุดท้าย หากคุณไม่ต้องการใช้พาร์ติชันที่แตกต่างกันคุณสามารถลองติดตั้ง "WUBI" เพื่อ distros ที่ต้องการติดตั้งแบบเต็มในพาร์ติชันของตัวเอง ซึ่งหมายความว่าคุณสร้างไฟล์ขนาดใหญ่ด้วยระบบไฟล์ ext2 / ext3 ของตัวเองบน USB จากนั้นติดตั้งเป็น "ไดรฟ์" และติดตั้งระบบปฏิบัติการลงในมัน (ฉันเรียกมันว่า WUBI เพราะเป็นแอปพลิเคชั่นที่รู้จักกันดีที่สุด)

ต่อไปนี้ควรเป็นรายการเมนู Grub4dos เพื่อบู๊ต "ติดตั้ง Wubi"

# Add the ntfs module - just needed for Installation on a Windows Partition
insmod ntfs
# Set root (normally would be sda1, or hd0,1 Change as necessary
set root=(hd0,1)
loopback loop0 /ubuntu/disks/root.disk
set root=(loop0)
linux /boot/vmlinuz root=/dev/sda1 loop=/ubuntu/disks/root.disk ro
initrd /boot/initrd/initrd.img
boot

จากที่นี่

คุณจะเห็นว่ามีคำสั่ง "set root" 2 คำสั่งที่สองหลังจาก "root.disk" ซึ่งมี Linux ติดตั้งเป็น loop0

ฉันหวังว่าฉันจะให้ความคิดบางอย่างได้แม้ว่ามันจะไม่สมบูรณ์แบบ


ขออภัยฉันมีลิงค์ที่สองไปยังรายการ Grub สำหรับ Wubi ผิด (เพราะนี่เป็นครั้งแรกที่ฉันโพสต์ลิงค์ที่สองของฉันคือ "ป้องกันสแปม") ลิงค์ที่ถูกต้องคือ: blogold.chinaunix.net/u3/113851/showart_2311251.html
Emil WidmannEmil

1

นี่คือแนวทางที่สอง:

ฉันคิดว่าทั้งสองใช้พาร์ติชันแยกต่างหากสำหรับแต่ละเคอร์เนล

รายการใน " /boot/grub/menu.lst " เป็นดังนี้:

title Unity-2010 -- With Persistence
kernel (hd0,0)/isolinux/vmlinuz vga=788 livecd=livecd fromusb
root=Label=Unity-2010 changes_dev=LABEL=Unity-2010 acpi=on fstab=rw,noauto
initrd (hd0,0)/isolinux/initrd.gz

title Unity-2010 -- No Persistence
kernel (hd0,0)/isolinux/vmlinuz vga=788 livecd=livecd fromusb
root=Label=Unity-2010  acpi=on fstab=rw,noauto
initrd (hd0,0)/isolinux/initrd.gz

0

มันขึ้นอยู่กับสิ่งที่คุณวาง distros บางคนทำสิ่งที่น่ารังเกียจใน initramfs ดังนั้นมันจึงยาก บาง distros สดค้นหาฉลากบางค้นหา uuid คุณไม่สามารถระบุได้

การแก้ปัญหาไม่ใช่เรื่องง่ายคุณควรสร้าง ramdisks แบบกำหนดเองใหม่สำหรับ distros สดของคุณ

ฉันหวังว่าฉันจะไม่เข้าใจผิด: D


0

แน่นอนคุณจะต้องมี userpace บางประเภทเพื่อไปกับเมล็ดเหล่านี้ (โปรแกรมการกำหนดค่าการทำงาน) ตามเนื้อผ้าคุณจะต้องใช้อย่างน้อยหนึ่งพาร์ติชั่นสำหรับแต่ละ OS ที่แยกต่างหากและพาร์ติชัน GRUB จะถูกเมาท์เป็น / boot พาร์ทิชันมันจะเป็นไดเรกทอรีรากโดยมีด้วง / เป็นไดเรกทอรีย่อย)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.