cpio文件系统启动|如何使用Initramfs文件系统

cpio文件系统启动|如何使用Initramfs文件系统的第1张示图

❶ initrd和initramfs的区别是什么

Initrd 的英文是 initial ram disk,initi指linux的初始阶段,ram disk指RAM 盘。initrd文件中包含各种可执行程序和驱动程序。在嵌入式Linux系统中,initrd 就是最终的根文件系统。initramfs:init ram filesystem,它是一个cpio格式的内存文件系统。现在的 initramfs 是一个 gzip 压缩的 cpio 文件系统打包。遇到特殊情况时,可建立一个临时目录,解压initramfs,再直接解压 cpio -idv,改之后再用 cpio 和 gzip 封上。其工作方式更为简单直接,启动时加载内核和 initramfs 到内存执行,内核初始化之后,切换到用户态执行 initramfs 的程序/脚本,加载需要的驱动模块、必要配置等,然后加载 rootfs 切换到真正的 rootfs 上去执行后续的 init 过程。现在所说的initrd都指的是 initramfs 。因为initrd 是2.4 及更早的用法,运行过程大概是内核启动,执行一些 initrd 的内容,加载模块啥的,然后交回控制权给内核,最后再切到用户态去运行用户态的启动流程。

❷ rootfs.cpio怎样设置uboot启动参数

这一问题来自项目中一个实际的需求: 我需要在Linux启动之后,确认我指定的芯片寄存器是否与我在uboot的配置一致。 举个例子: 寄存器地址:0x20000010负责对DDR2的时序配置,该寄存器是在uboot中设置,现在我想在Linux运行后,读出改寄存器的值…

❸ 系统linux 跪求【find .|cpio -o -H newc|gzip>~/myinitramfs.gz】 的详细解释。。一定采纳

|find .|cpio -o -H newc|gzip>~/myinitramfs.gz1. find . 查找显示当前目录下的所有文件、文件夹2. | 管道,将 | 左边命令的结果专(也就属是find . 得到的所有文件、文件夹路径名称)传给右边(也就cpio命令)3. cpio -o -H newc cpio是将文件系统打包或解包, -o 是打包 ,-H 指定格式 为newc newc The new (SVR4) portable format, which supports file systems having more than 65536 i-nodes. (4294967295 bytes)4 | 将cpio打好的包传给gzip压缩5 gzip 压缩命令的一种,gnuzip。类似zip,rar。6 >~/myinitramfs.gz 将压缩后的数据 存为 文件myinitramfs.gz

❹ rootfs.cpio是什么文件

rootfs是linux中的概念:rootfs是ramfs的特殊实例,在2.6的内核中必然存在。rootfs不能被卸载(与其添加特殊代码用来维护空的链表,不如把rootfs节点始终加入,因此便于kernel维护:简单、精炼。rootfs是ramfs的一个空实例,占用空间极小)。大部分其他的文件系统安装于rootfs之上。.cpio是将磁盘文件转储到磁带的文件格式。rootfs.cpio就是一个Linux内核空实例的磁带备份文件。

❺ 如何使用cpio文件

放狗搜出来的,很全的使用方法.cpio 可以从 cpio 或 tar 格式的归档包中存入和读取文件, 归档包是一种包含其他文件和有关信息的文件。 有关信息包括:文件名, 属主, 时标(timestamp), 和访问权限。 归档包可以是磁盘上的 其他文件, 也可以是磁带或管道。一个有用的命令。有老兄们发的帖子里没有找到。所以就发过来了。希望有用。希望大家能把一些有用而难找的命令发出来让大家共享。cpio命令详细用法cpio – 存取归档包中的文件 语法 Syntax cpio -o [ -aBLuvV ] [ -C bufsize ] [ -c | -H format ][ -K volumesize ] [ [ -O file [, file … ] ] [ -M message ] ] [ -Pifd,ofd ] cpio -i [ -6AbBcdfkmnqrsStTuvV ] [-C bufsize ] [ [ -I file [, file … ] ] [ -M message ] ] [ -Pifd,ofd ] [ pattern … ] cpio -p [ -adlLmruvV ] [ -Pifd,ofd ] directory 描述(DEscriptION) cpio 可以从 cpio 或 tar 格式的归档包中存入和读取文件, 归档包是一种包含其他文件和有关信息的文件。 有关信息包括:文件名, 属主, 时标(timestamp), 和访问权限。 归档包可以是磁盘上的 其他文件, 也可以是磁带或管道。 cpio 有三种操作模式: 在-out模式中, cpio 把文件复制到归档包中。它从标准输入获得文件名列表 (一行一个), 把归档包写到标准输出。生成文件名列表的典型方法是使用find 命令; 你可能要在 find 后面用上 -depth选项, 减少因为进入没有访问权限的目录而引起的麻烦。 在-in模式中, cpio 从归档包里读取文件, 或者列出归档包里的内容。它从标准输入读入归档包。任何不是选项的命令行参数被视为shell的通配符模式串 (globbing pattern); 在归档包中, 只有文件名匹配这些模式串的文件才能复制出来。 和 shell 中不一样, 文件名起始处的 '.' 可以匹配模式串起始处的通配符, 文件名中的 '/' 也可以匹配通配符。 如果没有给出模式串, 那么将读出所有文件。 在-pass模式中, cpio把文件从一棵目录树复制到另一棵, 它结合了 -in 和 -out 的操作, 但不使用归档包。 cpio从标准输入读取欲复制的文件名列表; 目标目录作为非选项的命令行参数给出。 cpio支持下列的归档格式: binary, old ASCII, new ASCII, crc, HPUX binary, HPUX old ASCII, old tar, 和 POSIX.1 tar。 "binary"格式是过时格式, 因为它保存文件信息的方法无法应用在不同体系的机器间移植。"old ASCII" 格式可以跨平台使用, 但是不能用于超过 65536 个 i 节点的文件系统中。 "new ASCII" 格式可以跨平台使用, 也适用于任意大小的文件系统, 但不是所有版本的 cpio 都支持; 目前只有 GNU 和 System VR4 的 cpio 支持。"crc" 格式 类似于 "new ASCII" 格式, 同时对每个文件计算校验和。cpio 在创建归档包时算出校验和, 解开文件时进行校验。 "HPUX" 格式用于兼容 HP UNIX 的 cpio, 它用了独特的方法来保存设备文件。 "tar" 格式用以兼容 tar 程序。它不能归档文件名超过 100 个字符的文件, 也不能归档特殊文件 (块设备或字符设备)。 "POSIX.1 tar" 格式不能归档文件名超过 255 个字符的文件(小于, 除非文件名的最右边有一个 "/")。 缺省情况下, cpio 为了兼容老式的 cpio 程序, 创建 "binary" 格式的归档包。当展开归档包时, cpio 能够自动识别归档包的格式, 而且可以读取在其他字节顺序的机器上创建的归档包。 cpio 的某些选项只能用在对应的操作模式上; 参见总览小节, 里面列出了什么选项可以用在什么模式上。 选项 (OPTIONS) -0, –null 在-out 和 -pass 模式中, 认为输入的文件名以 null字符结尾,而不是换行符, 这样即使文件名中包含换行符, 也不影响归档。 GNU find 是生成 null 结尾文件名列表的方法之一。 -a, –reset-access-time 读取完文件后重置文件的访问时间, 这样看上去就象没被访问过一样。 -A, –append 追加到已经存在的归档包中。仅用于 -out模式。该归档包必须是用 -O 或 -F (–file) 选项指定的磁盘文件。 -b, –swap 在 -in 模式中, 颠倒数据中字中的半字和半字中的字节顺序。 相当于 -sS 使用这个选项,可以在大端数和小端数机器之间转换 32 位整数。 -B 把 I/O 块大小设置成 5120 字节,最初的块大小是 512 字节。 –block-size=BLOCK-SIZE 设置 I/O 块 大小 为 BLOCK-SIZE * 512 字节。 -c 使用老式的跨平台 (ASCII) 归档格式。 -C IO-SIZE, –io-size=IO-SIZE 设置 I/O 块大小为 IO-SIZE 字节。 -d, –make-directories 在需要的地方创建开始目录。 -E FILE, –pattern-file=FILE 在 -in 模式中, 从 FILE 中读取用于匹配文件名的模式串, FILE 中的内容就象 cpio 的非选项参数一样看待。 -f, –nonmatching 只复制那些不匹配任何给定的模式串的文件。 -F, –file=archive 使用归档文件名, 而不是标准输入或输出。 如果把其他机器上的磁带机作成归档文件使用, 文件名要用 "HOSTNAME:" 开始。 主机名前面可以加上用户名和一个 '@', 作为访问远程磁带机的用户 (如果你有这样的权限, 一般在用户的 ~/.rhosts 文件中会有这么一项)。 –force-local 和 -F, -I, 或 -O, 一起用, 即使文件名中含有一个冒号,也把归档文件看作本地文件, 一般说来冒号指出一个远程主机名字。 -H FORMAT, –format=FORMAT 使用归档格式 FORMAT。 有效的格式在下面列出, 大小写均可. "-in" 模式的缺省动作是自动检测归档格式, "-out" 的缺省格式是 "bin"。 bin 老式的 binary 格式。 odc 老式的 (POSIX.1) 跨平台格式。 newc 新型 (SVR4) 跨平台格式, 支持大于 65536 i节点的文件系统。 crc 新型 (SVR4) 跨平台格式, 并且计算校验和。 tar 老式的 tar 格式。 ustar POSIX.1 tar 格式, 也能识别 GNU tar 归档文件, 它们相似但不全相同。 hpbin HP UNIX 上的 cpio 使用的老式的 binary 格式。(用独特的方法储存设备文件) hpodc HP UNIX 上的 cpio 使用的跨平台格式。 (用独特的方法储存设备文件) -i, –extract 进入 -in 模式。 -I archive 使用归档文件名, 而不是标准输入。 如果把其他机器上的磁带机作成归档文件, 文件名要用 "HOSTNAME:" 开始。主机名前面可以加上用户名和一个 '@', 作为 访问远程 磁带机的用户 (如果你有这样的权限, 一般在用户的 ~/.rhosts 文件中会有这么一项)。 -k 无效操作; 只是用来兼容其他版本的 cpio。 -l, –link 如果有可能, 连接文件, 而不是复制。 -L, –dereference 解除符号连接的关联 (复制符号连接指向的 文件, 而不是连接本身)。 -m, –preserve-modification-time 当创建文件时, 保留以前的文件修改时间。 -M MESSAGE, –message=MESSAGE当备份介质(例如 磁带或软盘) 到达卷尾时, 显示一条消息, 提醒用户插入下一卷。如果 MESSAGE 包含字符串 "%d", 它被替换成当前卷号 (从 1 开始)。 -n, –numeric-uid-gid 以详细方式 (verbose) 显示内容时, 用数字显示 UID 和 GID, 而不是翻译成名称。 –no-absolute-filenames 在-in模式中, 即使它们在归档包中有绝对路径名。也在当前目录中创建所有相关文件, –no-preserve-owner 在 -in 和 -pass 模式中, 不改变文件的属主关系 (译注: 疑为不保留); 使它们属于展开它们的用户。这是普通用户的缺省行为, 因此 System V 的用户不致于无意中把文件泄露(give away)。 -o, –create 进入 -out 模式。 -O archive 使用归档文件名, 而不是标准输出。 如果把其他机器上的磁带机作成归档文件, 文件名要用 "HOSTNAME:" 开始。主机名前面可以加上用户名和一个 '@', 作为访问远程磁带机的用户 (如果你有这样的权限, 一般在用户的 ~/.rhosts 文件中会有这么一项)。 –only-verify-crc 当在 -in 模式读入 CRC 格式的归档包时, 不展开里面的文件, 而只是测试文件的 CRC 码。 -p, –pass-through 进入 -pass 模式。 –quiet 不显示复制的块数。 -r, –rename 交互式文件改名。 -R [user][:.][group], –owner [user][:.][group] 在 -out 和 -pass 模式中, 把所有文件的属主设置为指定的用户和/或用户组。 无论用户还是用户组都必须存在。 如果省略用户组, 但是给出了分隔符 ":" 或 "。', 则使用给定用户登录时的用户组。 只有超级用户能够改变文件的属主。 –sparse 在 -out 和 -pass 模式中, 把大块数据 0 的文件写成稀疏文件 (sparse file)。 -s, –swap-bytes 在 -in 模式中, 交换文件中每一个半字(字节对) 中的字节。 -S, –swap-halfwords 在 -in 模式中, 交换文件中每一个字(4字节) 中的半字。 -t, –list 显示输入归档包的内容。 -u, –unconditional 替换所有文件, 不再提问是否用旧文件替换已经存在的新文件。 -v, –verbose 列出处理的文件, 加上 -t 选项可以列出一个 'ls -l' 风格的列表。在一个归档包内容的详细列表 (verbose) 中, 如果本地系统不存在归档文件的用户和用户组名称, 它们将被替换成其数字 UID和GID 对应于本地系统的用户和用户组名称。 -V –dot 每处理一个文件, 显示一个 "."。 –version 显示 cpio 程序的版本号, 然后退出。

❻ 如何查看 squashfs 还是ramdisk

一、什么是文件系统 (Filesystem);A directory structure contained within a disk drive or disk area. The total available disk space can be composed of one or more filesystems. A filesystem must be mounted before it can be accessed. To mount a filesystem, you must specify a directory to act as the mount point. Once mounted, any access to the mount point directory or its subdirectories will access the separate filesystem.文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。二、主要嵌入式采用的文件系统 ;* Linux 中,rootfs 是必不可少的。PC 上主要实现有 ramdisk 和直接挂载 HD(Harddisk,硬盘) 上的根文件系统;嵌入式中一般不从 HD 启动,而是从 Flash 启动,最简单的方法是将 rootfs load 到 RAM 的 RAMDisk,稍复杂的就是 直接从Flash 读取的 Cramfs,更复杂的是在 Flash 上分区,并构建 JFFS2 等文件系统。* RAMDisk 将制作好的 rootfs 压缩后写入 Flash,启动的时候由 Bootloader load 到RAM,解压缩,然后挂载到 /。这种方法操作简单,但是在 RAM 中的文件系统不是压缩的,因此需要占用许多嵌入式系统中稀有资源 RAM。ramdisk 就是用内存空间来模拟出硬盘分区,ramdisk通常使用磁盘文件系统的压缩存放在flash中,在系统初始化时,解压缩到SDRAM并挂载根文件系统, 在linux系统中,ramdisk有二种,一种就是可以格式化并加载,在linux内核2.0/2.2就已经支持,其不足之处是大小固定;另一种是 2.4的内核才支持,通过,ramfs来实现,他不能被格式化,但用起来方便,其大小随所需要的空间增加或减少,是目前linux常用的ramdisk技术.* initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入了 cpio-initrd,大大简化了 Linux 的启动过程,附合 Linux 的基本哲学:Keep it simple, stupid(KISS). 不过cpio-initrd 作为新的格式,还没有经过广泛测试,嵌入式 Linux 中主要采用的还是 image-initrd。* Cramfs 是 Linus 写的很简单的文件系统,有很好的压缩绿,也可以直接从 Flash 上运行,不须 load 到 RAM 中,因此节约了 RAM。但是 Cramfs 是只读的,对于需要运行时修改的目录(如: /etc, /var, /tmp)多有不便,因此,一般将这些目录做成ramfs 等可写的 fs。* SquashFS 是对 Cramfs 的增强。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有优势。不过,据开发者介绍,在性能上可能不如 Cramfs。这也是一种新方法,在嵌入式系统采用之前,需要经过更多的测试

