当前位置:首页 » 电脑资讯 » 为什么需要根文件系统

为什么需要根文件系统

发布时间: 2022-06-21 01:16:29

❶ uboot、内核、操作系统、根文件系统他们之间到底是什么关系,求大神指点!!

uboot是个引导启动程序。BIOS自检完成后就把电脑控制权交给uboot,由uboot来加载并引导操作系统运行。
内核就是最最最核心的那部份。操作系统内核就是操作系统的最最最最核心的那些程序。新安装的操作系统中,一些自带的小工具啊,小游戏啊,甚至连键盘鼠标控制功能,这些都不属于内核。内核是不包括硬件驱动程序的。
操作系统就是控制计算机硬件的软件系统。它与内核的区别是它包含硬件驱动和一些基本的实用功能。
根文件系统这个名词很少出现在windows中。在计算机存储中,目录结构都是以树形结构表示的,根就是指这棵树的根部。其他所有目录都是在这个“根”上面逐级分配而来。“根文件系统”因为你加了“系统”二字,所以可以解释为是指“整棵树”,整个“树形结构的文件系统”
它们之间的关系是:BIOS自检---uboot引导----加载内核----操作系统启动---启动完成,系统待机。这几个步骤所需要用到的文件与程序什么的全部存贮在文件系统中。在这几个名词来说,文件系统可以独立存在,但其他几样则无法脱离文件系统而存在。

❷ 为什么需要根文件系统它有什么作用

根文件系统?没听说。是说系统启动时加载的文件吧??????

❸ 根文件系统的讲解

Linux引导启动时,默认使用的文件系统是根文件系统。其中一般都包括这样一些子目录:
/etc/, /dev/, /usr/, /usr/bin/, /bin/, /var/等。
etc/目录主要含有一些系统配置文件;dev/含有设备特殊文件,用于使用文件操作语句操作设备;/usr/存放库函数、手册和其它一些文件。bin/存放执行程序;var/用于存放系统运行时可变的数据或者是日志等信息。
存放文件系统的设备就是文件系统设备。比如,对于一般使用的windows 2000操作系统,硬盘C盘就是文件系统设备,而硬盘上按一定规则存放的文件就组成文件系统,windows 2000有NTFS或FAT32等文件系统。

❹ grub.conf 为什么要指定根文件系统,initrd中的init脚本可以直接chroot过去的

chroot过去虽然可以,但是效率并不好,而且理论上不会切换init进程,这对于临时构建也许有必要,但是大多数已加载的库不会因根文件系统的切换而改变,initrd为了减少体积,是不会完善自身库接口的,这意味着少数函数的高级功能可能会异常,但是通过引导参数直接定义是没有问题的,执行完了必要工作后,会卸载所有已加载的函数库等待init进程挂载新的文件系统并重新初始化函数,虽然后期可以通过脚本做到,但是却没有利用init自身的函数直接,再说initrd里很多接口只是用来加载物理根文件系统的,多余接口比系统运行需要的接口都要多,多少会有安全隐患

❺ Linux内核中有文件系统模块, 那它和根文件系统什么关系哦

linux内核是linux的真实的操作系统,所有的操作系统的相关功能都是由用户接口程序传递到内核由内核来完成的。
linux文件系统是指linux操作系统对整个系统中的所有的数据、文件的管理的一种实现方式。
简单点说:像windows它的文件系统是NTFS文件系统或者FAT文件系统,通过这种方式将windows的各种文件保存在磁盘上,用于存储和访问了。
而linux系统则使用ext这种文件系统来实现。

❻ 什么是根文件系统

文件系统:File System => FS;
根文件系统:Root File System => RFS。

首先你考虑一点描述语句:根文件系统也是一种“文件系统”,可以认为是一种“特殊的”“文件系统”,为什么是叫“特殊的”呢?因为这种“根文件系统”承载着某些“特殊的功能”(其实“文件系统”相同的话,所具备的功能都是一样的),那就是“操作系统”可能需要通过某种“布局”来管理相关设备的,诸如软盘设备、硬盘设备、虚拟磁盘设备等等,这里可能就是用了一种已被定义好了“数据结构”的“布局”,即“文件系统”,而出现的“根文件系统”,可能是用来担当主要或重要角色。

