เหตุใดในระบบ Linux บางระบบระบบไฟล์รูทจึงปรากฏเป็น / dev / root แทนที่จะเป็น / dev / <real device node> ใน mtab?


11

ฉันเคยเห็นระบบ Linux หลายระบบซึ่งแทนที่จะเป็นโหนดอุปกรณ์จริง (ตัวอย่าง/dev/sda1:) อุปกรณ์รูทปรากฏเป็น/dev/rootหรือแทนที่จะเป็นระบบไฟล์จริงmtabกล่าวว่าเป็นระบบไฟล์ที่เรียกว่าrootfs(ซึ่งปรากฏเป็นระบบไฟล์จริงในระบบ/proc/filesystemsแต่ ไม่มีรหัสใน<linux-kernel-source-tree>/fs) ยูทิลิตี้ต่างๆถูกสร้างขึ้นเพื่อใช้คุณลักษณะบางอย่างเพื่อกำหนดโหนดอุปกรณ์รูทจริง (เช่น rdev และ Chromium OS rootdev) ฉันไม่สามารถหาคำอธิบายที่เป็นตรรกะเกี่ยวกับเรื่องนี้ได้นอกจากอ่านที่ใดที่อุปกรณ์ฝังตัวขนาดเล็กมากไม่จำเป็นต้องมี/devโหนดอุปกรณ์สำหรับอุปกรณ์รูท (เป็นจริงหรือไม่และถ้าเป็นเช่นนั้นคือคำตอบสำหรับคำถามของฉัน) ทำไมบางครั้ง mtab พูด/dev/root(และฉันคิดว่าฉันอาจเคยเห็นมันพูดrootdevหนึ่งครั้ง) แทนที่จะเป็นโหนดอุปกรณ์จริงและฉันจะทำให้มันพูดเสมอว่าโหนดอุปกรณ์จริงได้อย่างไร เคอร์เนลม้าแรกอุปกรณ์รากดังต่อไปนี้rootพารามิเตอร์ใน cmdline แล้วinit/systemdอีกครั้งที่เมาท์มันเป็นไปตามfstabถูกต้องหรือไม่ ถ้าเป็นเช่นนั้นผมเข้าใจรักษาinit mtabหากทฤษฎีของฉันถูกต้องฉันจะinitเขียนโหนดอุปกรณ์รูทจริงได้mtabอย่างไร ฉันสังเกตเห็นว่า/etc/mtabจริง ๆ แล้วเป็นการเชื่อมโยงสัญลักษณ์/proc/mountsซึ่งจะหมายถึงmtabถูกดูแลโดยเคอร์เนล ดังนั้นฉันจะกำหนดค่า / แก้ไขเคอร์เนลได้อย่างไรแทนที่จะบอกว่ารูทอุปกรณ์ของรูทอุปกรณ์คือ/dev/rootมีmtabโหนดอุปกรณ์จริงอยู่หรือไม่

คำตอบ:


4

นี่คือสิ่งประดิษฐ์โดยทั่วไปของการใช้ initramfs

จากเอกสารเกี่ยวกับเคอร์เนล ( https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

รูทคืออะไร?

Rootfs เป็นอินสแตนซ์พิเศษของ ramfs (หรือ tmpfs หากเปิดใช้งานอยู่) ซึ่งจะแสดงในระบบ 2.6 เสมอ คุณไม่สามารถเลิกเมานด์รูทได้ด้วยเหตุผลเดียวกับที่คุณไม่สามารถฆ่ากระบวนการเริ่มต้น แทนที่จะมีรหัสพิเศษเพื่อตรวจสอบและจัดการรายการว่างเปล่ามันมีขนาดเล็กลงและง่ายขึ้นสำหรับเคอร์เนลเพื่อให้แน่ใจว่ารายการบางรายการไม่สามารถว่างเปล่าได้

ระบบส่วนใหญ่จะเมานต์ระบบไฟล์อื่นผ่านรูทและไม่สนใจ จำนวนพื้นที่ว่างของอินสแตนซ์ที่ว่างเปล่าของ ramfs ใช้เวลาน้อย

ดังนั้นrootfsเป็นระบบไฟล์รูทที่สร้างขึ้นสำหรับ initramfs และไม่สามารถถอดออกได้

เกี่ยวกับ/dev/rootฉันไม่แน่ใจในเรื่องนี้ แต่ถ้าฉันจำได้อย่างถูกต้อง/dev/rootจะถูกสร้างขึ้นเมื่อใช้ initrd (ไม่เหมือนกับ initramfs)


mountให้rootfs on / type rootfs (rw)สำหรับ initrd และ/dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)ext2 ฮาร์ดดิสก์ด้วยการตั้งค่านี้
Ciro Santilli 冠状病毒审查六四事件法轮功

/dev/rootมีการใช้งานโดยการใช้งานของ initramfs แต่ไม่ใช่คนอื่น ๆ - ในกรณีเหล่านี้มันไม่ได้เกิดจากเคอร์เนล เมื่อไม่ใช้ initramfs ดูเหมือนว่าจะเป็นค่าตัวยึดตำแหน่งที่ใช้โดยเคอร์เนล (อาจเป็นไปได้ว่าจะสามารถลบออกได้ในรุ่นเคอร์เนลในภายหลัง) stackoverflow.com/questions/37310046/…
sourcejedi


2

ใน Linux /dev/rootถ้ามีจะเป็นการเชื่อมโยงไปยังอุปกรณ์จริงที่สร้างขึ้นในเวลาบูต

คุณใช้readlink /dev/rootหรือcat /proc/cmdlineดูrootพารามิเตอร์ของเคอร์เนลที่บูทและหาอุปกรณ์จริงที่อยู่ด้านหลัง

จากมนุษย์ dracut(8)

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


ฉันไม่แน่ใจว่า /dev/rootเป็นสิ่งประดิษฐ์ของ RedHat หรือไม่
Rui F Ribeiro

ดี Debian ของฉัน 8 /dev/root/ไม่ได้ บน CentOS แบบเก่าดูเหมือนว่าจะเป็นโหนดอุปกรณ์จริงแทนที่จะเป็น symlink
ilkkachu

1
ดีOpenEmbedded ของbase-filesสูตรfstabกล่าว/dev/rootจึงไม่ได้เป็นเพียงที่มีต้นกำเนิดจาก distros Red Hat ที่จะใช้มัน
แอ๊
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.