❼ 如何使用Initramfs文件系统

在2.6kernel启动时,它把rootfs作为它的第一个文件系统挂载(注意:这里的rootfs是真名!!!不是root filesystem的缩写)。rootfs是一个特殊的tmpfs,这个不能被删除或者是unmounted。很多使用2.6内核的系统通常都是挂载rootfs后什么都不做,然后启动另一个文件系统作为root filesystem。但是,这个不能掩盖rootfs存在的事实,你可以“cat /proc/mounts” 来查看,第一个挂载的肯定是rootfs。rootfs被挂载后,kernel立马就解压了那个用gzip压缩的CPIO归档文件到rootfs。每个2.6的内核都会执行这一步,但是默认那个压缩档是空的,所以也就没有往rootfs内添加任何东西。接着kernel会尝试在rootfs去找寻/init,一旦找到init并执行,kernel也就完成了启动工作,然后便是刚刚执行的init程序接管了接下来的工作。如果kernel没法调用"/init"程序,可能就会回过头去,按照便准的做法去解析参数“root=”,试图找到另一个filesystem然后挂载它。这里的使用initramfs是指,提供一个/init程序给rootfs使用,我们可以通过两种途径实现:使用编译进内核的cpio.gz档案,或者是一个独立的cpio.gz档案。以前的initrd就是编译一个独立的档案,很多使用initramfs的方式也是给它提供一个独立的档案。