形象点来说,Windows下的C盘分区是有一定文件系统的,如FAT32、NTFS,这当然也都是文件系统呀。在安装Windows操作系统时,会要求你先“格式化”C盘[当然我们目前考虑操作系统是被安装在C盘中],采用一种“文件系统”比如NTFS、FAT32等,这一步呀,就类似于安装“根文件系统”,也就是说在C盘中的NTFS文件系统会被称作是“根文件系统”,而在D盘等中的NTFS文件系统会被称作是“文件系统”或你想加上前缀名称也不是不可以,比如“普通文件系统”,而我们从名称上来说的话,因为这里出现了一个字眼“根”,所以我们就有两种名称的叫法了,自然就是FS与RFS,所以这种名称叫法就会让人感觉很是“云里雾里”,而后“不知所云”的],这个“格式化”过程就是将C盘上的存储空间按预先定义好的一种FS的“数据结构”去“初始化”这些磁盘,[这里假设MINIX FS也可被Windows用来“格式化”C盘呀]比如建立引导块、建立超级块、建立两类位图块、建立i节点位图块、建立好数据区块等)也就是说,这个磁盘分区必须已经按一定数据结构的方式把磁盘空间“组织”好,以便“某种系统”(OS或FS,好象是FS更准确吧)能“访问”该分区,所以在 0.11内核中会有两种区分:mount_root() 和 sys_mount(),分别指“挂载根文件系统”、“挂载文件系统”[这里我觉得不应该用一个词:安装!我所理解的意思是,“安装”就是指把某种东西 “放”到另一种东西上面去,比如你要安装某种软件到C盘,这种软件的安装程序可能在D盘,这时你会启动D盘上该软件的安装程序,然后安装程序就会把软件默认安装到C盘上,所以这个过程会叫做“安装”,安装前C盘上没有该软件的任何信息,安装后C盘上就会有该软件的信息啦],所以呢,要使用 sys_mount()功能,某种设备(具体来说就是某一分区)必须已经被某种FS的格式“安装”好,然后该设备才会被“挂载”(mount)到“一个地 方”去。

那我们就以MINIX FS和FAT FS来分析吧。

在0.11内核代码中,从mount_root(void)中的注释可知,该函数会被“系统调用函数”sys_setup()调用,而在系统开机初始化设置时函数sys_setup()会被调用。为什么不会调用sys_mount()呢?那我们又何时使用sys_mount()函数呢?其实 sys_mount()函数也是“系统调用函数”。我们在linux系统中,当你在某个shell的命令行中输入mount后回车,你会看到以下提示信 息:
mount: usage: mount dev dir
你大概应该清楚了,而这是“正确的提示信息”,因为我们用错mount用法了(另外,在/bin目录下,可以看到有mount这样一个文件,mount应 该就是一个单独的程序了吧:-),好多地方都说mount是shell内部命令,而我更可能会认为cd才是shell的内部命令之一)。
那我们从sys_mount()函数的注释中可以知道,该函数是“安装文件系统调用函数”(我个人觉得这句话不太好理解),而我知道函数的功能,所以我会这么理解:这个函数是一“系统调用函数”,其功能是“将一个‘文件系统’即FS‘挂载’到(现有‘根文件系统’即RFS的)一个“目录”上,即目录文件的i节点。所以呢,这个就与“mount dev dir”这样的提示信息对应起来了;另外,我们需要知道,dev表示的是某个设备上的一个分区,而dir表示的是某一个“现有的”文件系统中的“目录文件”,注意一定是“现有的”,在这里就是我们说的“根文件系统”,所以,你要使用mount功能,就得有以下条件:
1、在一个现有“文件系统”(根文件系统RFS)下面
2、该RFS中已经有了一些设备文件的存在,比如 /dev 下面的 hd0,hd1,等等
3、2中的/dev其实就是由RFS来管理的
4、还需要有一个目录存在,而该目录也是在该RFS中的即由RFS来管理的
5、当然你要有实际的磁盘设备存在(/dev/hd0只是表示一个“虚”的设备文件名而已)且该设备已被“FS”格式化好了
6、最后你就会用mount dev dir这样的方式,将实际的磁盘分区“挂载”到dir中

假如,你有一个硬盘(假设大小是512MB),就只是一个分区,该分区中的FS是 FAT FS(假设unix可以直接访问,大不了看成是与minix fs是一样的,只是名称不同而已,以下就是把它看成就是一个minix fs来分析的)。

所以当你启动了“0.11系统”(这个说法比较简化,意思就是你进入了sh命令行)后,其实RFS就已经被“自动”“挂载”好了(就是 mount_root()),这时,你需要在该“0.11系统”中访问那个硬盘,假设硬件上你已经安装好了硬盘了,然后你会在sh命令行中进行“安装”过 程了,假如是:
mount /dev/hd0 /mnt/fatc
即将第一个硬盘的第一个分区(目前只有一个分区)“挂载”到“RFS”中的根目录下的mnt目录中的fatc目录上。所以,你可以直接“进入”到 fatc目录中去访问该硬盘里的文件了。
成功了!挂载成功,大功告成!

