initramfs ใช้ / etc / fstab หรือไม่


20

วิธีที่ฉันเข้าใจมัน initramfs รับผิดชอบการโหลดระบบไฟล์รูท "ของจริง"

ตอนนี้มีสองที่ที่เรานิยามรูตนั้น /etc/fstabครั้งแรกที่เรานำรายการใน root=/dev/sda1ประการที่สองเราวางอุปกรณ์บนเคอร์เนลบูตคำสั่งเช่น

initramfs อันใดที่ใช้เพื่อพิจารณาว่าระบบไฟล์รูทอยู่ที่ไหน? ถ้ามันใช้พารามิเตอร์เคอร์เนลรากทำไมเรามีรายการใน/etc/fstab? ตัวเลือกที่สอง (อ่าน/etc/fstab) ค่อนข้างไร้เหตุผลเพราะ/etc/fstabไฟล์อยู่ในอุปกรณ์รูทมากที่ initramfs พยายามเมาท์ตั้งแต่แรก

สิ่งที่สับสนมาก

คำตอบ:


14

ตามที่คุณระบุวัตถุประสงค์ของ initramfs คือการติดตั้งระบบไฟล์รูท "ของจริง" (มันสามารถทำสิ่งอื่นได้เช่นกัน แต่นี่เป็นงานทั่วไป)

โดยไม่ต้อง initramfs /sbin/initให้เคอร์เนลปกติจะติดพาร์ทิชันขึ้นเป็นอ่านอย่างเดียวแล้วผ่านการควบคุมไป initramfs ใช้เวลามากกว่างานนี้จากเคอร์เนลโดยปกติเมื่อระบบไฟล์รูทไม่ได้เป็นพาร์ติชันปกติ (mdraid, lvm, เข้ารหัส ฯลฯ )

ตอนนี้นอกเหนือจากพื้นหลังของ initramfs แล้วระบบของคุณก็ยัง/etc/fstabอยู่ในระบบรูทของคุณ เมื่อเปิดใช้งาน initramfs ระบบไฟล์รูทนั้นจะไม่อยู่ที่นั่นดังนั้นจึงไม่สามารถไปถึง fstab (ปัญหาไก่และไข่)
แต่เราต้องส่งพารามิเตอร์ไปยังอาร์กิวเมนต์การบู๊ตของเคอร์เนลเพื่อให้ initramfs ใช้งาน root=/dev/sdXปกตินี้เป็นสิ่งที่ต้องการ อย่างไรก็ตามมันอาจทำบางอย่างเพื่อหาว่าอุปกรณ์รูทของคุณอยู่ที่ไหนโดยอัตโนมัติดังนั้นจึงไม่มีพารามิเตอร์เลย เนื่องจากเป็นเพียงซอฟต์แวร์ (โดยทั่วไปคือสคริปต์) มันสามารถทำทุกอย่างที่ต้องการเพื่อติดตั้งอุปกรณ์รูท

ตอนนี้ตามที่ระบุไว้ก่อนหน้าเคอร์เนลจะเมานต์รูทจริงเป็นแบบอ่านอย่างเดียว initramfs ควรทำสิ่งนี้อย่างแน่นอน เมื่อ initramfs เสร็จสิ้นแล้วระบบจะทำการบูทเหมือนกับว่าไม่มี initramfs เลยและ/sbin/initเริ่มทำงาน จากนั้น init นี้จะเริ่มต้นสคริปต์การบูตปกติทั้งหมดของคุณและเป็นหน้าที่ของหนึ่งในสคริปต์เหล่านี้ในการอ่าน/etc/fstabสลับรูทเป็นอ่าน - เขียนและติดตั้งระบบไฟล์อื่น ๆ ของคุณ


ดังนั้นคุณกำลังบอกว่า / sbin / init ภายในระบบไฟล์รูทจริงจะทำการเมาท์รูทอีกครั้งโดยใช้ตัวเลือกใน / etc / fstab?
Ahmed Ghonim

3
ใช่. มักจะทำผ่านmount -o remount,rw /วิ มันจะไม่เปลี่ยนอุปกรณ์ที่ติดตั้ง แต่มันจะเปลี่ยนตัวเลือกในการติดตั้ง จากหน้าคน:After this call mount reads fstab (or mtab) and merges these options with options from command line
แพทริค

เราจะส่งพารามิเตอร์ไปยังอาร์กิวเมนต์ของการบู๊ตเคอร์เนลได้อย่างไรถ้าเราใช้บรรทัดคำสั่ง grub2 ระบบของฉันไม่แสดงเมนูด้วงด้วยเหตุผลบางอย่าง
สัญชาตญาณ

@intuited คุณควรถามคำถามใหม่ ความคิดเห็นไม่ใช่สถานที่สำหรับคำถาม & คำตอบ
Patrick

lsinitramfs /boot/initrd* | fgrep fstabและประหลาดใจ initramfs มีไฟล์ fstab อย่างน้อยสำหรับฉัน
youfu

2

อาจหรือไม่ก็ได้ เนื่องจาก Initramfs สามารถสร้างได้หลายวิธี (เคอร์เนลเพียงแค่โหลดและรัน/initซึ่งทำสิ่งใดก็ตาม) อย่างไรก็ตามการใช้พารามิเตอร์นั้นเป็นเรื่องธรรมดามากขึ้นเพราะมันช่วยให้มีความยืดหยุ่นมากขึ้นเช่นถ้ามีอะไรเปลี่ยนแปลงคุณสามารถแก้ไขรายการบูตและสิ่งต่าง ๆ ยังทำงานอยู่ ด้วยรูท hardcoded ในตัวสิ่งนี้จะไม่สามารถทำได้

รายการ fstab อาจยังจำเป็นต้องใช้วิธีใดวิธีหนึ่งตามที่กำหนดสิ่งอื่น ๆ เช่นตัวเลือกการเมาท์ (บางส่วนสามารถเปลี่ยนแปลงได้ในระหว่างการเดินทาง) และการfsckสั่งซื้อ นอกจากนี้แม้ว่ามันจะฟุ่มเฟือยอย่างสิ้นเชิง (และถ้า Initramfs จัดการกับมันก็อาจทำงานได้โดยไม่ต้อง) ฉันยังคงเก็บรายการในนั้นเพื่อความสมบูรณ์


1

คุณสามารถพิจารณา / etc / fstab เป็นการติดตั้งแบบสแตติกมันเป็นเพียงวิธีการทำงานดังกล่าว แต่ในความเป็นจริงแล้วไม่เพียง แต่ใช้งานคำสั่ง mount และคุณเห็นระบบไฟล์จำนวนมากที่ขาดหายไปใน fstab บริการเช่น udev และ udisk จัดการ "automounting" ส่วนใหญ่โดยไม่สนใจไฟล์ / etc / fstab ...

ดังนั้นหากมีการติดตั้งหรือไม่บ่อยครั้งมันก็ไม่เกี่ยวข้องกับ / etc / fstab

initramfs เป็นเพียง rootfs ชั่วคราวที่ใช้ในระหว่างกระบวนการบูตจนกว่ารูท "true" จะถูกเมาท์ดังนั้นทำไม initramfs จึงควรอยู่ใน / etc / fstab?

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