❽ initrd和initramfs的区别

Initrd 的英文全称是 initial ram disk,从字面意思来看,initi指的初始阶段,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 。

❾ 怎样解压redhat的initrd.img

image-initrd的处理流程1.boot loader把内核以及initrd文件加载到内存的特定位置。2.内核判断initrd的文件格式,如果不是cpio格式,将其作为image-initrd处理。3.内核将initrd的内容保存在rootfs下的/initrd.image文件中。4.内核将/initrd.image的内容读入/dev/ram0设备中,也就是读入了一个内存盘中。5.接着内核以可读写的方式把/dev/ram0设备挂载为原始的根文件系统。6..如果/dev/ram0被指定为真正的根文件系统,那么内核跳至最后一步正常启动。7.执行initrd上的/linuxrc文件,linuxrc通常是一个脚本文件,负责加载内核访问根文件系统必须的驱动, 以及加载根文件系统。8./linuxrc执行完毕,常规根文件系统被挂载9.如果常规根文件系统存在/initrd目录,那么/dev/ram0将从/移动到/initrd。否则如果/initrd目录不存在, /dev/ram0将被卸载。10.在常规根文件系统上进行正常启动过程 ,执行/sbin/init。通过上面的流程介绍可知,Linux2.6内核对image-initrd的处理流程同linux2.4内核相比并没有显著的变化, cpio-initrd的处理流程相比于image-initrd的处理流程却有很大的区别,流程非常简单,在后面的源代码分析中,读者更能体会到处理的简捷。

❿ linux内核模块如何开始和结束

GRLB 加载了内核之后,内核首先会再进行二次系统的自检,而不一定使用 BIOS 检测的硬件信息。这时内核终于开始替代 BIOS 接管Linux的启动过程了。内核完成再次系统自检之后,开始采用动态的方式加载每个硬件的模块,这个动态模块大家可以想象成硬件的驱动(默认 Linux 硬件的驱动是不需要手工安装的,如果是重要的功能,则会直接编译到内核当中;如果是非重要的功能,比如硬件驱动会编译为模块,则在需要时由内核调用。不过,如果没有被内核硬件,要想驱动,就需要手工安装个硬件的硬块了。具体的安装方法会在后续章节中介绍)。那么,Linux 的内核到底放在了哪里呢?当然是 /boot 的启动目录中了,我们来看看这个目录下的内容吧。

[[email protected] ~]#ls /boot/config-2.6.32-279.el6.i686#内核的配置文件,内核编译时选择的功能与模块efi#可扩展固件接口,为英特尔为全新PC固件的体系结构、接口和服务提出的建议标准grub#启动引导程GTUB的数据目录initramfe-2.6.32-279.el6.i686.img#虚拟文件系统(CentOS 6.x 中用initramfs替代了initrd,但功能是一样的)lost+found故boot分区的备份目录symvers-2_6.32-279.el6.i686.gz#模块符号信息System.map-2.6.32-279.el6.i686#内核功能和内存地址的对应列表vmlinuz-2.6.32-279.el6.i686#用于启动的Linux内核。这个文件是一个压缩的内核镜像

我们已经知道,Linux 会把不重要的功能编译成内核模块,在需要时再调用,从而保证了内核不会过大。在多数 Linux 中,都会把硬件的驱动程序编译为模块, 这些模块保存在 /lib/moles/ 目录中。常见的 USB、SATA 和 SCSI 等硬盘设备的驱动,还有一些特殊的文件系统(如 LVM、RAID 等)的驱动,都是以模块的方式来保存的。如果 Linux 安装在 IDE 硬盘之上,并且采用的是默认的 ext3/4 文件系统,那么内核启动后加载根分区和模块的加载都没有什么问题,系统会顺利启动。但是如果 Linux 安装在 SCSI 硬盘之上,或者采用的是 LVM 文件系统,那么内核(内核加载入内存是启动引导程序 GRUB 调用的,并不存在硬盘驱动不识别的问题)在加载根目录之前是需要加载 SCSI 硬盘或 LVM 文件系统的驱动的。SCSI 硬盘和 LVM 文件系统的驱动都放在硬盘的 /lib/moles/ 目录中,既然内核没有办法识别 SCSI 硬盘或 LVM 文件系统,那怎么可能读取 /lib/moles/ 目录中的驱动呢?Linux 给出的解决办法是使用 initramfs 这个虚拟文件系统来处理这个问题。