因为你了解内核代码,所以你应该知道mount一系列过程的,你要知道以下几点:
1、/dev/hd0, /mnt/fatc都是RFS中的“文件”(统称),前者是设备文件,后者是目录文件。
[体现在i节点结构中,就是各自的inode->i_mode中会区分是“设备类型文件”还是“目录类型文件”,且前者的 inode->zone[0]存有该设备的设备号(还有inode->i_dev也是设备号,但实际含义不一样),后者的 inode->i_mount就被置位啦,注意因为这个i节点就是一个“被‘安装’/‘挂载’好了FS的i节点]

2、/这是目录,但这个是RFS的目录,且是根目录。

3、/mnt/fatc “相当于”就是那个硬盘分区中FS的根目录。但其实该硬盘中的根目录也是/。
[假设当你去访问那个分区“根”目录(其实也是/,但你能直接进去吗?)中的某个文件hello.c,时,你会在现有sh命令行中,cd /mnt/fatc回车后 ls hello* -l,然后你会发现有hello.c这个文件,其实你就应该需要知道RFS是怎么“定位”寻找到该hello.c文件的,当中有一个重要的过程就是需要取 每一个文件的inode信息即iget()函数,该函数中发现某文件的inode->i_mount被置位时,就“特别小心”了,为什么?因为该 inode表示被“挂载”了一个文件系统,所以RFS会“切换”到那个FS的根目录中去(使用了ROOT_INO,super_block.s_dev这样的参数),然后再在该FS中按正常的过程继续寻找所需要的文件,所以你能找到]

“正常的过程”就是指:要么从一个FS的根目录中开始查找文件,要不从一个文件系统当前用户进程的当前工作目录中开始查找文件。

所以就有一个重要的说法(我是这么理解的):跨文件系统访问文件。这一过程涉及面较广,主要数据结构有:i节点、超级块。

4、最后,当你不需要使用该分区或是你想把硬盘拿走,则你会使用 umount 功能啦,这就对应 sys_umount()这一“系统调用函数”,那你就要知道该函数做了些什么事了。

最后,总的来说:
mount_root()挂载了一个MINI FS又被称为是RFS。
然后你可以在该RFS中再挂载别的FS。RFS与系统“共存亡”,自动被“挂载”,自动被“卸载”。
所以,FAT等也可以是根文件系统,当然也是文件系统。

所以,当你在你电脑上安装了多操作系统时,假设在C盘(FAT32 FS)被装了 win98,在D盘(NTFS FS)被安装了winxp,那么,当你进入了win98时,你FAT32好象就是RFS,那么NTFS就是FS了;当你进入了winxp时,NTFS好象就是RFS,那么FAT32就是FS了。
(为什么C盘是要FAT32呢,因为win98不支持ntfs fs,而你又是装的win98)

❼ 根文件系统的简介

