Mengapa pada beberapa sistem Linux, apakah filesystem root tampil sebagai / dev / root alih-alih / dev / <real device node> di mtab?

11

Saya telah melihat pada berbagai sistem Linux di mana alih-alih simpul perangkat nyata (misalnya /dev/sda1:), perangkat root muncul sebagai /dev/root, atau bukannya sistem file nyata, mtabmengatakan itu adalah sistem file yang disebut rootfs(yang muncul sebagai sistem file nyata /proc/filesystems, tetapi tidak memiliki kode di <linux-kernel-source-tree>/fs). Berbagai utilitas telah dibuat untuk menggunakan atribut tertentu untuk menentukan simpul perangkat root nyata (seperti rdev, dan Chromium OS rootdev). Saya tidak dapat menemukan penjelasan logis untuk ini selain membaca di suatu tempat bahwa perangkat yang tertanam sangat kecil tidak selalu harus memiliki /devsimpul perangkat untuk perangkat root mereka. (Apakah ini benar, dan jika demikian, apakah itu jawaban untuk pertanyaan saya?) Mengapa mtab kadang-kadang mengatakan /dev/root(dan saya pikir saya mungkin telah melihatnya mengatakannyarootdevsekali) bukan node perangkat nyata, dan bagaimana saya bisa membuatnya selalu mengatakan node perangkat nyata? Kernel pertama mount perangkat root mengikuti rootparameter di cmdline, lalu pasang init/systemdkembali sesuai dengan fstab, benar? Jika demikian, maka saya kira initmempertahankan mtab. Jika teori saya benar, bagaimana saya bisa initmenulis simpul perangkat root yang sebenarnya mtab? Saya perhatikan bahwa /etc/mtabsebenarnya itu adalah tautan simbolis /proc/mounts, yang artinya mtabdipelihara oleh kernel. Jadi, bagaimana cara mengkonfigurasi / menambal kernel, alih-alih mengatakan path node device root /dev/root, mtabmengandung node device sebenarnya?

Billy
sumber

Jawaban:

4

Ini umumnya merupakan artefak menggunakan initramfs.

Dari dokumentasi kernel ( https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

Apa itu rootfs?

Rootfs adalah instance khusus dari ramfs (atau tmpfs, jika itu diaktifkan), yang selalu ada dalam sistem 2.6. Anda tidak dapat meng-unmount rootfs dengan alasan yang kira-kira sama dengan Anda tidak dapat mematikan proses init; Daripada memiliki kode khusus untuk memeriksa dan menangani daftar kosong, ini lebih kecil dan sederhana untuk kernel untuk memastikan daftar tertentu tidak menjadi kosong.

Sebagian besar sistem hanya memasang sistem file lain melalui rootfs dan mengabaikannya. Jumlah ruang contoh kosong ramf mengambil kecil.

Dengan demikian rootfsadalah sistem file root yang dibuat untuk initramfs, dan tidak dapat di-unmount.

Berkenaan dengan /dev/root, saya kurang yakin tentang ini, tetapi jika saya ingat dengan benar /dev/rootdibuat saat menggunakan initrd (tidak sama dengan initramfs).

Patrick
sumber
mountmemberikan rootfs on / type rootfs (rw)untuk initrd dan /dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)untuk hard disk ext2 dengan pengaturan ini .
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
/dev/rootdigunakan oleh beberapa implementasi initramfs tetapi tidak yang lain - dalam kasus ini bukan karena kernel. Ketika tidak menggunakan initramfs, tampaknya ini adalah nilai placeholder yang digunakan oleh kernel. (Mungkin bisa dihapus dalam beberapa versi kernel yang lebih baru). stackoverflow.com/questions/37310046/…
sourcejedi
3

Gentoo memiliki tambalan yang melakukan hal ini (memastikan perangkat root sebenarnya ditampilkan). Anda dapat menemukannya di sini: https://lkml.org/lkml/2013/1/31/574

Milos Ivanovic
sumber
2

Di Linux, /dev/rootjika ada, adalah symlink ke perangkat aktual yang dibuat saat boot.

Anda dapat menggunakan readlink /dev/rootatau cat /proc/cmdlineuntuk melihat rootparameter kernel yang dibooting, dan dengan demikian mencari tahu perangkat nyata di belakangnya.

Dari manusia dracut(8)

Namun, untuk melanjutkan dengan boot yang berhasil, tujuannya adalah untuk menemukan volume root Anda dan membuat symlink / dev / root yang menunjuk ke sistem file.

Rui F Ribeiro
sumber
Saya tidak sepenuhnya yakin apakah /dev/rootini adalah artefak dari distribusi berbasis RedHat.
Rui F Ribeiro
Nah, Debian 8 saya tidak punya /dev/root/. Pada CentOS yang lama tampaknya merupakan simpul perangkat yang sebenarnya bukan symlink.
ilkkachu
1
Nah, resep OpenEmbeddedbase-filesfstab menyebutkan /dev/root, jadi bukan hanya distro yang berasal dari Red Hat yang menggunakannya.
ack