您的位置:首页 > 运维架构 > Linux

Linux系统之initramfs工作流程

2014-08-29 15:19 465 查看
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,从而切换到了硬盘中的文件系统。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: