initramfs是什么_hdfs工作原理

initramfs是什么_hdfs工作原理initramfs概述initramfs与initrd类似,也是初始化好了且存在于ram中的,可以压缩也可以不压缩。但是目前initramfs只支持cpio包格式,它会被populate_rootfs->unpack_to_rootfs(&__initramfs_start,&__initramfs_end-&__initramfs_start,0)函数(解压缩、)解析、安装。


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

initramfs概述
initramfs与initrd类似,也是初始化好了且存在于ram中的,可以压缩也可以不压缩。但是目前initramfs只支持cpio包格式,它会被populate_rootfs->unpack_to_rootfs(&__initramfs_start, &__initramfs_end – &__initramfs_start, 0)函数(解压缩、)解析、安装。

initramfs与initrd区别
(1) Linux内核只认cpio格式的initramfs文件包(因为unpack_to_rootfs只能解析cpio格式文件),非cpio格式的 initramfs文件包将被系统抛弃,而initrd可以是cpio包也可以是传统的镜像(image)文件,实际使用中initrd都是传统镜像文件。

(2) initramfs在编译内核的同时被编译并与内核连接成一个文件,它被链接到地址__initramfs_start处,与内核同时被 bootloader加载到ram中,而initrd是另外单独编译生成的,是一个独立的文件,它由bootloader单独加载到ram中内核空间外的地址,比如加载的地址为addr(是物理地址而非虚拟地址),大小为8MB,那么只要在命令行加入”initrd=addr,8M”命令,系统就可以找到 initrd(当然通过适当修改Linux的目录结构,makefile文件和相关代码,以上两种情况都是可以相通的)。

(3) initramfs被解析处理后原始的cpio包(压缩或非压缩)所占的空间(&__initramfs_start – &__initramfs_end)是作为系统的一部分直接保留在系统中,不会被释放掉,而对于initrd镜像文件,如果没有在命令行中设置”keepinitd”命令,那么initrd镜像文件被处理后其原始文件所占的空间(initrd_end – initrd_start)将被释放掉。

(4) initramfs可以独立ram disk单独存在,而要支持initrd必须要先支持ram disk,即要配置CONFIG_BLK_DEV_INITRD选项 — 支持initrd,必须先要配置CONFIG_BLK_DEV_RAM — 支持ram disk ,因为initrd image实际就是初始化好了的ramdisk镜像文件,最后都要解析、写入到ram disk设备/dev/ram或/dev/ram0中。
注: 使用initramfs,命令行参数将不需要”initrd=”和”root=”命令? YES

initramfs利弊:
——————————————————
由于initramfs使用cpio包格式,所以很容易将一个单一的文件、目录、node编译链接到系统中去,这样很简单的系统中使用起来很方便,不需要另外挂接文件系统。
但是因为cpio包实际是文件、目录、节点的描述语言包,为了描述一个文件、目录、节点,要增加很多额外的描述文字开销,特别是对于目录和节点,本身很小额外添加的描述文字却很多,这样使得cpio包比相应的image文件大很多。

使用initramfs的内核配置(使用initramfs做根文件系统):
——————————————————
General setup  —>
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
(/rootfs_dir) Initramfs source file(s)   //输入根文件系统的所在目录

使用initramfs的内核启动参数
不需要”initrd=”和”root=”参数,但是必须在initramfs中创建/init文件或者修改内核启动最后代码(init文件是软连接,指向什么? init -> bin/busybox,否则内核启动将会失败)

链接入内核的initramfs文件在linux-2.6.24/usr/initramfs_data.cpio.gz

使用initrd的内核配置(使用网口将根文件系统下载到RAM — tftp addr ramdisk.gz):
——————————————————
1. 配置initrd
General setup  —>
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
() Initramfs source file(s)   //清空根文件系统的目录配置

2. 配置ramdisk
Device Drivers  —>  
Block devices  —>
<*> RAM disk support
(16)  Default number of RAM disks   // 内核在/dev/目录下生成16个ram设备节点
(4096) Default RAM disk size (kbytes)
(1024) Default RAM disk block size (bytes)

使用 initrd的内 核启动参数:
initrd=addr,0x400000 root=/dev/ram rw
注:
(1) addr是根文件系统的下载地址;
(2) 0x400000是根文件系统的大小,该大小需要和内核配置的ramdisk size 4096 kbytes相一致;
(3) /dev/ram是ramdisk的设备节点,rw表示根文件系统可读、可写;

