Điều này có lẽ nên được cập nhật, bởi vì rất nhiều thông tin được cung cấp ở đây là sai lệch, và thực sự có thể chưa bao giờ được chính xác toàn diện.
https://bootlin.com/blog/find-root-device/
Đối với điểm / mount, bạn được thông báo rằng nó tương ứng với / dev / root, đây không phải là thiết bị thực mà bạn đang tìm kiếm.
Tất nhiên, bạn có thể nhìn vào dòng lệnh kernel và xem hệ thống tập tin gốc ban đầu mà Linux được hướng dẫn để khởi động (tham số gốc):
$ cat / Proc / cmdline mem = 512M console = ttyS2,115200n8 root = / dev / mmcblk0p2 rw rootwait
Tuy nhiên, điều này không có nghĩa là những gì bạn thấy là thiết bị gốc hiện tại. Nhiều hệ thống Linux khởi động trên các hệ thống tập tin gốc trung gian (như initramdisks và initramfs), vốn chỉ được sử dụng để truy cập vào hệ thống cuối cùng.
Một điều mà điều này chỉ ra là thứ trong / Proc / cmdline không nhất thiết phải là gốc thiết bị cuối cùng thực sự tồn tại.
Đó là từ những người bận rộn, những người mà tôi cho là biết họ đang nói gì khi nói đến tình huống khởi động.
https://www.linuxquestions.org/questions/slackware-14/slackware-civerse-dev-root-688189/page2.html
Tài nguyên hữu ích thứ hai tôi tìm thấy là một chủ đề Slackware rất cũ về câu hỏi / dev / root, từ thời đại của chủ đề này, chúng ta có thể thấy rằng tất cả các biến thể luôn có mặt, nhưng tôi tin rằng 'hầu hết' đều sử dụng biểu tượng Phương thức liên kết, nhưng đó là một công cụ biên dịch kernel đơn giản, nó có thể tạo một hoặc không tạo một nếu tôi hiểu đúng về áp phích, nghĩa là chuyển đổi một chiều và readlink / dev / root báo cáo tên thiết bị thực, chuyển đổi nó khác, và nó không.
Vì chủ đề chính của chủ đề đó là làm thế nào để thoát khỏi / dev / root, nên họ phải tìm hiểu xem nó thực sự là gì, điều gì tạo ra nó, v.v., có nghĩa là, họ phải hiểu nó để thoát khỏi nó.
gnashly giải thích nó tốt:
/ dev / root là một thiết bị chung có thể được sử dụng trong fstab. Người ta cũng có thể sử dụng 'rootfs'. Làm điều này cung cấp một số lợi thế ở chỗ nó cho phép bạn ít cụ thể hơn. Ý tôi là, nếu phân vùng gốc nằm trên một ổ đĩa ngoài, nó không phải lúc nào cũng hiển thị như cùng một thiết bị và gắn thành công nó như / sẽ yêu cầu thay đổi fstab để khớp với thiết bị chính xác. Bằng cách sử dụng / dev / root, nó sẽ luôn khớp với bất kỳ thiết bị nào được chỉ định trong các tham số khởi động kernel từ lilo hoặc grub.
/ dev / root luôn có mặt như một điểm gắn kết ảo, ngay cả khi bạn chưa bao giờ nhìn thấy nó. Các rootfs cũng vậy (so sánh với các thiết bị ảo đặc biệt như Proc và tmpfs không có tiền đề / dev)
/ dev / root là một thiết bị ảo như 'Proc' hoặc / dev / tcp '. Không có nút thiết bị nào trong / dev cho những thứ này - nó đã có trong kernel dưới dạng thiết bị ảo.
Điều này giải thích tại sao một liên kết tượng trưng không nhất thiết tồn tại. Tôi ngạc nhiên tôi chưa bao giờ gặp phải vấn đề này trước đây, vì tôi duy trì một số chương trình cần biết thông tin này, nhưng muộn còn hơn không.
Tôi tin rằng một số giải pháp được cung cấp ở đây sẽ 'thường xuyên' hoạt động và có lẽ là những gì tôi sẽ làm, nhưng chúng không phải là giải pháp thực sự cho vấn đề, như tác giả của busybox lưu ý, rất phức tạp để thực hiện trong một cách mạnh mẽ.
[CẬP NHẬT:} Sau khi nhận được một số dữ liệu thử nghiệm của người dùng, tôi sẽ sử dụng phương thức gắn kết, có vẻ như sẽ ổn đối với một số trường hợp. / Proc / cmdline không hữu ích vì có quá nhiều biến thể. Trong ví dụ đầu tiên, bạn thấy phương thức cũ. Điều này ngày càng ít phổ biến hơn vì nó không khuyến khích sử dụng nó (cú pháp loại gốc / dev / sdx [0-9]) vì những đường dẫn đó có thể thay đổi linh hoạt (thứ tự trao đổi đĩa, chèn đĩa mới, v.v. sda1 trở thành / dev / sdb1).
root=/dev/sda1
root=UUID=5a25cf4a-9772-40cd-b527-62848d4bdfda
root=LABEL=random string
root=PARTUUID=a2079bfb-02
VS rất sạch sẽ và dễ dàng phân tích cú pháp:
mount
/dev/sda1 on / type ext4 (rw,noatime,data=ordered)
Trong trường hợp của cmdline, bạn sẽ thấy, biến thể duy nhất là 'câu trả lời' đúng trong lý thuyết là biến thể đầu tiên, không dùng nữa, vì bạn không nên chuyển root đến một mục tiêu di động như / dev / sdxy
Hai yêu cầu tiếp theo thực hiện hành động tiếp theo là lấy liên kết tượng trưng từ chuỗi đó trong / dev / đĩa / by-uuid hoặc / dev / đĩa / by-nhãn
Cái cuối cùng yêu cầu tôi tin rằng sử dụng parted -l để tìm id mà parted đang trỏ đến.
Đó chỉ là các biến thể mà tôi biết và đã thấy, cũng có thể có các biến thể khác, như GPTID, chẳng hạn.
Vì vậy, giải pháp tôi đang sử dụng là đây:
đầu tiên, xem nếu / dev / root là một liên kết tượng trưng. Nếu đúng, hãy xác minh nó không phải / dev / đĩa / by-uuid hoặc by-nhãn, nếu có, bạn phải thực hiện bước xử lý thứ hai để có được đường dẫn thực cuối cùng. Phụ thuộc vào công cụ bạn sử dụng.
Nếu bạn không có gì, sau đó đi đến gắn kết, và xem đó là như thế nào. Như một trường hợp dự phòng cuối cùng, một trường hợp tôi không sử dụng vì các đối số được đưa ra chống lại nó thậm chí không nhất thiết là phân vùng thực tế hoặc thiết bị được đề cập là đủ tốt để tôi từ chối giải pháp đó cho chương trình của mình. mount không phải là một giải pháp hoàn toàn mạnh mẽ và tôi chắc chắn đã cung cấp đủ các mẫu, có thể dễ dàng tìm thấy các trường hợp không đúng chút nào, nhưng tôi tin rằng hai trường hợp này bao gồm 'hầu hết' người dùng, đó là tất cả những gì tôi cần.
Giải pháp tốt nhất, sạch nhất và đáng tin cậy nhất là hạt nhân luôn luôn tạo liên kết tượng trưng, không gây tổn hại gì cho bất cứ ai, và gọi nó là tốt, nhưng đó không phải là cách nó hoạt động trong thế giới thực. .
Tôi không coi bất kỳ giải pháp nào trong số này là giải pháp 'tốt hoặc mạnh mẽ', nhưng tùy chọn gắn kết dường như đáp ứng 'đủ tốt' và nếu cần giải pháp thực sự mạnh mẽ, hãy sử dụng công cụ mà busybox khuyến nghị.