日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux系统启动流程(4)制作自定义linux之一

發(fā)布時間:2025/3/15 linux 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux系统启动流程(4)制作自定义linux之一 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Linux系統(tǒng)啟動流程(4)制作自定義linux之一

平時使用的服務器類型的linux系統(tǒng)一般都會裝載各種軟件與服務,而在某些情況下,并不能一直直接使用公司管理的系統(tǒng),一是可能會出現(xiàn)故障,二是在處理一些小問題下可能無需如此龐大的linux。于是根據(jù)前幾篇所講的linux中的Centos6版本的系統(tǒng)啟動流程,可以對其仿制一個微型的linux系統(tǒng),里面只添加以下需要的工具即可。

?

以CentOS6為模板為例:

1、準備環(huán)境:VM的操作

這里以VM虛擬機模擬,所有直接對安裝了CentOS的虛擬機添加一個新硬盤

需要添加一塊新磁盤

?

注:要制作的虛擬硬盤文件路徑要注意,這里新硬盤文件名為 lab2_1.vmdk

?

2、檢查硬盤

如果是在開機狀態(tài),添加的新硬盤,可以使用命令重新掃描

[root@mzf?~]#?echo?"-?-?-"?>>?/sys/class/scsi_host/host2/scan


#掃描完成后,使用lsblk命令查看是否有新硬盤

[root@mzf?~]#?lsblk NAME???MAJ:MIN?RM???SIZE?RO?TYPE?MOUNTPOINT sr0?????11:0????1???3.7G??0?rom?? sda??????8:0????0????20G??0?disk? ├─sda1???8:1????0???200M??0?part?/boot ├─sda2???8:2????0????10G??0?part?/ ├─sda3???8:3????0?????2G??0?part? ├─sda4???8:4????0?????1K??0?part? └─sda5???8:5????0???7.8G??0?part?/testdir sdb??????8:16???0????20G??0?disk


說明:這里顯示了sdb,為剛剛添加的第二塊硬盤,下面需要對此進行新建分區(qū)

#可以使用fdisk命令來創(chuàng)建兩個分區(qū)(boot分區(qū)、根分區(qū))

[root@mzf?~]#?fdisk??-l?/dev/sdb??|??grep?'^/dev/sdb[0-9]' /dev/sdb1???????????????1??????????17??????136521???83??Linux /dev/sdb2??????????????18??????????83??????530145???83??Linux


注意:兩個分區(qū)的大小分別為/dev/sdb1:128M,/dev/sdb2:512M即可。

#查看剛才創(chuàng)建的分區(qū)大小,使用lsblk命令

[root@mzf?~]#?lsblk?/dev/sdb NAME???MAJ:MIN?RM???SIZE?RO?TYPE?MOUNTPOINT sdb??????8:16???0????20G??0?disk? ├─sdb1???8:17???0?133.3M??0?part? └─sdb2???8:18???0?517.7M??0?part


解析:這里的大小顯示誤差不會印象,下面為此創(chuàng)建文件系統(tǒng)。

#使用mke2fs命令來創(chuàng)建ext4文件系統(tǒng)

for?dev?in?`fdisk?-l?/dev/sdb?|?grep?-o?'^/dev/sdb[0-9]\>'`;?do?mke2fs?-t?ext4?${dev}?&>?/dev/null;??done


#創(chuàng)建完成后可以通過blkid來查看當前塊設備及類型

[root@mzf?~]#?blkid?/dev/sdb[0-9] /dev/sdb1:?UUID="ba63b06d-ebc4-434f-9651-a357b274f30b"?TYPE="ext4"? /dev/sdb2:?UUID="f5f15759-e8de-4e4b-bde8-3910d3e91228"?TYPE="ext4"


解析:此時兩個分區(qū)以及建立了ext4文件系統(tǒng)。

?

?

3、具體制作步驟:

1、掛載文件系統(tǒng)

#對剛才創(chuàng)建的分區(qū)(/dev/sdb{1,2})進行掛載 [root@mzf?~]#?mkdir?/mnt/boot?&&?mount?/dev/sdb1?/mnt/boot [root@mzf?~]#?mkdir?/mnt/sysroot?&&?mount?/dev/sdb2?/mnt/sysroot

