Linux的mount命令,关于rootfs的一个疑问

ChenQi 发布于 2012/08/31 17:03
阅读 4K+
收藏 1

首先,使用Linux系统的朋友可以先敲下命令‘mount’吗?

在大家的输出中有出现类似'rootfs on / type rootfs'这样的结果吗?

我的结果大致如下:

/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda3 on /buildarea type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)

我在fedora,ubuntu,redrat,centos上都试了下,都没有出现rootfs on / type rootfs类似的字样。但是,据我所知,有些系统是有的。FC15上就有,如此链接所示:http://serverfault.com/questions/275988/what-is-rootfs。(FC17就没有。)

问题就是:为什么有的有,有的没有呢?是说现在rootfs不需要了?还是mount之后umount了? 这么多linux 的 distro都没有rootfs on / type rootfs了,why?

另外,这篇kernel doc http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt对rootfs进行了阐释:

What is rootfs?
---------------

Rootfs is a special instance of ramfs (or tmpfs, if that's enabled), which is
always present in 2.6 systems.  You can't unmount rootfs for approximately the
same reason you can't kill the init process; rather than having special code
to check for and handle an empty list, it's smaller and simpler for the kernel
to just make sure certain lists can't become empty.

Most systems just mount another filesystem over rootfs and ignore it.  The
amount of space an empty instance of ramfs takes up is tiny.

他说rootfs不能被unmount,那么问题来了。我在centos上有以下结果:

[build@usp-centos58-32 ~]$ mount
/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda3 on /buildarea type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
[build@usp-centos58-32 ~]$ uname -a
Linux usp-centos58-32 2.6.18-308.el5 #1 SMP Tue Feb 21 20:05:41 EST 2012 i686 i686 i386 GNU/Linux

2.6的kernel,但是没有rootfs。(另外RedHat也是2.6的kernel,也没有)

有对这方面比较了解的朋友吗?

 

加载中
0
ChenQi
ChenQi
沉的飞快==
0
echor
echor
rootfs 后来的挂载点在 / , / 后面会被用来挂载硬盘, 就把rootfs 隐藏了,只是隐藏了,
ChenQi
ChenQi
如果只是隐藏了,mount命令会显示的。
0
ChenQi
ChenQi
人工置顶
0
s
sysctl

rootfs 是系统初始化的时候加载的,  系统初始化后有个switch-root动作,然后执行一系列加载直到现在你看到的mount,

所以rootfs 并不在现在的mount能理解的空间,

各发行版 有个initrd, 解开看,就明白了

0
ChenQi
ChenQi

引用来自“sysctl”的答案

rootfs 是系统初始化的时候加载的,  系统初始化后有个switch-root动作,然后执行一系列加载直到现在你看到的mount,

所以rootfs 并不在现在的mount能理解的空间,

各发行版 有个initrd, 解开看,就明白了

那为什么有些系统启动后会有‘rootfs on / type rootfs'这一条结果呢?
0
ChenQi
ChenQi

http://superuser.com/questions/468603/doubts-about-the-linux-root-file-system

stackoverflow上关于此疑问的回答(怎么被扔到另外的网站上去了。。。。)

基本上可以作为标准答案了。

The mount command takes information about current mounts from /etc/mtab.

In the pastmtab was a normal file re-created after every boot and updated by the mount command– so it wouldn't have a rootfs / entry simply because the rootfs is never explicitly mounted; it just always exists. (Such a mtab sometimes also has duplicate entries, or entries for filesystems that aren't mounted anymore...)

Many current distros now symlink mtab to /proc/self/mounts, which (like everything else in /proc) is directly generated by the kernel. Because of this, it always shows everything that is currently mounted, including both rootfs / and /dev/blah /.

You can use cat /proc/self/mounts on all distros to compare the mounts. (There also is/proc/self/mountinfo, which uses an incompatible syntax but adds more detail.)

0
s
sysctl

引用来自“ChenQi”的答案

引用来自“sysctl”的答案

rootfs 是系统初始化的时候加载的,  系统初始化后有个switch-root动作,然后执行一系列加载直到现在你看到的mount,

所以rootfs 并不在现在的mount能理解的空间,

各发行版 有个initrd, 解开看,就明白了

那为什么有些系统启动后会有‘rootfs on / type rootfs'这一条结果呢?
switch root不是必须的, initrd 本来就是一个完整的小系统 --- 仅仅是本人看法
0
ChenQi
ChenQi

引用来自“sysctl”的答案

引用来自“ChenQi”的答案

引用来自“sysctl”的答案

rootfs 是系统初始化的时候加载的,  系统初始化后有个switch-root动作,然后执行一系列加载直到现在你看到的mount,

所以rootfs 并不在现在的mount能理解的空间,

各发行版 有个initrd, 解开看,就明白了

那为什么有些系统启动后会有‘rootfs on / type rootfs'这一条结果呢?
switch root不是必须的, initrd 本来就是一个完整的小系统 --- 仅仅是本人看法

之所以有些有'rootfs on / type rootfs'而有些系统没有,是因为他们对/etc/mtab的实现不一样,一种是mount更新,一种是symlink到/proc/self/mounts,后一种是由kernel提供信息,所以能看到'rootfs on / type rootfs',我试了下,基本上所有发行版的/proc/self/mounts中都有'rootfs on / type rootfs'.

 

另外,我看到一篇blog中写道:在桌面或者服务器的linux系统中,rootfs会被真正的存储在硬盘上的文件系统所替换,此时,它所占用的ram会被释放,这个过程叫pivot(不知道为什么叫pivot。。。。)

 

另外一篇写道:initrd和initramfs好像是用来解决那个chicken-or-egg的问题的:不加载文件系统,就不能访问device;不能访问device,就不能加载文件系统(因为需要驱动)。然后,一种解决方案是将驱动直接编译进kernel,但是对于不同体系,比较麻烦,而且kernel较大;第二种方案就是initrd和initramfs,将rootfs载入ramdisk,然后执行用户空间程序。

返回顶部
顶部