Linux系統之initramfs工作流程

來源:互聯網
上載者:User

標籤:style   http   os   使用   io   ar   檔案   art   html   

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/
                        [[email protected] 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檔案系統建檔案的速度比較:
                        [[email protected] 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
            [[email protected] 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。
                  #[[email protected] proc]# cat /proc/partitions  
           major minor  #blocks  name
               8        0  488386584 sda
               8        1   82051956 sda1
            2.2.9, /sys/block,塊裝置
                  #[[email protected] 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“.
                  [[email protected] proc]# ps -ef|grep ssh
                   hua      11186  3068  0 16:01 pts/0    00:00:00 ssh [email protected]  
                   hua      11195 11187  0 16:01 ?        00:00:00 sshd: [email protected]/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,從而切換到了硬碟中的檔案系統。

Linux系統之initramfs工作流程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.