- 浏览: 1438127 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
getelephantbyid:
make 无法通过.....
php-5.3,php-5.4的thttpd2.25b补丁,及编译方法 -
getelephantbyid:
patch -p1 ../php-5.4.7_thttpd-2 ...
php-5.3,php-5.4的thttpd2.25b补丁,及编译方法 -
zander:
zander 写道c 语言是静态类型语言还是动态类型语言阅读理 ...
什么是动态语言和静态语言? -
zander:
c 语言是静态类型语言还是动态类型语言
什么是动态语言和静态语言? -
lunajiayou:
很有道理,赞一个
跟着苍蝇会找到厕所,跟着蜜蜂会找到花朵
ramfs, rootfs, initrd and initramfs
-------------------------------------------------------------------------------
什么是ramfs?
ramfs是空间规模动态变化的RAM文件系统。它非常简单,用来实现Linux缓存机制(缓存page cache and dentry cache)的文件系统。
通常情况下,Linux的所有文件在内存中都有缓存。需要读取的数据页从支撑存储设备(block
device)中读取后,缓存于内存。在支撑存储设备中的数据页执行marked as
clean操作。当虚拟文件系统需要支撑存储设备中的数据页内存时,可以释放。基于同样的机制,支撑存储设备的写入操作(写入文件然后写回支撑存储设
备,marked as clean)后,也可以释放占用的数据页内存。对于文件目录占用的缓存(dentry: directory
entry),也存在同样的机制。
但是,ramfs中不需要支撑存储设备(没有支撑缓存,但是有缓存)。也就是说,写入ramfs的文件可以正常的分配page cache and
dentry cache,但是不能写入支撑存储设备。这些page cache and dentry cache不能被VM释放、回收。
由于ramfs可以基于现有的Linux的文件系统结构,用于实现ramfs的代码很小。一般而言,支撑存储设备的缓存被安装为一个文件系统。所以,ramfs不能通过menuconfig选择,是必然进入内核的。
在ramfs的下面可以一直写入数据,直到写满内存为止。由于VM(Vitual
Memory)认为文件应该被写回支撑存储设备,而不是交换空间(swap
space),所以VM不能释放ramfs分配的内存。从而,只有root用户(or trusted user)才能进行ramfs写操作。
-------------------------------------------------------------------------------
什么是ram disk?
"ram disk"是一种实现文件系统的支撑存储的、过时的机制(2.6不用了),就是在RAM上面开辟的综合块设备(synthetic block
device)。ram disk的大小是固定的,安装的文件系统大小(不是ramfs)也是固定的。ram
disk的使用需要从这个假的块设备到page
cache之间拷贝内存,生成和销毁dentry,而且需要文件系统的驱动格式化和解释上面的数据,所以ram disk的机制不再使用。
与ramfs相比,ram disk浪费了内存,也浪费了内存总线的带宽。同时,ram
disk还为CPU加重了不必要的负担,污染了CPU的cache(尽管有避免污染的方法,但是非常耗费资源)。ramfs机制非常自然,因为文件访问可
以通过page cache and dentry cache。ram
disk被弃用的另外一个原因是环回设备(loopback)引入。环回设备提供了一种更加灵活、方便的从文件而不是从内存块中创建综合块设备的方法。
-------------------------------------------------------------------------------
什么是tmpfs?
tmpfs是ramfs的衍生物,用来限制缓存大小、向swap空间写入数据。它是用来保存VM所有文件的文件系统。tmpfs中缓存的内容全部是临时
的。一旦卸载,所有的内容都会遗失。它把所有的缓存置于内核,它的规模随着文件的规模同步变化。但是它规模有大小限制,可以修改。它可以把当前不再需要的
页写入到swap空间。
-------------------------------------------------------------------------------
什么是rootfs?
rootfs是ramfs的特殊实例,在2.6的内核中必然存在。rootfs不能被卸载(与其添加特殊代码用来维护空的链表,不如把rootfs节点始
终加入,因此便于kernel维护:简单、精炼。rootfs是ramfs的一个空实例,占用空间极小)。大部分其他的文件系统安装于rootfs之上。
-------------------------------------------------------------------------------
什么是initramfs?
2.6的Linux内核包含有gzip压缩的cpio格式的文档,可以在内核引导的时候解压缩为rootfs。在解压缩后,kernel将检查
rootfs中是否包含init文件。如果init文件存在,内核就会执行这个文件,并且赋予PID=1的进程号。这个init程序将整个系统引导起来,
包括定位并且安装真正的root设备。如果在cpio文档解压缩后的rootfs中没有init程序(init文件),内核执行旧的代码,定位并且安装
root分区,执行/sbin/init程序。
-------------------------------------------------------------------------------
initramfs与initrd的区别
1. initrd是一个单独的文件;initramfs和Linux内核链接在一起(/usr目录下的程序负责生成initramfs文档)。
2. initrd是一个压缩的文件系统映像(可以是ext2等,需要内核的驱动);initramfs是类似tar的cpio压缩文档。内核中的cpio解压缩代码很小,而且init数据在boot后可以丢弃。
3. initrd运行的程序(initd,不是init)进行部分setup后返回内核;initramfs执行的init程序不返回内核(如果/init需要向内核传递控制权,可以再次安装在/目录下一个新的root设备并且启动一个新的init程序)。
4.
切换到另一个root设备时,initrd执行pivot_root后,卸载ramdisk;initramfs是rootfs,既不能
pivot_root,也不能卸载。initramfs会删掉rootfs的所有内容(find -xdev / -exec rm '{}'
';'),再次安装root到rootfs(cd /newmount; mount --move . /; chroot
.),把stdin/sdout/stderr挂在新的/dev/console上,重新执行init。由于这是一个相当困难的实现过程(包括在使用一个
命令之前把它删除),所以klibc工具包引入一个帮助程序/utils/run_init.c来执行上述过程。其他大部分工具包(包括busybox)
把这个命令称为"switch_root"。
-------------------------------------------------------------------------------
Populating initramfs
2.6的内核缺省情况下总是生成一个gzipped的cpio文档,并且和内核链接在一起。这个文档缺省是空的,在X86环境下的大小是134字节。
CONFIG_INITRAMFS_SOURCE配制参数指定initramfs文档的源,并且自动的嵌入到二进制文件中。这个参数可以指向一个gzipped的cpio文档,一个包含文件的目录,或者文件描述的文本文件。例如文本文件:
dir /dev 755 0 0
nod /dev/console 644 0 0 c 5 1
nod /dev/loop0 644 0 0 b 7 0
dir /bin 755 1000 1000
slink /bin/sh busybox 777 0 0
file /bin/busybox initramfs/busybox 755 0 0
dir /proc 755 0 0
dir /sys 755 0 0
dir /mnt 755 0 0
file /init initramfs/init.sh 755 0 0
在内核编译完成后,可以执行/usr/gen_init_cpio命令获得cpio文档。配置文件的一个优势是不需要root权限,也不需要在新的文档中
生成设备节点。在上述文档中的两个file命令用来发现initramfs目录下面的init.sh文件和busybox文件。内核不需要外部的cpio
工具实现initramfs的cpio文档。如果在配置时指定了一个目录而不是一个描述文件,内核编译时将从这个目录生成一个描述文件(作为/usr
/gen_init_cpio.c的输入)。内核编译时cpio生成代码和内核浑然一体,boot时解压缩程序也和内核浑然一体。
如果不使用配置文件或者配置目录,而使用定制的cpio文档时,需要外部的cpio工具。例如下面的命令可以从cpio映像文件抽取包含的文件、压缩cpio映像文件:
cpio -i -d -H newc -F initramfs_data.cpio --no-absolute-filenames
下面的shell脚本可以生成一个定制的cpio.gz文档,可以用来代替配置文件生成的cpio文档:
#!/bin/sh
if [ $# -ne 2 ]
then
echo "usage: mkinitramfs directory imagename.cpio.gz"
exit 1
fi
if [ -d "$1" ]
then
echo "creating $2 from $1"
(cd "$1"; find . | cpio -o -H newc | gzip) > "$2"
else
echo "First argument must be a directory"
exit 1
fi
发表评论
-
google pagespeed禁用改写html文件的cache头
2019-09-04 19:51 432这会禁用html文件的缓存,无法读取last-modifi ... -
macos 安装imagick解决php不能显示验证码的问题
2018-11-04 04:15 1152需要选安装pear,然后用pecl install imagi ... -
linux入侵检测
2018-07-07 22:58 635一、检查系统日志 l ... -
yii的安全策略
2018-07-06 04:02 397web根目录下.htaccess 写道 Options ... -
免费Web防火墙
2018-07-06 01:21 5581,modsecurity 基于apache 历史最悠久 ... -
两款免费好用的Web渗透工具
2018-07-06 01:12 9321,OWASP Zed Attack Proxy (ZAP ... -
apache2反向代理
2018-06-12 18:46 795开启以下两个模块 a2enmod proxy a2enm ... -
扩展Aws云主机磁盘大小
2018-03-05 21:17 1325进入ELASTIC BLOCK STORE-》卷 选中要修 ... -
ubuntu时区设置
2018-02-25 10:41 658查看当前时区 timedatectl 修改时区 dpk ... -
macos 10.13 dmg下载和安装盘制作
2018-02-05 19:58 9899https://bbs.feng.com/read-htm-t ... -
windows升级后 iis服务无效 IIS-W3SVC-WP 无法读取配置文件
2017-12-01 11:35 1550通过使用以管理员身份运行选项打开 Windows PowerS ... -
vmware中运行的macos连接iphone
2017-09-30 17:53 2232需要iphone插在usb2.0端口上,并且虚拟机usb兼容性 ... -
brotli压缩算法说明
2017-06-09 02:36 1221brotli是新一代的HTTP压缩算法,用于替代gzip,相 ... -
TCP Fast Open说明
2017-06-09 02:34 6993相关介绍 https://lwn.net/Article ... -
使用strongswan建立基于ikev2 eap-mschapv2的ipsec服务器
2017-04-17 23:14 3081sudo apt-get install strongsw ... -
使用strongswan/xl2tpd建立ipsec/l2tp服务器
2017-04-17 22:32 6033sudo apt-get install strongsw ... -
SecureFX中文件名乱码的解决
2014-08-28 03:23 3278原始贴子:https://forums.vandyke.c ... -
禁用htc one m7官方内核的写保护
2014-08-26 14:52 1244老外写的内核模块源码:https://github.com ... -
windows和office的kms激活方法(windows 企业版,office vl版可用)
2013-03-17 19:28 21windows 激活windows 8slmgr.vbs /i ... -
windows 8 64bit 离线官安装 .net framework 3.5
2013-01-23 11:32 1896因为国内网络问题不可能在线安装成功,所以就有了这么多麻烦。 ...
相关推荐
initramfs是linux 2.6内核新增加的特性,这个教程是网络中一位大牛人写的,让人一步一步的对initramfs有了深入的了解...要像了解更多的有关initramfs的请参考内核中的documentation目录下的ramfs-rootfs-initramfs.txt
ramfs 是一个内核文件系统,对于学习Linux下的文件系统是一个很好的资源,可以通过阅读源码了解文件系统,也可以参考编写自己的文件系统
initramfs创建根文件系统 测试 平台:linux-2.6.32 主机系统RHEL6.5
精通init ramfs构建step by step ,关于linux下,init ramfs 的创建
no-MMU version of ramfs driver
ramfs MMU-based file operations Resizable simple ram filesystem for Linux.
ramfs.c
tinyramfs:用POSIX shell编写的微小initramfs
一种基于RAMFS的自恢复文件系统设计 论文:主要介绍了基于RAMFS自恢复文件系统的实现方法
embedded file systems such as RAMFS, CRAMFS, JFFS2, NFS, and so on. The chapter also discusses various methods for optimizing storage space in an embedded system, both kernel and user-space ...
随机存取存储器Ramfs 启动一个 9P2000 文件服务器,将所有文件保存在内存中。 文件系统完全保存在内存中,不使用外部存储。 文件数据以 2 MiB 块分配。 文件系统的根由调用 ramfs 的用户拥有,并且创建时拥有所有者...
笔记,可以保存下来以后查阅,ramdisk,rootfs,ramfs的制作
操作系统课大作业 - 自制文件系统ramfs+实验报告+源代码+文档说明+运行截图 - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审...
操作系统进程基础知识讲解,知识点概览,帮助理解。
一种创建用于Linux内核的initramfs(文件存档)的方法。 使用kexec引导Linux或ESXi,Xen或tboot等多重引导内核的Go引导程序。 它们旨在与一起使用。 这样,用于或解析器将使向LinuxBoot的过渡更加容易。 用法 确保...
用Busybox创建nfs文件系统 1、解压busybox-1.19.4.tar.bz2 修改Makefilez中的ARCH和CROSS_... [root@Sure rootfs]# cp -Rfv /home/jacky/busybox-1.11.1/_install/ ./ OK,以上用busybox创建了一个基本的文件系统。
"sysfs is a ram-based filesystem initially based on ramfs. It provides a means to export kernel data structures, their attributes, and the linkages between them to userspace.” --- documentation/file...
内存文件系统:建立基于内存的文件系统。 首先在内存中建立虚拟磁盘; 在该磁盘上建立相应的文件系统; 为该文件系统设计相应的数据结构来管理目录、虚拟磁盘的空闲空间、已分配空间等。 提供文件的创建、删除、移位...