#查看其是否已經(jīng)掛載

[root@mzf?~]#?mount?|?grep?'^/dev/sdb[0-9]' /dev/sdb1?on?/mnt/boot?type?ext4?(rw) /dev/sdb2?on?/mnt/sysroot?type?ext4?(rw)

?

2、拷貝當前系統(tǒng)下的vmlinuz和initramfs.img文件

[root@mzf?~]#?cp?/boot/vmlinuz-2.6.32-642.el6.x86_64?/mnt/boot/vmlinuz [root@mzf?~]#?cp?/boot/initramfs-2.6.32-642.el6.x86_64.img?/mnt/boot/initramfs.img

?

3、使用grub-install命令安裝grub

[root@mzf?~]#?grub-install?--root-directory=/mnt?/dev/sdb

注意:因為當前boot為獨立分區(qū),那么其父級目錄為/mnt

?

4、在生成的/mnt/boot/grub目錄下添加grub.conf文件

[root@mzf?~]#?cat?/mnt/boot/grub/grub.conf? default=0 timeout=3 title?Mini?Linux root?(hd0,0) kernel?/vmlinuz?or?root=/dev/sda2?selinux=0?init=/bin/bash initrd?/initramfs.img

解析:這里需要設置內(nèi)核參數(shù)selinux=0,然后將對應的kernel和initrd執(zhí)行剛才拷貝的新問問文件路徑及文件名。

#再次確定/mnt/boot下的文件

[root@mzf?~]#?ls?-R?/mnt/boot/ /mnt/boot/: grub??initramfs.img??lost+found??vmlinuz/mnt/boot/grub: device.map?????fat_stage1_5??grub.conf?????jfs_stage1_5????reiserfs_stage1_5??stage2?????????vstafs_stage1_5 e2fs_stage1_5??ffs_stage1_5??iso9660_stage1_5??minix_stage1_5??stage1???????????ufs2_stage1_5??xfs_stage1_5/mnt/boot/lost+found:

說明:這里boot下和boot/grub的文件已經(jīng)配齊,下面就開始/目錄的操作了

?

5、在/mnt/sysroot掛載點下創(chuàng)建/目錄結(jié)構(gòu)

[root@mzf?sysroot]#?ls bin??boot??etc??home??lib??lib64??lost+found??media??mnt??proc??root??sbin??sys??tmp??usr??var

?

6、/mnt/sysroot/etc目錄下提供fstab文件系統(tǒng)掛載配置

[root@mzf?sysroot]#?cat?/mnt/sysroot/etc/fstab? /dev/sda1???/boot????ext4??defaults??1?1 /dev/sda2???/????????ext4??defaults??1?2

?

7、拷貝一些必要的命令文件

注:當然每個命令都有氣對應依賴的庫文件,所有要將其對應庫文件一起拷貝,可以編寫bash腳步來實現(xiàn):下面為編寫的腳本:

