กลับไปหน้าบทความ

อ่าน 5 นาที

แรมดิสก์เริ่มต้น

ในระบบ ลินุกซ์ initrd ( initial ramdisk ) คือกลไกในการโหลด ระบบไฟล์ รูทชั่วคราว ลงใน หน่วยความจำ เพื่อใช้เป็นส่วนหนึ่งของ กระบวนการเริ่มต้นระบบลินุกซ์ และ initrd ( initramfs from...

แรมดิสก์เริ่มต้น

ในระบบลินุกซ์initrd ( initial ramdisk ) คือกลไกในการโหลดระบบไฟล์ รูทชั่วคราว ลงในหน่วยความจำเพื่อใช้เป็นส่วนหนึ่งของกระบวนการเริ่มต้นระบบลินุกซ์และinitrd( initramfsfrom initial RAM file system ) หมายถึงสองวิธีที่แตกต่างกันในการทำเช่นนี้ ทั้งสองวิธีนี้มักใช้เพื่อเตรียมการก่อนที่จะสามารถ เมานต์ระบบไฟล์รูทจริงได้

เหตุผล

ระบบปฏิบัติการ Linuxหลายตัว มาพร้อมกับอิมเมจ เคอร์เนล Linuxทั่วไปเพียงตัวเดียวซึ่งนักพัฒนาของระบบปฏิบัติการนั้นสร้างขึ้นมาโดยเฉพาะเพื่อให้สามารถบูตบนฮาร์ดแวร์ที่หลากหลาย ไดรเวอร์อุปกรณ์สำหรับอิมเมจเคอร์เนลทั่วไปนี้จะถูกรวมไว้เป็นโมดูลเคอร์เนลที่สามารถโหลดได้เนื่องจากหากคอมไพล์ไดรเวอร์จำนวนมากเข้าไปในเคอร์เนลเดียวแบบคงที่ จะทำให้อิมเมจเคอร์เนลมีขนาดใหญ่ขึ้นมาก อาจใหญ่เกินไปจนบูตไม่ได้บนคอมพิวเตอร์ที่มีหน่วยความจำจำกัด หรือในบางกรณีอาจทำให้เกิดข้อผิดพลาดระหว่างบูตหรือปัญหาอื่นๆ เนื่องจากการตรวจสอบฮาร์ดแวร์ที่ไม่มีอยู่จริงหรือขัดแย้งกัน วิธีการคอมไพล์เคอร์เนลแบบคงที่นี้ยังทำให้มีโมดูลในหน่วยความจำเคอร์เนลที่ไม่ถูกใช้งานหรือไม่จำเป็นอีกต่อไป ซึ่งจะทำให้เกิดปัญหาในการตรวจจับและโหลดโมดูลที่จำเป็นในการเมานต์ระบบไฟล์รูทในระหว่างการบูต หรือแม้แต่การอนุมานว่าระบบไฟล์รูทอยู่ที่ใดหรือคืออะไร[ 1 ]

เพื่อทำให้เรื่องซับซ้อนยิ่งขึ้น ระบบไฟล์รูทอาจอยู่บน วอลุ่ม RAID ซอฟต์แวร์ , LVM , NFS (บนเวิร์กสเตชันที่ไม่มีดิสก์) หรือบนพาร์ติชันที่เข้ารหัส ทั้งหมดนี้ต้องมีการเตรียมการพิเศษเพื่อทำการเมานต์[ 2 ]

อีกหนึ่งความซับซ้อนคือการรองรับการจำศีล ของเคอร์เนล ซึ่งจะระงับการทำงานของคอมพิวเตอร์โดยการบันทึกภาพข้อมูลทั้งหมดในหน่วยความจำลงในพาร์ติชั่นสวอปหรือไฟล์ปกติ จากนั้นจึงปิดเครื่อง เมื่อบูตเครื่องครั้งถัดไป จะต้องทำให้ภาพข้อมูลนี้สามารถเข้าถึงได้ก่อนจึงจะสามารถโหลดกลับเข้าสู่หน่วยความจำได้

เพื่อหลีกเลี่ยงการเขียนโค้ดแบบตายตัวสำหรับการจัดการกรณีพิเศษจำนวนมากในเคอร์เนล จึงมีการใช้ขั้นตอนการบูตเริ่มต้นที่มีระบบไฟล์รูทชั่วคราว ซึ่งปัจจุบันเรียกว่าพื้นที่ผู้ใช้ช่วงต้นระบบไฟล์รูทนี้สามารถมีตัวช่วยพื้นที่ผู้ใช้ซึ่งทำหน้าที่ตรวจจับฮาร์ดแวร์ การโหลดโมดูล และการค้นหาอุปกรณ์ที่จำเป็นในการเมานต์ระบบไฟล์จริง[ 2 ]

การดำเนินการ

mkinitcpioโปรแกรมสำหรับสร้าง initramfs บนArch Linuxและระบบปฏิบัติการที่เกี่ยวข้อง
dracutโปรแกรมอีกตัวหนึ่งสำหรับสร้าง initramfs บนระบบปฏิบัติการ Linux บางรุ่น

ต้องจัด เก็บอิมเมจของระบบไฟล์รูทเริ่มต้นนี้ (รวมถึงอิมเมจเคอร์เนล) ไว้ในที่ที่บูตโหลดเดอร์ ของ Linux หรือเฟิร์มแวร์บูตของคอมพิวเตอร์สามารถเข้าถึงได้ ซึ่งอาจเป็นระบบไฟล์รูทเองอิมเมจบูตบนแผ่นซีดี/ดีวีดีพาร์ติชั่นขนาดเล็กบนดิสก์ภายในเครื่อง ( พาร์ติชั่นบูตซึ่งมักใช้ ระบบไฟล์ ext2หรือFAT ) หรือ เซิร์ฟเวอร์ TFTP (บนระบบที่สามารถบูตจากอีเธอร์เน็ตได้ )

บูตโหลดเดอร์จะโหลดเคอร์เนลและอิมเมจระบบไฟล์รูทเริ่มต้นลงในหน่วยความจำ จากนั้นจึงเริ่มเคอร์เนลโดยส่งที่อยู่หน่วยความจำของอิมเมจเข้าไป ในตอนท้ายของลำดับการบูต เคอร์เนลจะพยายามกำหนดรูปแบบของอิมเมจจากบล็อกข้อมูลแรกๆ ซึ่งอาจนำไปสู่รูปแบบ initrd หรือ initramfs ก็ได้

ใน รูปแบบ initrdรูปภาพอาจเป็นรูปภาพระบบไฟล์ (อาจมีการบีบอัด) ซึ่งพร้อมใช้งานในอุปกรณ์บล็อก พิเศษ ( /dev/ram ) จากนั้นจะถูกติดตั้งเป็นระบบไฟล์รูทเริ่มต้น[ 3 ]ไดรเวอร์สำหรับระบบไฟล์นั้นจะต้องถูกคอมไพล์แบบคงที่ลงในเคอร์เนล การแจกจ่ายหลายๆ แบบเดิมใช้รูปภาพระบบไฟล์ext2 ที่บีบอัด ในขณะที่แบบอื่นๆ (รวมถึง Debian 3.1) ใช้cramfsเพื่อบูตบนระบบที่มีหน่วยความจำจำกัด เนื่องจากรูปภาพ cramfs สามารถติดตั้งในตำแหน่งเดิมได้โดยไม่ต้องใช้พื้นที่เพิ่มเติมสำหรับการคลายการบีบอัด เมื่อระบบไฟล์รูทเริ่มต้นทำงานแล้ว เคอร์เนลจะเรียกใช้/linuxrcเป็นกระบวนการแรก[ 4 ]เมื่อสิ้นสุดการทำงาน เคอร์เนลจะถือว่าระบบไฟล์รูทจริงได้รับการติดตั้งแล้ว และเรียกใช้/sbin/initเพื่อเริ่มต้นกระบวนการบูตพื้นที่ผู้ใช้ตามปกติ[ 3 ]

ใน รูปแบบ initramfs (มีให้ใช้งานตั้งแต่เคอร์เนล Linux เวอร์ชัน 2.6.13) รูปภาพอาจเป็น ไฟล์เก็บถาวร cpio (บีบอัดหรือไม่ก็ได้) หรือการรวมไฟล์เก็บถาวรดังกล่าวเข้าด้วยกัน เคอร์เนลจะคลายไฟล์เก็บถาวรลงในอินสแตนซ์พิเศษของtmpfsซึ่งจะกลายเป็นระบบไฟล์รูทเริ่มต้น รูปแบบนี้มีข้อดีคือไม่จำเป็นต้องคอมไพล์ระบบไฟล์ระดับกลางหรือไดรเวอร์บล็อกลงในเคอร์เนล[ 5 ]บางระบบใช้ แพ็กเกจ dracutเพื่อสร้างรูปภาพ initramfs [ 6 ]ในรูปแบบ initramfs เคอร์เนลจะเรียกใช้/initเป็นกระบวนการแรกที่ไม่คาดว่าจะสิ้นสุด[ 5 ]สำหรับบางแอปพลิเคชัน initramfs สามารถใช้ ยูทิลิตี้ casperเพื่อสร้างสภาพแวดล้อมที่เขียนได้โดยใช้unionfsเพื่อวางเลเยอร์ความคงทนทับรูปภาพระบบไฟล์รูทแบบอ่านอย่างเดียว ตัวอย่างเช่น ข้อมูลโอเวอร์เลย์สามารถจัดเก็บไว้บนแฟลชไดรฟ์ USBในขณะที่อิมเมจSquashFSแบบอ่านอย่างเดียวที่บีบอัดซึ่งจัดเก็บไว้บนซีดีแบบสดจะทำหน้าที่เป็นระบบไฟล์รูท[ 7 ] [ 8 ]

ขึ้นอยู่กับอัลกอริทึมที่คอมไพล์แบบคงที่ลงในเคอร์เนล เคอร์เนลสามารถคลายอิมเมจ initrd/initramfs ที่บีบอัดด้วยgzip , bzip2 , LZMA , XZ , LZO , LZ4 , [ 9 ]และzstdได้

การเตรียมการติดตั้ง

ระบบปฏิบัติการลินุกซ์บางรุ่น เช่นDebianจะสร้างอิมเมจ initrd ที่ปรับแต่งเอง ซึ่งมีเฉพาะสิ่งที่จำเป็นสำหรับการบูตคอมพิวเตอร์เครื่องนั้นๆ เช่นโมดูลเคอร์เนลATA , SCSIและระบบไฟล์ โดยทั่วไปแล้ว อิมเมจนี้จะฝังตำแหน่งและประเภทของระบบไฟล์รูทไว้ด้วย

ระบบปฏิบัติการลินุกซ์อื่นๆ (เช่นFedoraและUbuntu ) สร้างอิมเมจ initrd ที่เป็นแบบทั่วไปมากกว่า โดยจะเริ่มต้นด้วยชื่ออุปกรณ์ของระบบไฟล์รูท (หรือUUID ของมัน ) เท่านั้น และต้องค้นหาส่วนอื่นๆ ทั้งหมดในระหว่างการบูต ในกรณีนี้ ซอฟต์แวร์จะต้องดำเนินการหลายขั้นตอนที่ซับซ้อนเพื่อให้ระบบไฟล์รูทถูกเมานต์:

  • ไดรเวอร์ฮาร์ดแวร์ใดๆ ที่กระบวนการบูตต้องพึ่งพาจะต้องถูกโหลด โดยทั่วไปแล้ว จะมีการบรรจุโมดูลเคอร์เนลสำหรับอุปกรณ์จัดเก็บข้อมูลทั่วไปลงใน initrd จากนั้นเรียกใช้ เอเจนต์ hotplugเพื่อดึงโมดูลที่ตรงกับฮาร์ดแวร์ที่ตรวจพบในคอมพิวเตอร์
  • ในระบบที่แสดงหน้าจอสแปลชขณะบูตฮาร์ดแวร์วิดีโอจะต้องได้รับการเริ่มต้น และตัวช่วยในพื้นที่ผู้ใช้จะต้องเริ่มทำงานเพื่อวาดภาพเคลื่อนไหวลงบนหน้าจอให้สอดคล้องกับกระบวนการบูต
  • หากระบบไฟล์หลักอยู่บน NFS ระบบจะต้องเปิดใช้งานอินเทอร์เฟซเครือข่าย หลัก เรียกใช้ ไคลเอ็นต์ DHCPเพื่อขอรับสัญญาเช่า DHCP ดึงชื่อของ NFS share และที่อยู่ของเซิร์ฟเวอร์ NFS จากสัญญาเช่า และทำการเมานต์ NFS share
  • หากระบบไฟล์รูทปรากฏอยู่บนอุปกรณ์ RAID แบบซอฟต์แวร์ จะไม่สามารถทราบได้ว่าวอลุ่ม RAID ครอบคลุมอุปกรณ์ใดบ้าง จำเป็นต้องเรียกใช้ ยูทิลิตี้ MD มาตรฐาน เพื่อสแกนอุปกรณ์บล็อกที่มีอยู่ทั้งหมดและนำอุปกรณ์ที่ต้องการมาใช้งาน
  • หากพบว่าระบบไฟล์รูทอยู่บนวอลุ่มเชิงตรรกะจะต้องเรียกใช้ยูทิลิตี้ LVM เพื่อสแกนหาและเปิดใช้งานกลุ่มวอลุ่มที่มีระบบไฟล์รูทนั้นอยู่
  • หากระบบไฟล์หลักอยู่บนอุปกรณ์บล็อกที่เข้ารหัสไว้ ซอฟต์แวร์จำเป็นต้องเรียกใช้สคริปต์ตัวช่วยเพื่อแจ้งให้ผู้ใช้ป้อนรหัสผ่านและ/หรือเสียบโทเค็นฮาร์ดแวร์ (เช่นสมาร์ทการ์ด หรือ ดองเกิลรักษาความปลอดภัย USB ) จากนั้นจึงสร้างเป้าหมายการถอดรหัสด้วย ตัวแม ปอุปกรณ์

ระบบปฏิบัติการบางตัวใช้ เอเจนต์ hotplug ที่ทำงานโดยเหตุการณ์เช่นudevซึ่งจะเรียกใช้โปรแกรมช่วยเมื่ออุปกรณ์ฮาร์ดแวร์ พาร์ติชั่นดิสก์ และวอลุ่มจัดเก็บข้อมูลที่ตรงตามกฎบางอย่างออนไลน์ วิธีนี้ช่วยให้การค้นหาทำงานแบบขนาน และค่อยๆ ขยายไปสู่การจัดเรียงแบบซ้อนกันของ LVM, RAID หรือการเข้ารหัส เพื่อเข้าถึงระบบไฟล์ระดับราก

เมื่อระบบไฟล์รูทปรากฏขึ้นอย่างสมบูรณ์แล้ว งานบำรุงรักษาใดๆ ที่ไม่สามารถทำงานบนระบบไฟล์รูทที่ถูกเมานต์ได้จะถูกดำเนินการ ระบบไฟล์รูทจะถูกเมานต์ในโหมดอ่านอย่างเดียว และกระบวนการใดๆ ที่ต้องทำงานต่อไป (เช่น ตัวช่วยหน้าจอสแปลชและFIFO คำสั่ง ) จะถูกย้ายไปยังระบบไฟล์รูทที่ถูกเมานต์ใหม่

ไม่สามารถติดตั้งระบบไฟล์รูทสุดท้ายทับ/ ได้โดยตรง เนื่องจากจะทำให้ไม่สามารถเข้าถึงสคริปต์และเครื่องมือในระบบไฟล์รูทเริ่มต้นเพื่อใช้ในการล้างข้อมูลขั้นสุดท้ายได้

  • บน initrd รูทใหม่จะถูกติดตั้งที่จุดติดตั้งชั่วคราวและหมุนเข้าที่ด้วยpivot_root(8) (ซึ่งถูกนำมาใช้เพื่อจุดประสงค์นี้โดยเฉพาะ) ซึ่งจะทำให้ระบบไฟล์รูทเริ่มต้นอยู่ที่จุดติดตั้ง (เช่น/initrd ) ซึ่งสคริปต์บูตปกติสามารถถอดการติดตั้งออกในภายหลังเพื่อปลดปล่อยหน่วยความจำที่ initrd ถือครองอยู่
  • บน initramfs ระบบไฟล์รูทเริ่มต้นไม่สามารถหมุนเวียนออกไปได้[ 10 ]แต่จะถูกทำให้ว่างเปล่าและระบบไฟล์รูทสุดท้ายจะถูกติดตั้งทับลงไป

ระบบไฟล์รูทเริ่มต้นส่วนใหญ่จะใช้/linuxrcหรือ/initเป็นสคริปต์เชลล์ ดังนั้นจึงมีเชลล์ขั้นต่ำ (โดยปกติคือ/bin/ash ) พร้อมกับยูทิลิตี้พื้นที่ผู้ใช้ที่จำเป็นบางอย่าง (โดยปกติคือ ชุดเครื่องมือ BusyBox ) เพื่อประหยัดพื้นที่เพิ่มเติม เชลล์ ยูทิลิตี้ และไลบรารีที่สนับสนุนมักจะถูกคอมไพล์โดยเปิดใช้งานการเพิ่มประสิทธิภาพพื้นที่ (เช่น ด้วยแฟล็ก "-Os" ของgcc ) และเชื่อมโยงกับ klibc ซึ่งเป็น ไลบรารี Cเวอร์ชันขั้นต่ำที่เขียนขึ้นโดยเฉพาะเพื่อจุดประสงค์นี้[ 11 ]

การใช้งานอื่นๆ

โดยทั่วไปแล้ว โปรแกรมติดตั้งสำหรับระบบปฏิบัติการลินุกซ์จะทำงานทั้งหมดจาก initramfs เนื่องจากต้องสามารถรองรับส่วนติดต่อผู้ใช้ของโปรแกรมติดตั้งและเครื่องมือสนับสนุนต่างๆ ก่อนที่จะมีการตั้งค่าพื้นที่จัดเก็บข้อมูลถาวรใดๆ

Tiny Core Linux [ 12 ]และPuppy Linux [ 13 ]สามารถทำงานได้อย่างสมบูรณ์จาก initrd

ความคล้ายคลึงกันในระบบปฏิบัติการอื่นๆ

ตั้งแต่ Windows Vista [ 14 ] Windows สามารถบูตจาก ไฟล์อิมเมจดิสก์ WIMได้ ซึ่งรูปแบบไฟล์ได้รับการเผยแพร่แล้ว[ 15 ]โดยมีลักษณะคล้ายกับรูปแบบ ZIP ยกเว้นว่ารองรับฮาร์ดลิงก์ ชิ้นส่วนที่ซ้ำกัน และใช้การบีบอัดแบบชิ้นส่วนต่อชิ้นส่วน ในกรณีนี้ WIM ทั้งหมดจะถูกโหลดลงใน RAM ในขั้นต้น ตามด้วยการเริ่มต้นเคอร์เนล จากนั้น WIM ที่โหลดแล้วจะพร้อมใช้งานเป็น SystemRoot พร้อมกับตัวอักษรไดรฟ์ที่กำหนด ตัวติดตั้ง Windows ใช้สิ่งนี้เพื่อบูตจาก BOOT.WIM จากนั้นใช้ INSTALL.WIM เป็นชุดไฟล์ Windows ที่จะติดตั้ง

นอกจากนี้Windows Preinstallation Environment (Windows PE) ก็ใช้ระบบเดียวกัน โดยเป็นพื้นฐานสำหรับเวอร์ชันบูตแยกต่างหากของซอฟต์แวร์ป้องกันไวรัสและซอฟต์แวร์สำรองข้อมูล/กู้คืนระบบในกรณีเกิดภัยพิบัติบางตัว

นอกจากนี้ยังสามารถติดตั้ง Windows ให้บูตจากไฟล์ WIM หรือ VHD ที่จัดเก็บไว้ในไดรฟ์จริงได้เสมอ อย่างไรก็ตาม วิธีนี้ไม่ค่อยได้ใช้ เนื่องจากตัวโหลดบูตของ Windows สามารถโหลดไฟล์ .sys สำหรับโมดูลเคอร์เนลในระหว่างการบูตได้เอง ซึ่งเป็นงานที่ต้องใช้ initrd ใน Linux

ดูเพิ่มเติม

  • เครื่องมือ initramfs ของ Debian
  • การเปรียบเทียบโดยละเอียดของชุดเครื่องมือสร้าง initrd
  • เอกสารเคอร์เนลเกี่ยวกับการสนับสนุนพื้นที่ผู้ใช้ในระยะเริ่มต้น
  • "เหตุผลในการเปลี่ยนจาก initrd เป็น initramfs "{{cite web}}: CS1 maint: บริการเก็บถาวรที่เลิกใช้แล้ว ( ลิงก์ )ลิงก์สำรอง
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Initial_ramdisk&oldid=1359897550 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ แรมดิสก์เริ่มต้น

ในระบบ ลินุกซ์ initrd ( initial ramdisk ) คือกลไกในการโหลด ระบบไฟล์ รูทชั่วคราว ลงใน หน่วยความจำ เพื่อใช้เป็นส่วนหนึ่งของ กระบวนการเริ่มต้นระบบลินุกซ์ และ initrd ( initramfs from...

เหตุผล

ระบบปฏิบัติการ Linux หลายตัว มาพร้อมกับอิมเมจ เคอร์เนล Linux ทั่วไปเพียงตัวเดียวซึ่งนักพัฒนาของระบบปฏิบัติการนั้นสร้างขึ้นมาโดยเฉพาะเพื่อให้สามารถบูตบนฮาร์ดแวร์ที่หลากหลาย ไดรเวอร์ อุปกรณ์ สำหรับอิมเมจเคอร์เนลทั่วไปนี้จะถูกรวมไว้เป็น...

การดำเนินการ

ต้องจัด เก็บอิมเมจ ของระบบไฟล์รูทเริ่มต้นนี้ (รวมถึงอิมเมจเคอร์เนล) ไว้ในที่ที่ บูตโหลดเดอร์ ของ Linux หรือเฟิร์มแวร์บูตของคอมพิวเตอร์สามารถเข้าถึงได้ ซึ่งอาจเป็นระบบไฟล์รูทเอง อิมเมจบูต บน แผ่นซีดี/ดีวีดี พาร์ติชั่นขนาดเล็กบนดิสก์ภายในเครื่อง ( พาร์ติชั่นบูต...

การเตรียมการติดตั้ง

ระบบปฏิบัติการลินุกซ์บางรุ่น เช่น Debian จะสร้างอิมเมจ initrd ที่ปรับแต่งเอง ซึ่งมีเฉพาะสิ่งที่จำเป็นสำหรับการบูตคอมพิวเตอร์เครื่องนั้นๆ เช่น โมดูลเคอร์เนล ATA , SCSI และระบบไฟล์ โดยทั่วไปแล้ว อิมเมจนี้จะฝังตำแหน่งและประเภทของระบบไฟล์รูทไว้ด้วย