initramfe虚拟文件系统

CentOS 6.x 中使用 initramfs 虚拟文件系统取代了 CentOS 5.x 中的 initrd RAM Disk。它们的作用类似,可以通过启动引导程序加载到内存中,然后会解压缩并在内存中仿真成一个根目录,并且这个仿真的文件系统能够提供一个可执行程序,通过该程序来加载启动过程中所需的内核模块,比如 USB、SATA. SCSI 硬盘的驱动和 LVM、RAID 文件系统的驱动。也就是说,通过 initramfs 虚拟文件系统在内存中模拟出一个根目录,然后在这个模拟根目录中加载 SCSI 等硬件的驱动,就可以加载真正的根目录了,之后才能调用 Linux 的第一个进程 /sbin/init。Initramfs 虚拟文件系统主要有以下优点:

initramfs 随着其中数据的増减自动増减容量。

在 initramfs 和页面缓存之间没有重复数据。

initramfs 重复利用了 Linux caching 的代码,因此几乎没有増加内核尺寸,而 caching 的代码已经经过良好测试,所以 initramfs 的代码质量也有保证。

不需要额外的文件系统驱动。

其实大家只需要知道 initramfs 是为了在内核中建立一个模拟根目录,这个模拟根目录是为了可以调用 USB、SATA、SCSI、LVM、RAID 等硬盘接口或文件系统的驱动模块,加载了驱动模块后才可以加载真正的系统根目录。我们可以通过示意图 1 来表示这个过程。

[[email protected]~]#mkdir/tmp/initramfs#建立测试目录[[email protected]~]#cp/boot/initramfs-2.6.32-279.el6.i686.img/tmp/initramfs/#复制initramfs文件[[email protected]~]#cd/tmp/initramfs/[[email protected]]#fileinitramfs-2.6.32-279.el6.i686.imginitramfe-2.6.32-279.el6.i686.img:gzipcompresseddata,fromUnix,lastmodified:WedApr1021:49:342013,maxcompression#查看文件类型,发现这个文件是一个使用gzip命令打包的压缩包[[email protected]]#mvinitramfs-2.6.32-279.el6.i686.imginitramfs-2.6.32-279.el6.i686.img.gz#修改文件的扩展名为.gz[[email protected]]#gunzipinitramfs-2.6.32-279.el6.i686.img.gz#解压缩[[email protected]]#lsinitramfs-2.6.32-279.el6.i686.img[[email protected]]#fileinitramfs-2.6.32-279.el6.i686.imginitramfe-2.6.32-279.el6.i686.img:ASCIIcpioarchive(SVR4withnoCRC)#查看文件类型,使用cpio命令的压缩文件[[email protected]]#cpio-ivc<initramfs-2.6.32-279.el6.i686.img#解压缩[[email protected]]#ll总用量34512drwxr-xr-x.2rootroot40964月2412:10bindrwxr-xr-x.2rootroot40964月2412:10cmdlinedrwxr-xr-x.3rootroot40964月2412:10dev-rw-r–r–.1rootroot194月2412:10dracut-004-283.el6drwxr-xr-x.2rootroot40964月2412:10emergencydrwxr-xr-x.7rootroot40964月2412:10etc-rwxr-xr-x.1rootroot89624月2412:10initdrwxr-xr-x.2rootroot40964月2412:10initqueuedrwxr-xr-x.2rootroot40964月2412:10initqueue-finisheddrwxr-xr-x.2rootroot40964月2412:10initqueue-settleddrwxr-xr-x.2rootroot40964月2412:10initqueue-timeout-rw-r–r–.1rootroot352353284月2412:09initramfs-2.6.32-279.el6.i686.imgdrwxr-xr-x.9rootroot40964月2412:10lib…省略部分输出…

#这就是initramfs虚拟文件系统中的内容,和根目录是不是很像

关机或者某些进程停止,对应的内核模块就会结束。更多知识请网络《Linux就该这么学》

未经允许不得转载:山九号 » cpio文件系统启动|如何使用Initramfs文件系统

赞 (0)