คำถามติดแท็ก initrd

initrd เป็นวิธีการโหลดระบบไฟล์ชั่วคราวลงในหน่วยความจำในระหว่างกระบวนการบูตเคอร์เนล Linux

6
ทำไม initrd ของฉันมีเพียงไดเรกทอรีเดียวนั่นคือ 'เคอร์เนล'
ฉันใช้ debian live-build เพื่อทำงานบนระบบที่สามารถบูตได้ ในตอนท้ายของกระบวนการฉันได้รับไฟล์ทั่วไปที่ใช้ในการบูตระบบจริง: ไฟล์ squashfs, โมดูล GRUB และไฟล์ config บางไฟล์และไฟล์ initrd.img ฉันสามารถบู๊ตได้ดีโดยใช้ไฟล์เหล่านั้นส่งผ่าน initrd ไปยังเคอร์เนลผ่าน initrd=/path/to/my/initrd.img บนบรรทัดคำสั่ง bootloader แต่เมื่อฉันพยายามตรวจสอบเนื้อหาของภาพเริ่มต้นของฉันเช่น: $file initrd.img initrd.img: ASCII cpio archive (SVR4 with no CRC) $mkdir initTree && cd initTree $cpio -idv < ../initrd.img ต้นไม้ไฟล์ฉันได้รับเช่นนี้: $tree --charset=ASCII . `-- kernel `-- x86 `-- microcode `-- …
28 linux  debian  initrd  cpio 

1
อะไรคือสิ่งที่เทียบเท่ากับ mkinitcpio.conf บนเดเบียน?
ฉันต้องการตรวจสอบว่า hooks ที่ใช้ในการสร้างinitrd.imgถูกต้องใน debian ของฉัน แต่ฉันล้มเหลวในการค้นหา/etc/mkinitcpio.confไฟล์เช่นเดียวกับใน Archlinux สิ่งที่เทียบเท่าของไฟล์นี้ใน debian และฉันจะสร้าง initrd.img อย่างไรเมื่อฉัน ' แก้ไขไฟล์แล้วเหรอ?
15 initramfs  initrd 

3
เคอร์เนลทั้งหมดถูกโหลดเข้าสู่หน่วยความจำขณะบูตหรือไม่
ฉันอ่านIBM doc ที่เป็นที่นิยม (ฉันเห็นว่ามีการอ้างอิงค่อนข้างบ่อยบนเว็บ) อธิบายการทำงานของดิสก์ RAM เริ่มต้น ฉันตีกำแพงในการกำหนดแนวคิดว่ามันทำงานอย่างไร ในเอกสารมันบอกว่า ตัวโหลดบูตเช่น GRUB ระบุเคอร์เนลที่จะโหลดและคัดลอกอิมเมจเคอร์เนลนี้และ initrd ที่เกี่ยวข้องใด ๆ ลงในหน่วยความจำ ฉันสับสนแล้ว: มันคัดลอกเคอร์เนลทั้งหมดไปยังหน่วยความจำหรือเพียงแค่ส่วนหนึ่งของมันได้หรือไม่ หากเคอร์เนลทั้งหมดอยู่ในหน่วยความจำแล้วทำไมเราถึงต้องใช้ RAM ดิสก์เริ่มต้นด้วยซ้ำ ฉันคิดว่าจุดประสงค์ของการเริ่มต้นเพื่อให้สามารถมีเคอร์เนลอิมเมจขนาดเล็กทั่วไปและ initrd จะติดตั้งโมดูลที่ถูกต้องก่อนที่จะโหลดอิมเมจเคอร์เนล แต่ถ้าเคอร์เนลทั้งหมดอยู่ในหน่วยความจำแล้วทำไมเราถึงต้องเริ่มต้น? นั่นยังทำให้เกิดสิ่งอื่นที่ทำให้ฉันสับสน - โมดูลที่โหลดลงในเคอร์เนลตั้งอยู่ที่ไหน โมดูลเคอร์เนลทั้งหมดถูกเก็บไว้ภายใน initrd หรือไม่?

