啟動和內核管理2

五、自制linux系統

    分區并創建文件系統

        fdisk /dev/sdb

        分兩個必要的分區

        /dev/sdb1對應/boot /dev/sdb2對應根 /

        mkfs.ext4 /dev/sdb1

    掛載boot

        mkdir /mnt/boot

        mount /dev/sdb1 /mnt/boot

    安裝grub

        grub-install –root-directory=/mnt /dev/sdb

    恢復內核和initramfs文件

        cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/

        cp /boot/initramfs-2.6.32-642.el6.x86_64.img/mnt/boot

    建立grub.conf:

        vim /mnt/boot/grub.conf

            title wanglinux

            root (hd0,0)

            kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash

            initrd /initramfs-2.6.32-642.el6.x86_64.img

    chroot /mnt/sysroot

    創建一級目錄

        mkdir /mnt/sysroot

        mount /dev/sdb2 /mnt/sysroot

        mkdir –pv /mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}

    復制bash和相關庫文件

    復制相關命令及相關庫文件

        如: ls,cat, vim,reboot,hostname等

六、排錯

    救援環境

        在根文件系統無法使用時需要,如/bin/mount刪除

        對系統沒有特殊要求

        從光盤引導( boot.iso或者安裝光盤#1)

        從USB盤(由boot.iso制作)引導

    文件系統重組

        Anaconda將會詢問是否應該掛載文件系統

        /mnt/sysimage/*

        /mnt/stage2

        $PATH包括硬盤的目錄

    文件系統節點

        提供系統特定的設備文件

        mknod了解major/minor #’s

    系統配置文件丟失修復

        系統在引導期間,很重要的一個過程就是init進程讀取其配置文件/etc/inittab,啟動系統基本服務程序及默認運行級別的服務程序完成系統引導,如果/etc/inittab誤刪除或修改錯誤, Linux將無法正常啟動。此時,只有通過救援模式才可以解決此類問題。

            有備份文件的回復方法

            沒有備份文件的恢復辦法

    有備份文件的恢復辦法:

        進入救援模式,執行chroot命令后,如果有此文件的備份(強烈建議系統中的重要數據目錄,如/etc、 /boot等要進行備份),直接將備份文件拷貝回去,退出重啟即可。如果是配置文件修改錯誤,如比較典型的/boot/grub/grub.conf及/etc/passwd的文件修改錯誤,也可以直接修正恢復。假設有備份文件/etc/inittab.bak,則在救援模式下執行:

            sh-3.1# chroot /mnt/sysimage

            sh-3.1# cp /etc/inittab.bak /etc/inittab

    沒有備份文件的恢復辦法

        如果一些配置文件丟失或軟件誤刪除,且無備份,可以通過重新安裝軟件包來恢復,首先查找到/etc/inittab屬于哪一個RPM包

            # chroot /mnt/sysimage

            # rpm -qf /etc/inittab initscripts-9.03.49-1.el6.centos.x86_64

        退出chroot模式:

            # exit

        掛載存放RPM包的安裝光盤(在救援模式下,光盤通常掛載在/mnt/source目錄下):

            # mount /dev/sr0 /mnt/source

        CentOS6系統的RPM包存放在光盤Package目錄下,要修復的硬盤系統的根目錄在/mnt/sysimage下,需要使用–root選項指定其位置。覆蓋安裝/etc/inittab文件所在的RPM包:

            # rpm -ivh –replacepkgs | force /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm

        其中的rpm命令選項“ –replacepkgs”表示覆蓋安裝,執行完成后,即已經恢復了此文件

        如果想只提取RPM包中的/etc/inittab文件進行恢復,可以在進入救援模式后,執行命令:

            # rpm2cpio /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm| cpio -idv ./etc/inittab

            # cp etc/inittab /mnt/sysimage/etc

    注意此命令執行時不能將文件直接恢復至/etc目錄,只能提取到當前目錄下,且恢復的文件名稱所在路徑要寫完整的路徑。提取文件成功后,將其復制到根分區所在的/mnt/sysimage目錄下相應位置即可

七、內核編譯

    單內核體系設計、但充分借鑒了微內核設計體系的優點,為內核引入模塊化機制。

    內核組成部分:

        kernel: 內核核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE;

        kernel object: 內核對象,一般放置于/lib/modules/VERSION-RELEASE/

        [ ]: N

        [M]: M

        [*]: Y

        輔助文件:

            ramdisk

            initrd

            initramfs

    內核版本

        運行中的內核:

        uname命令:

            uname – print system information

        uname [OPTION]…

             -n: 顯示節點名稱;

            -r: 顯示VERSION-RELEASE;

            -a:顯示所有信息

    內核模塊命令

        lsmod命令:

            顯示由核心已經裝載的內核模塊

            顯示的內容來自于: /proc/modules文件

        modinfo命令:

            顯示模塊的詳細描述信息

            modinfo [ -k kernel ] [ modulename|filename… ]

                -n: 只顯示模塊文件路徑

                -p: 顯示模塊參數

                -a: author

                -d: description

                -l: license

            lsmod |grep xfs;modinfo xfs

    內核模塊管理

        modprobe命令:裝載或卸載內核模塊

        modprobe [ -C config-file ] [ modulename ] [ moduleparame-ters… ]

        配置文件: /etc/modprobe.conf,/etc/modprobe.d/*.conf

            modprobe [ -r ] modulename…

    

        depmod命令:內核模塊依賴關系文件及系統信息映射文件的生成工具

        裝載或卸載內核模塊:

            insmod命令:指定模塊文件,不自動解決依賴模塊

                insmod [ filename ] [ module options… ]

                insmod `modinfo –n exportfs`

                lnsmod `modinfo –n xfs`

            rmmod

                rmmod [ modulename ]

                rmmod xfs

                rmmod exportfs

    /proc目錄:

    內核把自己內部狀態信息及統計信息,以及可配置參數通過proc偽文件系統加以輸出

        參數:

            只讀:輸出信息

            可寫:可接受用戶指定“新值”來實現對內核某功能或特性的配置

    /proc/sys

        (1) sysctl命令用于查看或設定此目錄中諸多參數

            sysctl -w path.to.parameter=VALUE

            sysctl -w kernel.hostname=mail.magedu.com

        (2) echo命令通過重定向方式也可以修改大多數參數的值

            echo "VALUE" > /proc/sys/path/to/parameter

            echo “websrv” > /proc/sys/kernel/hostname

    sysctl命令

        默認配置文件: /etc/sysctl.conf

            (1) 設置某參數

                sysctl -w parameter=VALUE

            (2) 通過讀取配置文件設置參數

                sysctl -p [/path/to/conf_file]

        內核中的路由轉發:

            /proc/sys/net/ipv4/ip_forward

        常用的幾個參數:

            net.ipv4.ip_forward

            net.ipv4.icmp_echo_ignore_all

            vm.drop_caches

/sys目錄:

        sysfs:為用戶使用的偽文件系統,輸出內核識別出的各硬件設備的相關屬性信息,也有內核對硬件特性的設定信息;有些參數是可以修改的,用于調整硬件工作特性。

        udev通過此路徑下輸出的信息動態為各設備創建所需要設備文件,udev是運行用戶空間程序

        專用工具: udevadmin, hotplug

        udev為設備創建設備文件時,會讀取其事先定義好的規則文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目錄下

    ramdisk管理

        ramdisk文件的制作:

            (1) mkinitrd命令

                為當前正在使用的內核重新制作ramdisk文件

                mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

            (2) dracut命令

                為當前正在使用的內核重新制作ramdisk文件

                dracut /boot/initramfs-$(uname -r).img $(uname -r)

    編譯內核

        前提:

            (1) 準備好開發環境

            (2) 獲取目標主機上硬件設備的相關信息

            (3) 獲取目標主機系統功能的相關信息

                例如:需要啟用相應的文件系統

            (4) 獲取內核源代碼包

                www.kernel.org

        開發環境準備

            包組(CentOS 6):

                Server Platform Development

                Development Tools

        目標主機硬件設備相關信息:

            CPU:

                #cat /proc/cpuinfo

                #x86info -a

                #lscpu

        硬件設備

            PCI設備:

                lspci

                    -v

                    -vv

                lsusb

                    -v

                    -vv

                lsblk 塊設備

            了解全部硬件設備信息

                hal-device

    內核編譯安裝系統

        安裝開發包組

        下載源碼文件

        .config:準備文本配置文件

        make menuconfig:配置內核選項

        make [-j #]

        make modules_install:安裝模塊

        make install :安裝內核相關文件

            安裝bzImage為/boot/vmlinuz-VERSION-RELEASE

            生成initramfs文件

            編輯grub的配置文件

    編譯安裝內核實例

        tar xf linux-3.10.67.tar.xz -C /usr/src

        cd /usr/src

        ln -sv linux-3.10.67 linux

        cd /usr/src/linux

        cp /boot/config-$(uname -r) ./.config

        make help

        make menuconfig

        make -j 2

        make modules_install

        make install

        reboot

    編譯內核

        (1) 配置內核選項

            支持“更新”模式進行配置: make help

                (a) make config:基于命令行以遍歷的方式去配置內核中可配置的每個選項

                (b) make menuconfig:基于curses的文本窗口界面

                (c) make gconfig:基于GTK (GNOME)環境窗口界面

                (d) make xconfig:基于QT(KDE)環境的窗口界面

            支持“全新配置”模式進行配置

                (a) make defconfig:基于內核為目標平臺提供的“默認”配置進行配置

                (b) make allyesconfig: 所有選項均回答為“yes“

                (c) make allnoconfig: 所有選項均回答為"no“

        (2) 編譯

            全編譯:make [-j #]

            編譯內核的一部分功能:

                (a) 只編譯某子目錄中的相關代碼:

                    # cd /usr/src/linux

                    # make dir/

                (b) 只編譯一個特定的模塊:

                    # cd /usr/src/linux

                    # make dir/file.ko

                    例如:只為e1000編譯驅動:

                #make drivers/net/ethernet/intel/e1000/e1000.ko

    如何交叉編譯內核:

        編譯的目標平臺與當前平臺不相同;

            # make ARCH=arch_name

    要獲取特定目標平臺的使用幫助

        # make ARCH=arch_name help

        # make ARCH=arm help

    在已經執行過編譯操作的內核源碼樹做重新編譯:

    需要事先清理操作:

        # make clean:清理大多數編譯生成的文件,但會保留config文件等

        # make mrproper: 清理所有編譯生成的文件、 config及某些備份文件

        # make distclean: mrproper、 patches以及編輯器備份文件

原創文章,作者:DYW,如若轉載,請注明出處:http://www.www58058.com/47562

(0)
DYWDYW
上一篇 2016-09-18
下一篇 2016-09-18

相關推薦

  • N21_第二周練習

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 文件管理類命令:cp,mv.rm 復制命令:cp 格式:        cp [OPTION]… [-T] SOURCE DEST        cp [OPTION]… SOU…

    Linux干貨 2016-07-16
  • bash腳本進階

     shell腳本流程控制     1.if語句 單分支: if 判斷條件;  then ?  雙分支: if 判斷條件; then     條件為真的分支代碼 else     條…

    Linux干貨 2016-08-21
  • N25-第三周作業

    N25第三周作業 博客作業 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@ip-172-31-25-9 ~]# who|awk '{print $1}'|sort -u ec2-user [root@ip-172-31-25-9&n…

    Linux干貨 2017-02-06
  • Linux哲學思想

    一切皆文件     這是第一知首先會想到的,所以在linux中的所謂文件夾也是文件,如果你用vi /tmp,也會發現其實里面是有內容的,對于文件而言,它的data block存放的是文件的內容,對于文件夾,它的data block存放的是文件的inode及對應的文件名。從結構上看它們是一致的。當然其它的諸如設備,管道等…

    Linux干貨 2016-10-30
  • 初入linux_基礎(一)

    初入Linux知識點總結(一) 一、理論知識 1、時間點: 1946年 第一代計算機ENIAC誕生于美國賓州大學,特點:塊頭大、效率低 數學家馮諾?依曼提出計算機體系結構組成部分:計算器、運算器、存儲器、輸入設備、輸出設備 1969年 UNIX在美國貝爾實驗室誕生 1984年 GNU項目和軟件基金會成立 1991年 Linux在芬蘭赫爾辛基誕生 2、計算機的…

    Linux干貨 2017-02-18
  • Linux系統程序包的安裝–RPM

           我們知道在操作系統上使用的程序都是有程序員通過開發工具得來的,程序員直接編寫的純文本的文件,我們稱之為源代碼,由于計算機識別的是二進制程序,因此在完成源代碼編寫之后,就必須要經過編譯,使之成為操作系統可以“看得懂”的二進制程序,這里的編譯是通過編譯器來進行的操作,編譯器的功能就是將源代碼程序“轉換”為二進…

    2017-04-23

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-20 11:08

    可以參考別人筆記,但是我們一定要將別人的筆記轉換成自己的東西

欧美性久久久久