自制Linux系统
1、环境准备:
在centos6上添加一块新硬盘,并分区格式化。
虚拟机不关机情况下添加新硬盘,需执行以下命令,让系统识别新硬盘。
[root@centos6 Desktop]# echo "- – -" > /sys/class/scsi_host/host2/scan
使用fdisk分区工具,创建两个必要的分区
使用mkfs格式化工具,格式化成ext4格式的文件系统。
2、开始对/dev/sdc硬盘分区并格式化:
1)使用fdisk分区工具,创建两个必要的分区:
/dev/sdc1 :对应/boot分区;
/dev/sdc2 :对应根(rootfs)分区;
2)使用mkfs格式化工具,格式化成ext4格式的文件系统。
[root@centos6 Desktop]# fdisk /dev/sdc
Device Boot Start End Blocks Id System
/dev/sdc1 1 65 522081 83 Linux
/dev/sdc2 66 2610 20442712+ 83 Linux
3)使用lsbik命令查看/dev/sdc磁盘分区
[root@centos6 Desktop]# lsblk /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 509.9M 0 part
└─sdc2 8:34 0 19.5G 0 part
[root@centos6 Desktop]#
4)格式化/dev/sdc1分区和/dev/sdc2分区:
[root@centos6 Desktop]# mkfs.ext4 /dev/sdc1
[root@centos6 Desktop]# mkfs.ext4 /dev/sdc2
3、创建/boot和/sysroot系统根目录挂载点:
[root@centos6 Desktop]# mkdir /mnt/boot
[root@centos6 Desktop]# mkdir /mnt/sysroot
[root@centos6 Desktop]#
4、挂载/dev/sdc1/分区和/dev/sdc2分区到指定的目录上:
[root@centos6 Desktop]# mount /dev/sdc1 /mnt/boot/
[root@centos6 Desktop]# mount /dev/sdc2 /mnt/sysroot/
5、复制内核(kernel)文件和initramfs文件到/mnt/boot目录(也可以从光盘拷贝):
[root@centos6 Desktop]# cp -rf /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot
[root@centos6 Desktop]# cp -rf /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot
[root@centos6 Desktop]#
6、安装/mnt/boot目录下的grub目录及grub目录下的文件:
注意:执行此操作时必须指定/boot目录的父目录作为根目录。
因为此项操作实际上是写数据到/dev/sdc1分区中的,相当于就是/boot目录。
[root@centos6 Desktop]# grub-install –root-directory=/mnt /dev/sdc
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
(hd2) /dev/sdc
[root@centos6 Desktop]#
7、建立/mnt/boot/grub/grub.conf配置文件:
1 default=0
2 timeout=5
3 title=centos6.8 small Linux
4 kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/sda2 selinux=0 init=/bin/bash
5 initrd /initramfs-2.6.32-642.el6.x86_64.img
8、创建/mnt/sysroot目录下small Linux 根目录下的目录:
[root@centos6 Desktop]# mkdir -pv /mnt/sysroot/
{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}
查看/mnt/sysroot目录下创建的目录:
[root@centos6 Desktop]# tree /mnt/sysroot/
/mnt/sysroot/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── sbin
├── sys
├── tmp
├── usr
└── var
18 directories, 0 files
[root@centos6 Desktop]#
9、创建/mnt/sysroot/etc/fstab文件:
[root@centos6 Desktop]# vim /mnt/sysroot/etc/fstab
1 /dev/sda1 /boot ext4 defaults 1 1
2 /dev/sda2 / ext4 defaults 1 2
:x (保存退出)
10、复制bash和相关库文件;复制相关命令及相关库文件:
由于复制相关命令和库文件比较繁琐,所以我们使用脚本进行复制;
查看脚本文件:
[root@centos6 Desktop]# vim /testdir/copycmd.sh
1 #!/bin/bash
2
3 ch_root="/mnt/sysroot"
4 [ ! -d $ch_root ] && mkdir $ch_root
5
6 bincopy() {
7 if which $1 &>/dev/null; then
8
9 local cmd_path=`which –skip-alias $1`
10 local bin_dir=`dirname $cmd_path`
11 [ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
12 [ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
13 return 0
14 else
15 echo "Command not found."
16 return 1
17 fi
18 }
19
20 libcopy() {
21 local lib_list=$(ldd `which –skip-alias $1` | grep -Eo '/[^[:space:]]+')
22 for loop in $lib_list;do
23 local lib_dir=`dirname $loop`
24 [ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}
25 [ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
26 done
27 }
28
29 read -p "Please input a command: " command
30
31 while [ "$command" != "quit" ];do
32 if bincopy $command ;then
33 libcopy $command
34 fi
35 read -p "Please input a command or quit: " command
36 done
拷贝命令及相关库文件:
[root@centos6 Desktop]# source /testdir/copycmd.sh
Please input a command: bash
Please input a command or quit: vim
Please input a command or quit: reboot
Please input a command or quit: poweroff
Please input a command or quit: cd
Please input a command or quit: ifconfig
Please input a command or quit: cat
Please input a command or quit: ls
Please input a command or quit: hostname
Please input a command or quit: init
Please input a command or quit: passwd
Please input a command or quit: tree
Please input a command or quit: lsblk
Please input a command or quit: blkid
Please input a command or quit: shutdown
Please input a command or quit: quit
[root@centos6 Desktop]#
至此精简版的smalllinux已经制作完成,可以将/dev/sdc磁盘移至其它虚拟机中进行测试。
原创文章,作者:zhengyibo,如若转载,请注明出处:http://www.178linux.com/48369