当前位置: 首页 > Linux

基于宿主机制作一个简单的可启动linux

时间:2023-04-07 01:22:27 Linux

系统启动过程:BIOS-->MBR(bootloader(grub))-->/sbin/init,裸机自带的BIOS,选择启动设备是硬盘、CD还是磁盘;grub选择在哪个分区启动系统windows系统,linux系统;那么如何在空盘上安装系统并让grub引导呢?接下来在本机(host)上安装一个新的磁盘sdb,然后配置新磁盘的系统,创建一个新的虚拟机,走一遍简单的把磁盘放入startup的过程【具体详细的启动过程有很多网络博客]解释]创建两个分区在宿主机的第二个磁盘上创建一个100M的引导分区,1G的根分区,并格式化为ext4。[Createpartition][root@www~]#fdisk/dev/sdbDevicecontainsneitheranvalidDOSpartitiontable,norSun,SGIorOSFdisklabelBuildinganewDOSdisklabelwithdiskidentifier0xcd89c970.Changeswillremainedinmemoryonly,untilyoudecide写入它们。之后,当然,以前的内容将无法恢复。警告:分区表4的无效标志0x0000将由w(rite)更正警告:不推荐使用DOS兼容模式。强烈建议关闭模式(命令“c”)并将显示单位更改为扇区(命令“u”)。命令(m寻求帮助):nCommandactioneextendedpprimarypartition(1-4)pPartitionnumber(1)-4):1第一个气缸(1-2610,默认1):使用默认值1Lastcylinders,+cylindersor+size{K,M,G}(1-2610,default2610):+100M【创建第一个】Command(m求助):nCommandactioneextendedpprimarypartition(1-4)pPartitionnumber(1-4):2Firstcylinder(15-2610,default15):Usingdefaultvalue15Lastcylinder,+cylindersor+size{K,M,G}(15-2610,默认2610):+1G【创建第二个】命令(求助m):w分区表被修改!调用ioctl()重新读取分区表。正在同步磁盘。【格式】[root@www~]#mke2fs-text4/dev/sdb1[root@www~]#mke2fs-text4/dev/sdb2Installgrubonsdb的0磁道0柱面1扇区[root@www~]#mkdir/mnt/{boot,sysroot}【创建boot目录,根目录】[root@www~]#mount/dev/sdb1/mnt/boot[root@www~]#mount/dev/sdb2/mnt/sysroot#[--root-directory的路径为boot所在路径/mnt][root@www~]#grub-install--root-directory=/mnt/dev/sdb【安装grub】ProbingdevicestoguessBIOSdrives。这可能需要很长时间。安装完成。没有错误报告。这是内容设备映射/mnt/boot/grub/device.map。检查这是否正确。如果任何行不正确,修复它并重新运行脚本`grub-install'。(fd0)/dev/fd0(hd0)/dev/sda(hd1)/dev/sdb[root@www~]#ls/mnt/boot【安装成功】grublost+found复制内核和initrd复制当前系统内核和initrd到sdb1【sdb引导分区】,initrd是标识根分区文件系统所在设备的驱动。根分区文件系统可以是各种设备,而不仅仅是磁盘。initrd是安装系统时自动放入的[root@www~]#cp/boot/vmlinuz-2.6.32-504.el6.i686/mnt/boot/mylinux【重命名为mylinux】[root@www~]#cp/boot/initramfs-2.6.32-504.el6.i686。img/mnt/boot/myinitramfs.img[root@www~]#ls/mnt/bootgrublost+foundmyinitramfs.imgMylinux为系统创建必要的目录[root@www~]#cd/mnt/sysroot/[root@wwwsysroot]#lslost+found[root@wwwsysroot]#mkdir-pvetc/rc.dbootdevprocsystmpvarusrlibbinsbinsrvroothomemediamnt[lib64]【判断库是否存在根据主机系统】mkdir:创建目录“etc”mkdir:创建目录“etc/rc.d”mkdir:创建目录“boot”mkdir:创建目录“dev”mkdir:创建目录“proc”mkdir:创建目录“sys”mkdir:创建目录“tmp”mkdir:创建目录“var”mkdir:创建目录“usr”"mkdir:创建目录"lib"mkdir:创建目录"bin"mkdir:创建目录"sbin"mkdir:创建目录"srv"mkdir:创建目录"root"mkdir:创建目录"home"mkdir:创建目录"media"mkdir:createddirectory"mnt"[root@wwwsysroot]#lsbindevhomemediaprocsbinsysusrbootetcliblost+foundmntrootsrvtmpvarcopynativebashandlibraryfilestosystem要运行,必须有一个bash程序[root@wwwsysroot]#whichbash/bin/bash[root@wwwsysroot]#cp/bin/bash/mnt/sysroot/bin/[root@wwwsysroot]#lsbinbash【复制库文件][root@wwwmedia]#ldd/bin/bashlinux-gate.so.1=>(0x00bea000)libtinfo.so.5=>/lib/libtinfo.so.5(0x04e77000)libdl.so.2=>/lib/libdl.so.2(0x008f1000)libc.so.6=>/lib/libc.so.6(0x0073c000)/lib/ld-linux.so.2(0x00716000)[root@wwwmedia]#ldd/bin/bash|grep-o"/[^[:space:]]\{1,\}"/lib/libtinfo.so.5/lib/libdl.so.2/lib/libc.so.6/lib/ld-linux。so.2【写个bash脚本复制】[root@www~]#catcplib.sh#!/bin/bashforlibin`ldd/bin/bash|grep-o"/[^[:space:]]\{1,\}"`;执行cp${lib}/mnt/sysroot/lib【如果你的主机是64位的,这里应该是lib64】done【执行脚本将bsah库复制到指定目录】[root@www~]#chmod+xcplib.sh[root@www~]#./cplib.sh[root@www~]#tree/mnt/sysroot/【tree不需要安装yum】/mnt/sysroot/├──bin│└──bash├──boot├──dev├──etc│└──rc.d├──home├──lib│├──ld-linux.so.2│├──libc.so.6│├──libdl.so。2│└──libtinfo.so.5├──lost+found├──media├──mnt├──proc├──root├──sbin├──srv├──sys├──tmp├───usr└──var18目录,5个文件【测试bash是否可以执行】[root@www~]#chroot/mnt/sysroot【切换根目录】bash-4.1#lsbash:ls:commandnotfoundbash-4.1#exitexitcopy上面的几个命令程序复制完bsah,现在再复制几个其他的。首先,修改了上面的拷贝库脚本,使其可以传递一个参数[copyprogram][root@www~]#cp/bin/ls/mnt/sysroot/bin/[root@www~]#cp/bin/cat/mnt/sysroot/bin/[root@www~]#cp/bin/vi/mnt/sysroot/bin/【写一个拷贝库的脚本】[root@www~]#catcplib.sh#!/bin/bashecho$1forlibin`ldd/bin/$1|grep-o"/[^[:space:]]\{1,\}"`;docp${lib}/mnt/sysroot/libdone【复制上面程序对应的库】[root@www~]#./cplib.shlsls[root@www~]#vimcplib.sh[root@www~]#./cplib.shlsls[root@www~]#./cplib.shcatcat[root@www~]#./cplib.shvivi【切换root】[root@www~]#chroot/mnt/sysroot/bash-4.1#ls【可以执行ls命令,现在可以执行ls、cat、vi命令】bindevhomelost+foundmntrootsrvtmpvarbootetclibmediaprocsbinsysusrwritea蛴螬。conf配置文件[root@www~]#cd/mnt/boot/grub[root@wwwgrub]#vigrub.conf[root@wwwgrub]#sync[root@wwwgrub]#catgrub.confdefault=0timeout=5titlesimplinuxroot(hd0,0)【指定第一个磁盘的第一个扇区(boot)为临时root】kernel/mylinuxroroot=/dev/sda2【新系统root】quietselinux=0init=/bin/bash【指定初始化文件为bash而不是/sbin/init(默认)】initrd/myinitramfs.img然后点击新建虚拟机,选择自定义配置-->使用现有磁盘启动