[root@mzf?sysroot]#?cat?/testdir/copycmd.sh? #!/bin/bash # readonly?destPath="/mnt/sysroot";libcp()?{libDir=`echo?$1?|?grep?-o?'^.*/\<'`[?!?-d?${destPath}${libDir}?]?&&?mkdir?-p?${destPath}${libDir};cp?$1?${destPath}${libDir}?&>?/dev/null;[?$??-eq?0?]?&&?echo?"copy?lib?$1?finished."?||?echo?"copy?lib?$1?error."; }??cmdcp()?{cmdDir=`echo?$1?|?grep?-o?'^.*/\<'`[?!?-d?${destPath}${cmdDir}?]?&&?mkdir?-p?${destPath}${cmdDir};cp?$1?${destPath}${cmdDir}?&>?/dev/null;[?$??-eq?0?]?&&?echo?"copy?cmd?$1?finished."?||?echo?"copy?cmd?$1?error."; }outprint()?{if?[?$#?-eq?3?];?thenecho?"copy?$1?$2?$3";?elif?[?$#?-eq?2?];?thenif?[?$2?==?"not"?];?thenecho?"$1?not?is?command!";elif?[?$2?==?"shell"?];?thenecho?"$1?is?shell?builtin!";fielseecho?"input?$1?is?null!";fi }messbox()?{case?$1?incy)??outprint?"cmd"?"$2"?"ok";?;;cn)??outprint?"cmd"?"$2"?"error"?;;e)???outprint?"cmd"?"$2"?"exits";?;;n)???outprint??"$2"?"not";?;;s)???outprint??"$2"??"shell";?;;ly)??outprint?"lib"?"$2"?"ok";?;;ln)??outprint?"lib"?"$2"?"error";?;;null)??outprint?"cmd";?;;*)??echo?"wei?zhi?error.";?;;esac }copyFile()?{pathDir=${1%/*};fileName=${1##*/};[?!?-d?${destPath}${parentDir}?]?&&?mkdir?-p?${destPath}${parentDir};cp?$1?${destPath}${parentDir}?&>?/dev/null;[?$??-eq?0?]?&&?messbox?"cy"?"${fileName}"?||?messbox?"cn"?"${fileName}"; }inprint()?{read?-p?"please?input?add?cmd:"?cmdName;echo?"${cmdName}"; }main()?{cmdName=`inprint`;while?[[?-z?${cmdName}?]]?||?[?${cmdName}?!=?'quit'?];?do[[?-z?${cmdName}?]]?&&?messbox?"null"?&&?cmdName=`inprint`??&&??continue;if?!?`which?${cmdName}?&>?/dev/null`;?then!?`type?${cmdName}?&>?/dev/null`?&&?messbox??"n"?"${cmdName}"?||?messbox?"s"?"${cmdName}";cmdName=`inprint`;continue;filocal?cmdPath=`which?${cmdName}?|?grep?-v?'^alias'?|?grep?-o?'[^[:space:]]\+'`;cmdcp?${cmdPath};for?i?in?`ldd?${cmdPath}?|?grep?-o?'/.*lib\(64\)\{0,1\}[^[:space:]]\+\>'`;?dolibcp?${i};?donecmdName=`inprint`done } main;


?

?

8、執(zhí)行此文件,拷貝需要的/bin/bash、/bin/mount等命令

[root@mzf?sysroot]#?/testdir/copycmd.sh? please?input?add?cmd:bash??? copy?cmd?/bin/bash?finished. copy?lib?/lib64/libtinfo.so.5?finished. copy?lib?/lib64/libdl.so.2?finished. copy?lib?/lib64/libc.so.6?finished. copy?lib?/lib64/ld-linux-x86-64.so.2?finished. please?input?add?cmd:ifconfig copy?cmd?/sbin/ifconfig?finished. copy?lib?/lib64/libselinux.so.1?finished. copy?lib?/lib64/libc.so.6?finished. copy?lib?/lib64/libdl.so.2?finished. copy?lib?/lib64/ld-linux-x86-64.so.2?finished. please?input?add?cmd:ip copy?cmd?/sbin/ip?finished. copy?lib?/lib64/libresolv.so.2?finished. copy?lib?/lib64/libdl.so.2?finished. copy?lib?/lib64/libc.so.6?finished. copy?lib?/lib64/ld-linux-x86-64.so.2?finished. please?input?add?cmd:insmod copy?cmd?/sbin/insmod?finished. copy?lib?/lib64/libc.so.6?finished. copy?lib?/lib64/ld-linux-x86-64.so.2?finished. please?input?add?cmd:echo copy?cmd?/bin/echo?finished. copy?lib?/lib64/libc.so.6?finished. copy?lib?/lib64/ld-linux-x86-64.so.2?finished.

注意:這里只需要拷貝需要的命令即可

?

9、使用chroot切入/mnt/sysroot目錄,能進入說明bash命令生效

[root@mzf?sysroot]#?chroot?/mnt/sysroot/ bash-4.1#?ls bin??boot??etchome??lib??lib64??lost+found??media??mnt??procroot??sbin??sys??tmp??usr??var bash-4.1#?exit exit

?