首先要明白的是“什么是文件系统”,文件系统是对一个存储设备上的数据和元数据进行组织的机制。这种机制有利于用户和操作系统的交互。在一篇oracle的技术文章中看到这样一句话“尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如此,这是因为在 UNIX 传统中,它使用文件 I/O 机制管理硬件设备和数据文件”,这句话我是这样理解的,在Linux没有文件系统的话,用户和操作系统的交互也就断开了,例如我们使用最多的交互shell,包括其它的一些用户程序,都没有办法运行。在这里可以看到文件系统相对于Linux操作系统的重要性。下面是Linux文件系统组件的体系结构。
用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点。
VFS 是底层文件系统的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。有两个针对文件系统对象的缓存(inode 和dentry)。它们缓存最近使用过的文件系统对象。
每个文件系统实现(比如 ext2、JFS 等等)导出一组通用接口,供 VFS 使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求。例如,对底层设备驱动程序的读写请求会通过缓冲区缓存来传递。这就允许在其中缓存请求,减少访问物理设备的次数,加快访问速度。以最近使用(LRU)列表的形式管理缓冲区缓存。注意,可以使用 sync 命令将缓冲区缓存中的请求发送到存储媒体(迫使所有未写的数据发送到设备驱动程序,进而发送到存储设备)。
当我们在Windows下,提到文件系统时,你的第一反应是想到的是什么?是不是Windows下的一些Fat32、NTFS等的文件系统的类型。而在Linux中,你可能会想到Ext2、Ext3,但你还必须要有一个根文件系统的概念。根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误。
那么根文件系统在系统启动中到底是什么时候挂载的呢?先将/dev/ram0挂载,而后执行/linuxrc.等其执行完后。切换根目录,再挂载具体的根文件系统.根文件系统执行完之后,也就是到了Start_kernel()函数的最后,执行init的进程,也就第一个用户进程。对系统进行各种初始化的操作。如果要弄明白这里的过程的话,可要好好的看看Linux内核源码了。下图展示了VFS,内核,文件系统的层次结构:
根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的”根“,既然是根的话,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。它包含系统引导和使其他文件系统得以挂载(mount)所必要的文件。根文件系统包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在 Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。
Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。
在 Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂载(mount)。使用 mount 命令将一个文件系统附着到当前文件系统层次结构中(根)。在执行挂装时,要提供文件系统类型、文件系统和一个挂装点。根文件系统被挂载到根目录下“/”上后,在根目录下就有根文件系统的各个目录,文件:/bin /sbin /mnt等,再将其他分区挂接到/mnt目录上,/mnt目录下就有这个分区的各个目录,文件。
Linux根文件系统中一般有如下图的几个目录:
1./bin目录
该目录下的命令可以被root与一般账号所使用,由于这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。
/bin目录下常用的命令有:cat、chgrp、chmod、cp、ls、sh、kill、mount、umount、mkdir、[、test等。其中“[”命令就是test命令,我们在利用Busybox制作根文件系统时,在生成的bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。
2./sbin 目录
该目录下存放系统命令,即只有系统管理员(俗称最高权限的root)能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统和修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。
/sbin目录下常用的命令有:shutdown、reboot、fdisk、fsck、init等,本地用户自己安装的系统命令放在/usr/local/sbin目录下。
3、/dev目录
该目录下存放的是设备与设备接口的文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过dev/ttySAC0文件可以操作串口0,通过/dev/mtdblock1可以访问MTD设备的第2个分区。比较重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*等。
4./etc目录
该目录下存放着系统主要的配置文件,例如人员的账号密码文件、各种服务的其实文件等。一般来说,此目录的各文件属性是可以让一般用户查阅的,但是只有root有权限修改。对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。
5./lib目录
该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。
6./home目录
系统默认的用户文件夹,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。
7./root目录
系统管理员(root)的主文件夹,即是根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。
8./usr目录
/usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享,这些主要也符合FHS标准的。/usr中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在嵌入式中可以精减。
9./var目录
与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。
10./proc目录
这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核
临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。
11./mnt目录
用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、移动存储设备等。
12. /tmp目录
用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。
那我们利用Busybox制作根文件系统就是创建这上面的这些目录,和这些目录下面的各种文件。
对于嵌入式Linux系统的根文件系统来说,一般可能没有上面所列出的那么复杂,比如嵌入式系统通常都不是针对多用户的,所以/home这个目录在一般嵌入式Linux中可能就很少用到,而/boot这个目录则取决于你所使用的BootLoader是否能够重新获得内核映象从你的根文件系统在内核启动之前。一般说来,只有/bin,/dev,/etc,/lib,/proc,/var,/usr这些需要的,而其他都是可选的。
根文件系统一直以来都是所有类Unix操作系统的一个重要组成部分,也可以认为是嵌入式Linux系统区别于其他一些传统嵌入式操作系统的重要特征,它给 Linux带来了许多强大和灵活的功能,同时也带来了一些复杂性。我们需要清楚的了解根文件系统的基本结构,以及细心的选择所需要的系统库、内核模块和应用程序等,并配置好各种初始化脚本文件,以及选择合适的文件系统类型并把它放到实际的存储设备的合适位置,下面是几中比较常用的文件系统。

❽ 为什么嵌入式系统需要嵌入式文件系统,有什么具体作用,不用不行吗

您这个问题问的很外行,您如果说的在具体一点,我很愿意帮忙。

嵌入式系统启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。

不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs等。

不知道能不能解答你的问题

❾ 操作系统一定需要有根文件系统吗

不是一个系统,inux的文件系统就是一棵大树根目录就是一个斜杠,这就是跟根目录,文件系统都是建立在根目录之上的。

❿ Linux 根文件系统 为什么 重要

因为它相当于Linux的文件系统的根目录,所有的文件都放在它的下面啊。把它给删了相当于把硬盘给格了。

热点内容
为什么微信听语音手机会关机 发布:2025-05-18 02:37:55 浏览:571
苹果电脑开机为什么没有画面 发布:2025-05-18 02:29:13 浏览:619
小米为什么卡托不会弹出 发布:2025-05-18 02:28:01 浏览:134
逼他删我微信为什么不删 发布:2025-05-18 02:24:33 浏览:300
微信这个图标为什么没显示在座位 发布:2025-05-18 02:22:14 浏览:226
为什么女人选粉底颜色白 发布:2025-05-18 02:13:36 浏览:88
为什么以前的男人喜欢花旦 发布:2025-05-18 02:13:33 浏览:170
膀胱炎为什么晚上特别疼 发布:2025-05-18 02:05:40 浏览:942
为什么陈年小米那么便宜 发布:2025-05-18 02:01:05 浏览:458
水龙在五行为什么颜色 发布:2025-05-18 01:56:54 浏览:601