根文件系统存放在FLASH分区:
——————————————————
1. 内核启动参数不需要”initrd=”(也可以写成”noinitrd”);
root=/dev/mtdblock2 (/dev/mtdblock2 — 根文件系统所烧写的FLASH分区)

2. 内核配置不需要ram disk;也不需要配置initramfs或者initrd
[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support

注: boot的FLASH分区要和kernel的FLASH分区匹配(而非一致),需要进一步解释。

TCP reno registered 停在这里
———————————————
rootfs太大,检测发现rootfs下有垃圾(里面有包含了一份rootfs)

下面这个大小启动成功了
———————————————
root@zengxiaolong:/home/zengxiaolong/soft/s3c2410/rootfs# du -h
4.0K    ./dev
4.0K    ./tmp
8.0K    ./etc/init.d
40K    ./etc
4.0K    ./usr
4.0K    ./var
4.0K    ./sbin
2.1M    ./bin
4.0K    ./sys
116K    ./lib/modules
2.8M    ./lib
4.0K    ./proc
4.9M    .

initrd and initramfs
http://blog.sina.com.cn/s/blog_622013d90100fr04.html
———————————————
#
# General setup
#
…
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=”<path_to>/target_fs>”
…
#
# UBI – Unsorted block images
#
…
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024

Installation initramfs

No special installation like with initrd is necessary. The initramfs is already in the kernel. If you start the kernel, the initramfs is already there. Therefore, there is no root=/dev/ram0 rw initrd=0x87000000,8M bootargs option necessary. Remove this if you still have it!

http://blog.chinaunix.net/uid-488742-id-2113871.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169675.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • js取数组截取

    js取数组截取splice()会删除选定的数组,slice()只会进行选定,pop选定最后一个元素删除并返回最后一个元素的值,length函数判断数组的长度,使用slice选取单个值的时候记得返回的是一个数组类型。constarr=[1,2,7,2,6,0,3,1,5,7,8,9,45,12,34,0,56,12,2]//slice()方法constsliceArr…

    2022年5月2日
  • pandas at loc_pandas str

    pandas at loc_pandas strpandas中.loc和.iloc以及.at和.iat的区别显示索引和隐式索引显示索引和隐式索引importpandasaspddf=pd.DataFrame({‘姓名’:[‘张三’,‘李四’,‘王五’],‘成绩’:[85,59,76]})#传入冒号‘:’,表示所有行或者列#显示索引:loc,第一个参数为index切片,第二个为columnsdf.loc[2] #index为…

    2022年8月30日
  • 机器学习笔记 – 自动编码器autoencoder

    机器学习笔记 – 自动编码器autoencoder自编码器是开发无监督学习模型的主要方式之一。但什么是自动编码器?简而言之,自动编码器通过接收数据、压缩和编码数据,然后从编码表示中重构数据来进行操作。对模型进行训练,直到损失最小化并且尽可能接近地再现数据。通过这个过程,自动编码器可以学习数据的重要特征。自动编码器是由多个层组成的神经网络。自动编码器的定义方面是输入层包含与输出层一样多的信息。输入层和输出层具有完全相同数量的单元的原因是自动编码器旨在复制输入数据。然后分析数据并以无监督方式重建数据后输出数据副本。

    2022年5月9日
  • MySql数据库约束

    关系型数据库系统和文件系统的一个不同点是,关系数据库本身能保证存储数据的完整性,不需要应用程序的控制,而文件系统一般需要在程序端进行控制。当前几乎所有的关系型数据库都提供了约束(constraits)

    2021年12月28日
  • Java链表——遍历、查找、求链表长度

    Java链表——遍历、查找、求链表长度1.遍历非常简单的一段代码,只需要在节点不为空时,一个接一个地输出即可。publicvoidErgodic(){ ListNodeindexNode=head; while(indexNode.getNext()!=null){ System.out.print(indexNode.getVal()+””); indexNode=indexNode.getNext(); } }2.查找我们来做一个对值的查找…

    2022年5月13日
  • 网站检测空链、死链工具(Xenu)

    网站检测空链、死链工具(Xenu)网站常用检测空链、死链工具网站的链接一般都成千上万,如果存在大量的空链接将大大的影响用户体验,怎样有效检测无效链接。下面是比较常用的几种简单工具。一、Xenu(Xenu’sLinkSleuth)1、文件→检测网址,打开如下图,输入根网址,点击确定即可。如果想检测本地html文件可点击本地文件然后导入。2、点击确定,开始自…

    2022年7月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号