10、這里重啟機器即可,但是bash命令內(nèi)部不能提供一些自定義的界面

11、因此添加網(wǎng)絡服務

(1)添加對應的網(wǎng)卡模塊驅(qū)動

#查看當前系統(tǒng)網(wǎng)卡使用的模塊驅(qū)動

[root@mzf?sysroot]#?dmesg?|?grep?eth0 e1000?0000:02:01.0:?eth0:?(PCI:66MHz:32-bit)?00:0c:29:a3:5d:d7 e1000?0000:02:01.0:?eth0:?Intel(R)?PRO/1000?Network?Connection udev:?renamed?network?interface?eth0?to?eth

解析:從上面可以指定,eth0網(wǎng)卡使用的e1000網(wǎng)卡驅(qū)動。

#查看e1000網(wǎng)卡驅(qū)動文件的全路徑

[root@mzf?sysroot]#?modinfo?-n?e1000 /lib/modules/2.6.32-642.el6.x86_64/kernel/drivers/net/e1000/e1000.ko

#使用depmod命令查看此e1000網(wǎng)卡模塊文件是否依賴其它驅(qū)動

[root@mzf?sysroot]#?depmod?`modinfo?-n?e1000`

提示:沒有顯示任何信息,說明沒有對其它任何模塊有依賴,因此只需要拷貝此文件即可

#拷貝e1000.ko網(wǎng)卡模塊文件

[root@mzf?sysroot]#?cp?`modinfo?-n?e1000`?/mnt/sysroot/lib64/modules/

(2)使用腳本拷貝insmod模塊加載命令

[root@mzf?sysroot]#?/testdir/copycmd.sh? please?input?add?cmd:insmod copy?cmd?/sbin/insmod?finished. copy?lib?/lib64/libc.so.6?finished. copy?lib?/lib64/ld-linux-x86-64.so.2?finished. please?input?add?cmd:quit

?

?

12、系統(tǒng)啟動時提供歡迎界面,以及網(wǎng)卡設備服務

#手動編寫/mnt/sysroot/sbin/init腳步文件

[root@mzf?~]#?cat?/mnt/sysroot/sbin/init? #!/bin/bash # echo??-e?"\t?Welcome?to?\e[31m?Meng?Linux?\e[0m" /sbin/insmod??/lib64/modules/e1000.ko? [?$??-eq?0?]?&&??echo??-e?"inet?e1000?load??\e[32m?[?ok?]\e[0m"??||??echo??-e?"inet?e1000?load??\e[32m?[?faileur?]\e[0m"?? /sbin/ifconfig?lo?127.0.0.1/8 [?$??-eq?0?]?&&?echo?"lo?ip?set?ok"?||??echo?"lo?ip?set?eroor" /sbin/ifconfig??eth0??10.1.250.250/16 [?$??-eq?0?]?&&?echo?"eth0?ip?set?ok"?||?echo?"eth0?ip?set?erro" mount?-n?-o?remount,rw??/dev/sda2 /bin/bash

注意:編寫完成后一定要使用chmod ?+x ?/mnt/sysroot/sbin/init給其添加執(zhí)行權(quán)限

?

13、修改grub.conf文件下的init啟動腳本路徑將init=/bin/bash改為init=/sbin/init,內(nèi)容如下:

[root@mzf?sysroot]#?cat?/mnt/boot/grub/grub.conf? default=0 timeout=3 title?Mini?Linux root?(hd0,0) kernel?/vmlinuz?ro?root=/dev/sda2?selinux=0?init=/sbin/init initrd?/initramfs.img

?

?

14、掛起當前虛擬機,然后新建一個虛擬機,選擇使用此磁盤

?

注意:一定是一個沒有任何硬盤的空虛擬機,不然會有問題,選擇使用已有的硬盤,其路徑一定要選擇對,不然自己都暈了。

?

15、啟動新建的虛擬機查看其效果

?

?

?

?

轉(zhuǎn)載于:https://blog.51cto.com/mengzhaofu/1854043

總結(jié)

以上是生活随笔為你收集整理的Linux系统启动流程(4)制作自定义linux之一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。