Linux系统之initramfs工作流程

本文发布时间: 2019-Mar-22
initrd的参考文档可见: 1) Linux initial RAM disk (initrd) overview, http://www.ibm.com/developerworks/linux/library/l-initrd/index.html 2) NTTdocomo-openstack / baremetal-initrd-builder, https://github.com/NTTdocomo-openstack/baremetal-initrd-builder 2.1, nash指令(一个文件小,内置了一些实用的指令) 2,2 挂载主要的文件系统, 并建立设备文件所需的文件系统 mount -t proc /proc /proc mount -t sysfs /sys /sys 2.2.1,procfs映射着内存中的一个虚拟目录,用于提供硬件、进程的实时信息,会随时变动。linux为保证稳定性,不允许访问/proc下的文件,root用户也不例外。 2.2.2, sysfs也映射着内存中的一个虚拟目录,用于硬件信息的分类, sys目录的每一个文件都只有一个字符为内容来做开关的。 2.2.3, tmpfs也映射着内存中的一个虚拟目录,内存中的文件系统。想要速度快时,可以选择在内存建立tmpfs类型的文件系统,因为它都将建在内存中。 例如在内存中建立了一个tmpfs分区并挂载到/mnt/tmpfs目录 :mount -t tmpfs -o size=50M tmpfs /mnt/tmpfs/ [root@zhanghua proc]# df -h Filesystem Size Used Avail Use% Mounted on tmpfs 50M 0 50M 0% /mnt/tmpfs 2.2.4, /dev/shm,它是tmpfs的一种变种,tmpfs所有的内容所放在内存中,而/dev/shm在内存与文件系统有个映射,硬盘和内存中都会有这内容。 速度快,能存大于内存的文件,但重启之后,内容会消失。 下面显示在/dev/shm中建立文件与在普通ext4文件系统建文件的速度比较: [root@zhanghua proc]# time dd if=/dev/zero of=/dev/shm/test.file bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.0395221 s, 2.7 GB/s real 0m0.075s user 0m0.001s sys 0m0.041s [root@zhanghua proc]# time dd if=/dev/zero of=/bak/test.file bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.0647526 s, 1.6 GB/s real 0m0.090s user 0m0.001s sys 0m0.066s 2.2.5,devfs, 所有的device都会在/dev目录建立一个对应的设备文件. 缺点是例如即使打印机没连在计算机上,/dev/printer文件也会存在,这样会造成在intrd阶段的设备过多,所以devfs正在被udev所取代 例如要用光驱时,需先在linux与光驱之间通过 mount /dev/cdrom /mnt/命令做关联 2.2.6, udev, udev可以放在/sys目录下,不需要将所有未使用的文件建立设备文件,不再需要major number和minor number,当硬件被加载时可执行用户设置的script。 例如,如果/dev/cdrom是被udev建立的,而非devfs,那么当光驱被拨除时,/dev/cdrom文件就会消失。 2.2.7,/proc/PID文件,第一个进程都会对应这要闰个文件 2.2.8,/proc/partitions用来表示检测到的硬盘信息, major字段表示SCSI controller的slot ID,minor字段表示分区ID。 #[root@zhanghua proc]# cat /proc/partitions major minor #blocks name 8 0 488386584 sda 8 1 82051956 sda1 2.2.9, /sys/block,块设备 #[root@zhanghua proc]# cat /sys/block/ loop0/ loop1/ sda/ sr0/ 2.2.10, /dev/pts ( pseudo terminal slave) 副虚拟终端,其目录的文件都是由ptmx(主虚拟终端)产生的,它们是父子关系。当用ssh联机到localhost本地端之后,就会在 /dev/pts目录下产生一个叫做"0"的文件,当别的console也利用ssh联到这台机器时,就会出现“1“. [root@zhanghua proc]# ps -ef|grep ssh hua 11186 3068 0 16:01 pts/0 00:00:00 ssh hua@localhost hua 11195 11187 0 16:01 ? 00:00:00 sshd: hua@pts/3 如上,当一个用户以ssh登录之后,该用户就分到一个ptmx所赋予的pts资源(pts/3),所以说ssh使用的是虚拟终端,不是真正的tty接口。telnet用的则是真正的tty接口。 2.2.11, /dev/mapper,如果使用LVM后,linux要和硬盘打交道时不再直接使用/proc/partitions下的硬盘设备,而是使用/dev/mapper下的设备再去中转。 # ls -l /dev/mapper/* brw-rw---- 1 root disk 253, 0 jan 27 16.16 /dev/mapper/vg0-lv0 # cat /proc/partitions major minor #blocks name 8 0 17528 sda 253 0 1111 dm-0 3,建立最初所需使用的设备文件 设备文件使用mknod指令建立,mknod指令用来建立字符(character)或块(block)文件。 例:mknod /dev/tty1c41, 建立一个名为tty1的设备文件,c表示是字符文件,major=4, minor=1 4,加载相关模块 5,切入image所指示的硬盘中实体操作系统. (rescue mode是直接通过kernel加载initrd进入单纯的内存开机的虚拟操作系统) 5.1, mkrootdev -t ext4 -o defaults.ro hda1, 即nash指令会将GRUB中所设备的root=xxx中的xxx路径先建立好 5.2, mount /sysroot, 将GRUB中的root路径mount到initrd中的/sysroot下。 5.3, switchroot这个nash指令将initrd中的/sysroot文件系统切换成/rootfs,从而切换到了硬盘中的文件系统。


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:10pm
栏目列表