# ramfs, rootfs and initramfs
Date: 2019-04-28


查找initramfs资料的时候看到了这篇文章 [ramfs-rootfs-initramfs.txt，](https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt)

### ramfs， ramdisk， tmpfs， rootfs 文件系统：

  1.   ramfs内存文件系统，没有硬件存储，仅存放在内存；

  2.   ramdisk 生成一种块设备， 并且是固定大小， 文件系统需被挂在到系统；

  3.   tmpfs有大小限制，可以写回到swap space，是ramfs升级版本；

  4.    rootfs 是特殊ramfs， tmpfs， 2.6版本后支持， 不可卸载就像不能kill init进程一样。 可以通过修改CONFIG\_TMPFS 使用tmpfs， 如需设置为ramfs， 强制"rootfstype=ramfs"

### initramfs与initrd的区别：

 1. initrd 单个文件， initramfs 则可以链接到内核镜像

 2. initrd文件格式 a gzipped filesystem image ， 是需要驱动的， initramfs则是 a gzipped cpio archive 内核支持：

 3. initrd使用的启动进程为initrd， 提供后调用内核；initramfs没有使用overmount 后调用内核init完成加载；

 4. 切换到 其他的root设备， initrd使用 pivot\_root之后卸载ramdisk， initramfs， 删除现有rootfs空间数据

```
find -xdev / -exec rm '{}' ';'
```

overmount rootfs

```
cd /newmount; mount --move . /; chroot .
```

### 构建initramfs工具包：

1\. The "klibc" package

2\. uClibc (http://www.uclibc.org)

3\. busybox (http://www.busybox.net)

因为glibc 编译出来的包太大了

### 使用cpio而不是tar的原因：

CPIO得到更好内核支持。

### 后记

本篇作者：  Rob Landley <rob@landley.net>  [网站](https://landley.net/)

关于 initramfs 还有[三篇文章](https://landley.net/writing/)。 包括介绍，使用，编程实践部分。