3
Linux โหลดอิมเมจ 'initrd' อย่างไร
ฉันพยายามทำความเข้าใจกับกระบวนการบูท แต่มีเพียงสิ่งเดียวเท่านั้นที่จะข้ามหัวฉันได้ .. ทันทีที่เคอร์เนล Linux ถูกบูทและติดตั้งระบบไฟล์รูท (/) โปรแกรมสามารถรันได้และโมดูลเคอร์เนลเพิ่มเติมสามารถรวมเข้าด้วยกันเพื่อให้มีฟังก์ชั่นเพิ่มเติม ในการเมาท์ระบบไฟล์รูทจะต้องปฏิบัติตามเงื่อนไขบางประการ เคอร์เนลต้องการไดรเวอร์ที่เกี่ยวข้องเพื่อเข้าถึงอุปกรณ์ที่ระบบไฟล์รูทอยู่ (โดยเฉพาะไดรเวอร์ SCSI) เคอร์เนลจะต้องมีรหัสที่จำเป็นในการอ่านระบบไฟล์ (ext2, reiserfs, romfs, ฯลฯ ) เป็นไปได้ว่าระบบไฟล์รูทถูกเข้ารหัสอยู่แล้ว ในกรณีนี้จำเป็นต้องใช้รหัสผ่านเพื่อต่อเชื่อมระบบไฟล์ ramdisk เริ่มต้น (หรือที่เรียกว่า initdisk หรือ initrd) แก้ปัญหาได้อย่างแม่นยำตามที่อธิบายไว้ข้างต้น เคอร์เนล Linux จัดให้มีตัวเลือกในการโหลดระบบไฟล์ขนาดเล็กลงในดิสก์ RAM และใช้งานโปรแกรมก่อนที่จะติดตั้งระบบไฟล์รูทจริง การโหลดของ initrd ได้รับการจัดการโดย boot loader (GRUB, LILO และอื่น ๆ ) ตัวโหลดการบูตต้องการรูทีน BIOS เท่านั้นเพื่อโหลดข้อมูลจากสื่อการบูต หากบูตโหลดเดอร์สามารถโหลดเคอร์เนลได้ก็สามารถโหลด ramdisk เริ่มต้นได้ ไม่จำเป็นต้องใช้ไดรเวอร์พิเศษ หาก …
13 linux  kernel  boot  initrd 

1
ทำไม ramdisk เริ่มต้นของฉันใหญ่มาก
ผมใช้ Ubuntu 11.10 3.0.0-14ซึ่งมาพร้อมกับรุ่นเคอร์เนล ฉันดาวน์โหลดและสร้างเคอร์เนลจาก3.1.0สาขา หลังจากติดตั้งเคอร์เนลใหม่ฉันเห็นว่า/boot/initrd.img-3.1.0ไฟล์ของฉันมีขนาดใหญ่มาก มันคือ 114MB ในขณะที่ฉัน/boot/initrd.img-3.0.0-14-genericประมาณ 13MB ฉันต้องการกำจัดปมซึ่งไม่จำเป็นอย่างชัดเจน เมื่อสร้างเคอร์เนลใหม่ฉันคัดลอกของฉัน/boot/config-3.0.0-14-genericไปที่.configในไดเรกทอรีสร้างของฉันเพื่อเก็บการกำหนดค่าของเคอร์เนลเดิม ฉันวิ่งmake oldconfigเลือกค่าเริ่มต้นสำหรับตัวเลือกใหม่ทั้งหมดแล้วสร้างเคอร์เนล เมื่อดูที่ขนาดไฟล์ภายในแต่ละไฟล์เก็บถาวร cpio ของ initrd ฉันเห็นว่าโมดูล. ko ทั้งหมดของฉันมีขนาดใหญ่กว่าใน 3.1.0 ramdisk มากกว่า 3.0.0-14 ฉันสันนิษฐานว่ามีการตรวจสอบสถานะการดีบักที่ไม่จำเป็นในไฟล์กำหนดค่าของฉัน แต่ฉันไม่เห็นสิ่งอื่นที่ไม่ได้เปิดใช้งานในไฟล์กำหนดค่า 3.0.0-14 ฉัน/boot/config-3.0.0-14-genericอยู่ที่นี่: http://pastebin.com/UjH7nEqd และฉัน/boot/config-3.0.1อยู่ที่นี่: http://pastebin.com/HyT0M2k1 ทุกคนสามารถอธิบายได้ว่าการขยายตัวที่ไม่จำเป็นมาจากไหน?

5
เป็นไปได้หรือไม่ที่จะใส่รูทใน LVM โดยไม่ใช้ initrd?
ฉันเพิ่งตั้งค่าระบบพื้นฐาน Gentoo (ซึ่งหมายความว่าฉันสามารถบูตและเข้าสู่ระบบและทำสิ่งต่าง ๆ ได้ทันที) root พาร์ติชันของฉันอยู่ในกลุ่มเสมือน LVM2 (มี/bootพาร์ติชันแยกต่างหาก) ในการบูตฉันต้องส่งพารามิเตอร์ด้านล่างไปยังเคอร์เนล: root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm เห็นได้ชัดว่ามันใช้ ramdisk เริ่มต้นเพื่อทำบางสิ่ง (ฉันเดาว่าจะโหลดสิ่งของ LVM) ก่อนที่จะติดตั้งรูท มีวิธีที่ฉันสามารถใส่รหัสนี้ลงในเคอร์เนลของตัวเองเพื่อให้ไม่จำเป็นต้องเริ่มต้นหรือไม่? ถ้าไม่ฉันจะสร้างตัวประทับเองได้อย่างไร มันอาจจะมีประโยชน์ที่จะเพิ่มว่าฉันได้พยายามรวบรวมเคอร์เนลสำหรับรากที่ไม่ใช่ LVM โดยไม่ต้องเริ่มต้นและมันทำงานได้อย่างสมบูรณ์ จากนั้นฉันพยายามใส่ทุกอย่างภายใต้ LVM และไม่สามารถทำให้เครื่องบูตได้ (ฉันเดาว่ามันไม่สามารถจัดการกับสิ่งที่ LVM ได้) จากนั้นฉันใช้genkernelเครื่องมือพร้อม--lvmตัวเลือกและสร้างเคอร์เนลที่ใช้งานได้และเริ่มต้นที่ฉันใช้อยู่ในปัจจุบัน ตอนนี้ฉันต้องการข้ามgenkernelและทำทุกอย่างด้วยตัวเองโดยไม่ต้องเริ่มต้นเพื่อให้เครื่องบูตได้ค่อนข้างเร็ว (ฉันไม่ต้องการความยืดหยุ่นอยู่ดี)
12 kernel  boot  root  initrd  lvm 

3
เคอร์เนล Linux ไม่พบ initrd อย่างถูกต้อง
ฉันได้รวบรวมเคอร์เนล linux และฉันต้องการดีบักใน QEMU ฉันสร้างไฟล์เพื่อบู๊ตจากการทำคำสั่ง $ qemu-img create -f raw disk.img 200M $ mkfs.ext2 -F disk.img # mkdir /mnt/rootfs # mount -o loop disk.img /mnt/rootfs จากนั้นฉันก็ทำqemu -kernel bzImage -initrd disk.imgและได้หน้าจอด้านล่างที่ระบุว่า: Kernel panic - not syncing: VFS: unable to mount root fs on unknown block ฉันทำอะไรผิดและฉันต้องแก้ไขอย่างไร

