① initrd和initramfs的区别
Initrd 的英文全称是 initial ram disk,从字面意思来看,initi指linux的初始阶段,ram disk指RAM 盘。ram disk是一个基于ram的块设备,同其他存储设备一样,它不仅占据了一块固定的内存(只是它占用的RAM内存,而普通从此设备是ROM内存),而且其上也需要文件系统。initrd文件中包含了各种可执行程序和驱动程序。它在桌面linux系统中和嵌入式linux系统中稍有不同。在桌面linux中,可以用来挂载真正的根文件系统,然后再将这个 initrd RAM磁盘卸载,并释放内存。在嵌入式Linux系统中,initrd 就是最终的根文件系统。initrd 是linux kernel 2.4 及更早的用法,那时除了内核vmlinuz之外还有一个独立的initrd.img映像文件,initrd.img映像文件本质是一个文件系统映像,linux kernel在初始化后会mount initrd.img作为一个[临时的根文件系统],而init进程就是在initrd.img里的,然后init进程会挂载[真正的根文件系统],然后umount initrd.img。 initrd 的工作主要为加载内核模块,然后交回控制权给内核,最后再切到用户态去运行用户态的启动流程。kernel 2.6 以来都是 initramfs 了,不要被文件名迷惑,只是很多还沿袭传统使用 initrd 的名字。initramfs:init ram filesystem,它是一个cpio格式的内存文件系统。现在的 initramfs 是一个 gzip 压缩的 cpio 文件系统打包。最初的想法是Linus提出的: 把cache当作文件系统装载。他在一个叫ramfs的cache实现上加了一层很薄的封装,其他内核开发人员编写了一个改进版tmpfs,这个文件系统上的数据可以写出到交换分区,而且可以设定一个tmpfs装载点的最大尺寸以免耗尽内存。initramfs就是tmpfs的一个应用。优点:(1)tmpfs随着其中数据的增减自动增减容量.(2)在tmpfs和page cache/dentry cache之间没有重复数据.(3)tmpfs重复利用了Linux caching的代码, 因此几乎没有增加内核尺寸, 而caching的代码已经经过良好测试, 所以tmpfs的代码质量也有保证.(4)不需要额外的文件系统驱动.另外, initrd机制被设计为旧的"root="机制的前端,而非其替代物,它假设真正的根设备是一个块设备, 而且也假设了自己不是真正的根设备,这样不便将NFS等作为根文件系统。最后/linuxrc不是以PID=1执行的, 因为1这个进程ID是给/sbin/init保留的。 initrd机制找到真正的根设备后将其设备号写入/proc/sys/kernel/real-root-dev, 然后控制转移到内核由其装载根文件系统并启动/sbin/init。initramfs则去掉了上述假设, 而且/init以PID=1执行, 由init装载根文件系统并用exec转到真正的/sbin/init, 这样也导致一个更为干净漂亮的设计。现在一般提到的initrd都是指 initramfs 。
② 什么是根文件系统
文件系统: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)
③ 为什么下歌的时候好多都显示驱动器的根目录已使用FAT文件系统格式化,只能储存一定数目的项目…….这是
因为U盘,MP3这类的设备,容量比较小,转换为NTFS的意义不大。FAT格式一个文件夹下只能存储有限的文件个数。可以这样解决:假设有一个文件夹MP3,实际目录为 H:mp3,在里面可以存200个文件左右。然后可以在MP3文件夹里再建一个MP3文件夹,因为不是同一目录,可以同名。目录就变成H:mp3mp3.在这个新建的MP3里你又可以存相同数量的文件。
这个情况一般是根目录存在大量小文件或者拷贝一个超过4g的文件造成的,fat32的磁盘每个目录理论允许六万多个8.3样式命名的文件,也就是主文件名不超过8个字符或4个汉字,扩展名不超过3个字符这样的文件。如果是长文件名的话,一个目录下顶多能有2万个左右的文件,超过就会报这个错,当然1个单个文件超过4g也会报这个错,这就需要采用ntfs格式重新格式化驱动器,采用这个格式后,一个目录大概能放十几万个小文件。
补充:
fat指分区表,一般有fat,fat32,ntfs。
以前,win98,2000,大都是用fat,xp多数用fat32,也有用fat的。 也有的提前换代,使用ntfs。
如果车载播放器比较先进,用ntfs当然好,这样既节约空间,而且稳定性好。但是,很多车载播放器不支持。
如果车载播放器有点老,可以考虑使用fat32.
格式化方式,要先将里面的所有的东西,都拷贝出来,然后右键,就有格式化选项,格式化的时候,有分区表的选项。 —格式化会丢失里面的所有文件。所以要先拷贝出来。
④ 怎样改变分区的文件系统格式
采用一楼的方法是可以的,不过文件肯定是没了。Convert将 FAT 和 FAT32 卷转换为 NTFS。语法convert [volume] /fs:ntfs [/v] [/cvtarea:FileName] [/nosecurity] [/x] 参数volume 指定驱动器号(其后要紧跟冒号)、装入点或要转换为 NIFS 的卷名。 /fs:ntfs 必需将卷转换为 NTFS。 /v 指定详细模式,即在转换期间将显示所有的消息。 /cvtarea:FileName 仅适用于高级用户。指定将主控文件表 (MFT) 以及其他 NTFS 元数据文件写入相邻的现存占位符文件中。该文件必须位于要转换的文件系统的根目录下。如果使用 /CVTAREA 参数,可以使转换后的文件系统具有较少的碎片。为了得到最佳结果,该文件的大小最好为 1 KB 与文件系统中文件和目录数量的乘积,但是,该转换工具也接受任意大小的文件。 有关使用 /cvtarea 参数的详细信息,请参阅 Microsoft Windows XP 资源工具包网站中的“文件系统”。(http://www.microsoft.com/) 要点在运行 convert 之前,首先必须使用 fsutil file createnew 命令创建占位符文件。Convert 并不创建此文件。Convert 使用 NTFS 元数据覆盖此文件。完成转换后,会释放此文件中所有未被使用的空间。有关 fsutil file 命令的详细信息,请参阅“相关主题”。/nosecurity 对于转换后的文件和目录的安全性设置,将其指定为每个人都可访问。 /x 如果需要,使用该参数可在转换之前将该卷卸载。对该卷任何打开的句柄不再有效。 注释必须指定重新启动计算机时应该转换的驱动器。否则,将无法转换当前驱动器。 如果 convert 无法锁定驱动器(系统卷、当前驱动器等),它会主动在下次重新启动计算机时转换该驱动器。 在从早期版本的 NIFS 转换得到的卷上,MFT 位置是不同的。因此,卷的性能可能不如从 Windows NT 转换得到的卷优异。 与最初就使用 NIFS 进行格式化的卷相比,从 FAT 转换为 NTFS 的卷会缺少部分性能。在转换后的卷上,MFT 可能会变得破碎。另外,转换后的启动卷上的 NTFS 权限不再适用。 范例要将驱动器 E 上的卷转换为 NTFS 并且显示所有消息,请键入:convert e:/fs:ntfs /v
⑤ Linux根文件系统基本包括哪些内容
通常情况下,Linux内核启动后期,会寻找并挂载根文件系统。根文件系统可以存在于磁盘上,也可以是存在于内存中的映像,其中包含了Linux系统正常运行所必须的库和程序等等,按照一定的目录结构存放。Linux根文件系统基本包括如下内容:
基本的目录结构:/bin、/sbin、/dev、/etc、/lib、/var、/proc、/sys、/tmp等;整个根文件系统都是挂在根目录(/)下,FHS对顶层目录的要求和说明如下表所列。
基本程序运行所需的库文件,如glibc等;
基本的系统配置文件,如inittab、rc等;
必要的设备文件,如/dev/ttyS0、/dev/console等;
基本应用程序,如sh、ls、cd、mv等。
你可以去【周立功】那边了解一下的,蛮多信息的。
⑥ 嵌入式 linux 根文件系统可按几种类型来分类
Linux 系统核心支持十多种文件系统类型:,ReiserFS,ext,ext2,ext3,iso9660,xfs,minx,msdos,umsdos,Vfat,NTFS,Hpfs,Nfs,smb,sysv,proc 等. 下面是主要分类:一, ext ext 是第一个专门为 Linux 的文件系统类型,叫做扩展文件系统.二, ext2 ext2 是为解决 ext 文件系统的缺陷而设计的可扩展的高性能的文件系统.又被称为 二级扩展文件系统三, ext3 ext3 是由开放资源社区开发的日志文件系统,. ext3 被设计成是 ext2 的升级版本。四, jsf jsf 提供了基于日志的字节级文件系统,该文件系统是为面向事务的高性能系统而开发的。五,ReiserFS ReiserFS 基于平 衡树结构的 、ReiserFS 文件系统在网上公布.ReiserFS 3.6.x(作为 Linux 2.4 一部分 的版本),设计成员相信最好的文件系统是那些能够有助于创建独立的共享环境或者命名空间的文件系统。六,Xfs xfs 是一种非常优秀的日志文件系统,它是 SGI 公司设计的.xfs 被称为业界最先进 的,最具可升级性的文件系统技术.它是一个全 64 位,快速,稳固的日志文件系统,其他文件系统简介:Minix:Llnux 支持的第一个文件系统,对用户有很多限制而且性能低下Xia:Minix 文件系统修正后的版本.在一定程度上解决了文件名和文件系统大小的Msdos:msdos 是在 Dos,Windows 和某些 OS/2 操作系统上使用的一种文件系 统,其名称采用"8+3"的形式,即 8 个字符的文件名加上 3 个字符的扩展名. umsdos:Linux 下的扩展 msdos 文件系统驱动,支持长文件名,所有者,允许 权限,连接和设备文件.允许一个普通的 msdo s 文件系统用于 Linux,而且无须为它建 立单独的分区. iso9660:名. 标准 CDROM 文件系统,通用的 Rock Ridge 增强系统,允许长文件 Vfat:vfat 是 Windows9x 和 Windows NT/2000 下使用的一种 Dos 文件系统, 其在 Dos 文件系统的基础上增加了对长文件名的支持. Nfs:Sun 公司推出的网络文件系统,允许多台计算机之间共享同一文件系统,易 于从所有这些计算机上存取文件. Hpfs: High Performance File System(HPFS) 高性能文件系统(HPFS) HPFS 是 Microsoft 的 LAN Manager 中的文件系统,同时也是 IBM 的 LAN Server 和 OS/2 的文件系统.HPFS 能访问较大的硬盘驱动器,提供更多的组织特性并改善了文件 系统的安全特性. Smb:smb 是一种支持 Windows for workgroups,Windows NT 和 Lan Man ager 的基于 SMB 协议的网络操作系统. Sysv:sysv 文件系统实际上是 System V/Coherent 在 Linux 平台上的文件系统. Ncpfs:ncpfs 是一种 Novell NetWare 使用的 NCP 协议的网络操作系统. Proc:proc 是 Linux 系统中作为一种伪文件系统出现的,它用来作为连接内核数据 结构的界面. NTFS:微软 Windows NT 内核的系列操作系统支持的,一个特别为网络和磁盘配 额,文件加密等管理安全特性设计的磁盘格式.
⑦ Linux内核中有文件系统模块, 那它和根文件系统什么关系哦
linux内核是来linux的真实的操作系统源,所有的操作系统的相关功能都是由用户接口程序传递到内核由内核来完成的。linux文件系统是指linux操作系统对整个系统中的所有的数据、文件的管理的一种实现方式。简单点说:像windows它的文件系统是NTFS文件系统或者FAT文件系统,通过这种方式将windows的各种文件保存在磁盘上,用于存储和访问了。而linux系统则使用ext这种文件系统来实现。
⑧ 怎样跟改ubuntu根文件系统
linux不支持NTFS,NTFS是Windows的文件系统格式,但linux支持vfat,即Windows下的FAT32或者FAT
未经允许不得转载:山九号 » 根文件系统格式|什么是根文件系统