Tại sao trên một số hệ thống Linux, hệ thống tệp gốc xuất hiện dưới dạng / dev / root thay vì / dev / <nút thiết bị thực> trong mtab?


11

Tôi đã thấy trên các hệ thống Linux khác nhau, thay vì nút thiết bị thực (ví dụ /dev/sda1:), thiết bị gốc xuất hiện dưới dạng /dev/roothoặc thay vì hệ thống tệp thực, mtabcho biết đó là hệ thống tệp được gọi rootfs(xuất hiện dưới dạng hệ thống tệp thực /proc/filesystems, nhưng không có mã trong <linux-kernel-source-tree>/fs). Nhiều tiện ích khác nhau đã được thực hiện để sử dụng các thuộc tính nhất định để xác định nút thiết bị gốc thực sự (chẳng hạn như ndev và rootdev Chromium OS). Tôi không thể tìm thấy lời giải thích hợp lý nào cho vấn đề này ngoài việc đọc ở đâu đó rằng các thiết bị nhúng rất nhỏ không phải luôn có /devnút thiết bị cho thiết bị gốc của họ. (Điều này có đúng không, và nếu vậy, đó có phải là câu trả lời cho câu hỏi của tôi không?) Tại sao mtab đôi khi nói /dev/root(và tôi nghĩ rằng tôi có thể đã thấy nó nóirootdevmột lần) thay vì nút thiết bị thực, và làm thế nào tôi có thể làm cho nó luôn luôn nói nút thiết bị thực? Hạt nhân gắn kết đầu tiên trên thiết bị gốc sau khi rootthông số trong cmdline, sau đó init/systemdtái gắn kết nó theo fstab, đúng không? Nếu vậy, thì tôi đoán initduy trì mtab. Nếu lý thuyết của tôi là chính xác, làm thế nào tôi có thể thực hiện initghi nút thiết bị gốc thực sự mtab? Tôi nhận thấy rằng đó /etc/mtabthực sự là một liên kết tượng trưng /proc/mounts, có nghĩa mtablà được duy trì bởi kernel. Vậy làm cách nào để cấu hình / vá kernel, thay vì nói đường dẫn nút thiết bị gốc /dev/root, có mtabchứa nút thiết bị thực không?

Câu trả lời:


4

Đây thường là một tạo tác của việc sử dụng initramfs.

Từ tài liệu kernel ( https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

Rootfs là gì?

Rootfs là một phiên bản đặc biệt của ramfs (hoặc tmpfs, nếu được bật), luôn có trong các hệ thống 2.6. Bạn không thể ngắt kết nối rootfs vì lý do tương tự bạn không thể giết tiến trình init; thay vì có mã đặc biệt để kiểm tra và xử lý một danh sách trống, hạt nhân nhỏ hơn và đơn giản hơn để đảm bảo các danh sách nhất định không thể trở nên trống rỗng.

Hầu hết các hệ thống chỉ gắn kết một hệ thống tập tin khác trên rootfs và bỏ qua nó. Lượng không gian mà một ramfs trống chiếm rất ít.

Do đó rootfs, hệ thống tập tin gốc đã được tạo cho initramfs và không thể đếm được.

Liên quan đến /dev/root, tôi ít chắc chắn hơn về điều này, nhưng nếu tôi nhớ chính xác /dev/rootthì được tạo khi sử dụng initrd (không giống như initramfs).


mountcung cấp rootfs on / type rootfs (rw)cho initrd và /dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)cho đĩa cứng ext2 với thiết lập này .
Ciro Santilli 冠状 病毒 审查 事件

/dev/rootđược sử dụng bởi một số triển khai initramfs nhưng không phải cái khác - trong những trường hợp này không phải do kernel. Khi không sử dụng initramfs, nó dường như là một giá trị giữ chỗ được sử dụng bởi kernel. (Có lẽ nó có thể được gỡ bỏ trong một số phiên bản kernel sau này). stackoverflow.com/questions/37310046/ từ
sourcejedi


2

Trong Linux, /dev/rootnếu có, là một liên kết tượng trưng đến thiết bị thực tế được tạo khi khởi động.

Bạn có thể sử dụng readlink /dev/roothoặc cat /proc/cmdlineđể xem roottham số của kernel đã khởi động, và do đó tìm ra thiết bị thực sự đằng sau nó.

Từ người đàn ông dracut(8)

Tuy nhiên, để tiếp tục khởi động thành công, mục tiêu là xác định vị trí khối lượng gốc của bạn và tạo symlink / dev / root trỏ đến hệ thống tệp.


Tôi không hoàn toàn chắc chắn nếu /dev/rootlà một vật phẩm của các bản phân phối dựa trên RedHat.
Rui F Ribeiro

Chà, Debian 8 của tôi không có /dev/root/. Trên một CentOS cũ, nó dường như là một nút thiết bị thực tế thay vì liên kết tượng trưng.
ilkkachu

1
Chà, đề cập đến công thức của OpenEmbeddedbase-filesfstab/dev/root , vì vậy nó không chỉ là bản phân phối có nguồn gốc từ Red Hat đang sử dụng nó.
ack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.