1
ฉันจะบังคับให้เคอร์เนล Ubuntu ล้มเหลวในการติดตั้ง / และวางลงในเชลล์ช่วยเหลือ initramfs ได้อย่างไร
ฉันกำลังพยายามปรับแต่งสภาพแวดล้อมการช่วยเหลือของ initramfs และต้องการบังคับให้เคอร์เนลล้มเหลวในการติดตั้ง/และวางลงใน(initramfs)เชลล์กู้ภัยซึ่งตรงข้ามกับโหมดผู้ใช้คนเดียว ฉันจะทำสิ่งนั้นได้อย่างไร หมายเหตุ: ฉันรู้วิธีการขอinitramfs-toolsให้ทำตามขั้นตอนการปรับแต่ง แต่ฉันต้องสามารถตรวจสอบผลลัพธ์ได้

1
Ramdisk และเริ่มเหมือนกันหรือไม่?
ขณะที่อ่านผ่านเอกสาร kernel ใน ramdisk ใน ramfs-rootfs-initramfs.txtผมมีข้อสงสัยเช่น ramdisk อธิบายมีเช่นเดียวกับคุณสมบัติ initrd อธิบายไว้ในโพสต์ที่ที่แตกต่างระหว่าง initrd และ initramfs มีคนช่วยอธิบายเรื่องนี้ให้ฉันหน่อยได้ไหม? และถ้ามันเหมือนกันฉันอ่านว่ามีข้อเสียมากมายสำหรับมัน แต่ยังอยู่ใน fedora PC ของฉันฉันเห็น initrd-2.6.29.4-167.fc11.i686.PAE.img ในโฟลเดอร์บูตของฉัน มันแตกต่างจากผู้เริ่มต้นที่กล่าวถึงข้างต้นหรือไม่? UPDATE_EDIT: ใน บทความที่ฉันยังเห็นคำสั่งเช่น # update-initramfs -u all update-initramfs: Generating /boot/initrd.img-2.6.18-5-amd64 ดังนั้น initramfs นี้เชื่อมโยงกับ initrd.img อย่างไร
10 linux  boot  initrd 

2
วิธีการเติมไดเรกทอรี / dev เมื่อสร้าง initrd ของฉันเอง
ฉันพยายามที่จะเรียนรู้สิ่งที่เกี่ยวกับ initrd ฉันได้ทำตามบทช่วยสอนนี้เพื่อสร้าง initrd ของฉันเองตั้งแต่เริ่มต้นและฉันได้ติดตั้ง busybox ไว้ในนั้น จากนั้นฉันทำ. iso จากนั้นด้วย isolinux ดังนั้นฉันสามารถทดสอบใน virtualbox มันใช้งานได้ดี! ฉันมีคำสั่งพื้นฐานจาก busybox ดังนั้นฉันจึงต้องการติดตั้งระบบไฟล์ แต่ไดเรกทอรี / dev เกือบจะว่างเปล่า (ไม่มี sda) ยกเว้นไฟล์บางไฟล์ที่ฉันสร้างขึ้นในขณะที่ทำตามบทช่วยสอน ฉันเรียนรู้เกี่ยวกับ udev และฉันคิดว่านี่เป็นสิ่งที่ฉันต้องการ อย่างไรก็ตามฉันไม่แน่ใจว่าจะทำอย่างไรต่อไป ฉันควรจะคว้าซอร์สโค้ดล่าสุดจาก udev รวบรวมและเพิ่มลงใน initrd ของฉันหรือไม่ แล้วโทร / bin / udev หรืออะไรทำนองนั้นในสคริปต์ init ของฉัน หรือมีวิธีอื่น / ดีกว่าในการเติมไดเรกทอรี / dev? แก้ไข:ข้อมูลเพิ่มเติมและการปรับปรุงบางอย่างเกี่ยวกับสิ่งที่ฉันได้ทำไปแล้ว ฉันทดสอบทุกอย่างในกล่องเสมือน ฉันเพิ่งติดตั้ง Ubuntu …
9 udev  initrd 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.