一、自定义的服务出错导致系统无法启动,排错;
Paste_Image.png模式1——off——可以用单用户模式解决故障问题
模式1——testsrv服务不挂载——可以绕过sleep=1000的错误
解决故障的步骤
1 重启;
2 倒计时界面,按a键;
3 在光标所在行最后,加上1/S/s/single(或关系),进入单用户模式;
4 vim /etc/rc.d/init.d/testsrv,删除sleep 1000即可;
5 exit之后,即可进入操作界面;
Paste_Image.png
Paste_Image.png
模式1——on——不能用单用户模式解决故障问题
内核启动——vmlinuz.. root=/dev/sda2——/sbin/init(系统默认的第一个进程)
排除故障的思路:更换系统默认的第一个进程
解决故障的步骤
1 重启;
2 倒计时界面,按a键;
3 在光标所在行最后,加上 init=/bin/bash ;
4 mount -o remount,rw / 更改只读权限为可读写权限;
5 chkconfig --level 1 testsrv off 关闭1模式;
chkconfig testsrv off 默认关闭2345模式;
或者
vim /etc/rc.d/init.d/testsrv 删除sleep 1000即可;
6 ls /etc/rc.d/rc5.d/testsrv* 检查文件是否以K开头(开机不启动);
7 exit之后,即可进入操作界面;
Paste_Image.png
二、grub(3个阶段)故障
破坏前446字节并恢复
grub_1阶段_故障——启动界面看不到菜单栏
硬盘无可引导功能——直接跳过硬盘——进入光盘
模拟故障
hexdump -C -n 512 /dev/sda
dd if=/dev/zero of=/dev/sda bs=1 count=446
解决故障
方法一
1 重启;
2 光盘引导,进入救援模式,开启shell进程;
3 切根:chroot /mnt/sysimage;
4 grub-install /dev/sda;
5 sync...;
6 exit两次;
方法二
hd0——硬盘:/dev/sda
hd0,0——硬盘的分区:/dev/sda1
1 grub 交互式操作
2 grub> root (hd#,#) 2阶段,指定分区
3 grub> setup (hd#) mbr的1阶段,指定硬盘(有依赖性)
grub> help 查看帮助
grub-install——无依赖性(建议使用)
Paste_Image.png
Paste_Image.png破坏512字节后的4000个字节并恢复
grub_1.5阶段_故障
模拟故障
hexdump -C -n 15240 /dev/sda
dd if=/dev/zero of=/dev/sda bs=1 count=4000 skip=512 seek=512
解决故障
1 重启;
2 光盘引导,进入救援模式,开启shell进程;
3 切根:chroot /mnt/sysimage;
4 grub-install /dev/sda;
5 sync...;
6 exit两次;
grub-install --root-directory=/ 或者不写 默认装载在根下的/boot/grub
grub-install --root-directory=testdir 装载在/testdir/boot/grub下
Error 15——2阶段问题
除了/boot/grub/下的grub.conf和splash.xpm.gz,此目录下的其他文件都删除;
grub.conf 文本文件,grub-install不会生成,只能手工编写;
splash.xpm.gz 图形界面的文件
reboot后,出现2种情况:
情况1
(1) grub-install未修复过/boot/grub/下的文件,/boot/grub下的文件只是备份文件,二阶段的二进制文件存放在扇区里;
(2) reboot 可以重新启动系统;
情况2
(1) grub-install修复过/boot/grub/下的文件,二阶段的二进制文件存放在/boot/grub/下;
(2) reboot 出现Error15错误
解决方法
1 重启;
2 进入救援模式,开启shell进程;
3 切根:chroot /mnt/sysimage;
4 grub-install /dev/sda;
5 sync...;
6 exit两次;
三、grub.conf文件故障
配置文件:/etc/grub.conf -> ../boot/grub/grub.conf
defaults=0 先启动第一个title对应的内核系统
kernel /vmlinuz...与 initrd /initramfs... 这两行不可以对调,原因是先启动内核再加载驱动
rhgb quite 维护的时候,可以删除,看系统启动过程更加详细
Paste_Image.png
防止单用户模式破解口令;
单用户模式破解口令根本原因:更改了系统的内核的文件
思路:系统的内核文件——设置口令
1 在hiddenmenu上面加一行设置口令的内容:password fgqcompany;
2 明文口令不安全——设置加密口令——下面2种情况都可以:
(1) r!grub-md5-crypt(vim格式命令输入):输入两遍口令即可,注意回车,生成md5口令;
password --md5 $1$W6ocO/$AAJKVNyrJ4PLrEIK5wTS51
(2) grub-crypt(命令行输入):输入两遍口令即可,生成sha512加密口令;
password --encrypted $6$deasqLKO.modQqxo$pzjfo9obXfGHsL8o/0O/1HBQAxRZg93D0vGAJZ8wP/UAeGb4Qj.hSbVpTHXHu.mhdTThaE6UtIFcsodTdJTBT
3 单用户模式进入,需要按p输入口令才更改启动系统的内核文件;
Paste_Image.png
Paste_Image.png
口令忘记,更改口令
例:到了新公司,登陆口令和grub口令都不知道
思路:硬盘、光盘和U盘都可以更改口令
电影大片:在windows或者服务器上,插上U盘破解口令,操控服务器
1 光盘引导,进入救援模式;(U盘、硬盘也行)
2 切根:chroot /mnt/sysimage
3 设置口令 (2种方法都可以)
passwd 输入两遍口令即可;
echo fgqcompany|passwd --stdin root
ls -l /etc/shadow 查看文件的更改时间,是否成功更改口令
拓展
4 vim /etc/grub.conf
5 在initrd下面加一行设置口令的内容:
password --encrypted $6$deasqLKO.modQqxo$pzjfo9obXfGHsL8o/0O/1HBQAxRZg93D0vGAJZ8wP/UAeGb4Qj.hSbVpTHXHu.mhdTThaE6UtIFcsodTdJTBT
6 给启动系统设置口令,口令放在哪个title后面,就对那个title起作用;
Paste_Image.png
Paste_Image.png
rd_NO_LUKS——支持对硬盘分区加密
更改Linux的图形界面
格式要求:xpm 640×480(分辨率)
1 自定义图片
ctrl+alt+a 截图
win+r:mspaint
粘贴——裁剪——重新调整大小:640×480(像素)、剪切——新建、粘贴、保存在桌面(命名win.png)
rz 上传图片文件至Linux
2 convert工具转换格式(如果无convert,需要安装)
rpm -qf `which convert`
convert -resize 640x480 -colors 14 win.png win.xpm
file win.xpm
more win.xpm
3 压缩
mv win.xpm /boot/grub
gzip win.xpm
4 vim /boot/grub/grub.conf
splash.xpm.gz更改为win.xpm.gz
5 reboot
Paste_Image.png
Paste_Image.png
Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.pnga: 内核参数
e: 编辑模式,用于编辑菜单
c: 命令模式,交互式接口
b: 重新启动
o: 增加空行 o模式配合e模式一起使用——增加内容
d: 删除某行
Esc: 返回
/boot/grub/目录下的文件全部丢失
故障——同二阶段:Error 15
模拟故障
mv /boot/grub/* /app/
rm -rf /boot/grub/*
解决方法
1 重启;
2 Esc,光盘引导,进入救援模式,开启shell进程;
3 切根:chroot /mnt/sysimage;
4 grub-install /dev/sda 生成grub相关文件,不会生成grub.conf文件;
5 sync...;
6 exit两次;
grub 2阶段修复成功,但是没有生成grub.conf文件,还无法完全启动;
Paste_Image.png
生成grub.conf文件
方法一:接着上面步骤4开始做
5 cd /boot/grub/ 可以看到grub文件夹生成
6 vim /boot/grub/grub.conf
default=0
timeout=3
hiddenmenu
title feng linux
kernel (hd0,0)/vmlinuz... root=/dev/sda2 (在根下,r!ls /boot/vmlinuz...)
kernel (hd0,0)/boot/vmlinuz... root=/dev/sda2 (不在根下)
initrd /initramfs... (r!ls /boot/initramfs...)
...
...
7 sync..
8 exit 两次
方法二:grub交互式操作
1 root (hd0,0) (可以省略)
2 kerne /vmlinuz...(TAB键补全) root=/dev/sda2
3 initrd /initramfs...(TAB键补全)
4 boot
5 由于是重新启动,所以还要再操作一遍grub.conf文件的生成步骤(1234)
6 进入操作界面:
cp /app/* /boot/grub/
cp /app/splash.xpm.gz /boot/grub/
Paste_Image.png
删除init并恢复
模拟故障
rpm -qf /sbin/init init文件来自upstart
mv /sbin/init /root
菜单可以看见,出现Error 19
解决方法
1 重启
2 倒计时界面,按a——按e,进入编辑模式——再按e,开始编辑:行最后加上 init=/bin/bash ——回车——b重启;
3 进入bash进程:
mount -o remount,rw /
mv /root/init /sbin/
exit
手动重启
4 没有启动成功,原因:selinux标签;
ll /sbin/init 观察到:移动过程——属性改变
解决方法:临时禁用SElinux标签;
5 重启,倒计时界面按a——再按a——光标所在行最后加上 selinux=0
getenforce 查看是否被禁用
restorecon /sbin/init 恢复标签(如果禁用,不能恢复标签)
Paste_Image.png
四、删除/boot并恢复
模拟故障:
rm -rf /boot
Error 15
思路:恢复文件——kernel文件、虚拟文件、grub相关文件、grub.conf文件
解决方法
1 Esc,进入救援模式;
2 切根 chroot /mnt/sysimage/
3 mount /dev/sr0 /mnt 内核文件在光盘里,所以要挂载光盘
cd /mnt; ls -d *; 光盘内核文件(无版本号)在isolinux文件夹里
4 cp /mnt/isolinux/vmlinuz /boot
5 不能用光盘的虚拟文件,虚拟磁盘文件——安装操作系统生成的——需要手工生成;
mkinitrd /boot/initramfs.img `uname -r`
6 grub-install /dev/sda
sync... ; cd /boot; ls; tree 检查是否安装成功(可省略此步骤)
7 vim /boot/grub/grub.conf
default=0
timeout=3
hiddenmenu
title fgq linux
kernel (hd0,0)/vmlinuz root=/dev/sda2 (r!ls /boot/vmlinuz)
initrd /initramfs.img (r!ls /boot/initramfs.img)
...
...
8 sync..
9 exit 两次
五、删除/etc/fstab和/boot并恢复
模拟故障:
mv /etc/fstab /root
;rm -rf /boot
Error 15
解决方案
1 Esc,救援模式,进入shell;
2 判断根在哪个磁盘
fdisk -l /dev/sda 观察空间大小
mkdir /mnt/tmp
mount /dev/sda1 /mnt/tmp 或者 mount /dev/sda2 /mnt/tmp (一个一个尝试,)
ls /mnt/tmp 观察到根文件,即是根所在的磁盘;(cd /mnt/tmp;ls)
umount /dev/sda1 未观察到根文件,即取消挂载,继续尝试;
3 vi /mnt/tmp/etc/fstab (vim无法使用)
/dev/sda2 / ext4 defaults 0 0
/dev/sda1 /boot ext4 defaults 0 0
exit---exit
4 重启后,按Esc,重新进入救援模式;
5 切根 chroot /mnt/sysimage/
6 mount /dev/sr0 /mnt
7 (1)cp /mnt/isolinux/vmlinuz /boot = cp images/pxeboot/vmlinuz /boot
(2)mkinitrd /boot/initramfs.img `uname -r`
(3)rpm -ivh /mnt/Packages/kernel-....rpm --force; ls
(1)+(2) = (3)
8 grub-install /dev/sda
9 vim /boot/grub/grub.conf
default=0
timeout=3
hiddenmenu
title fgq linux
kernel (hd0,0)/vmlinuz... root=/dev/sda2 (r!ls /boot/vmlinuz) (selinux=0 禁用selinux)
initrd /initramfs-....img (r!ls /boot/initramfs.img)
...
...
10 sync..
11 exit 两次
进入操作界面
12 swapon -s; free 查看swap是否挂载
13 cp /root/fstab /etc/fstab
14 mount -a 挂载文件系统
15 swapon -a 挂载swap
df 查看是否挂载
Paste_Image.png
六、网络安装linux(分区是逻辑卷)
逻辑卷:删除/etc/fstab和/boot并恢复
模拟故障:mv /etc/fstab /root;rm -rf /boot
1 Esc,救援模式,进入shell;
lvs; vgs; ls /dev/VolGroup/lv-home 有逻辑卷,但不能访问
lvdisply 可以观察到 not available;
逻辑卷、文件系统可以正常使用原因:/etc/rc.d/rc.sysinit
2 lvscan 扫描所有的逻辑卷,可以看到状态;
3 vgchange -ay 激活逻辑卷,即可使用逻辑卷
4 mkdir /mnt/rootfs; blkid
mount /dev/mapper/VolGroup/lv-root /mnt/rootfs
5 vim /mnt/rootfs/etc/fstab
r!blkid
6 exit
7 重启后(自动挂载根),按Esc,重新进入救援模式;
8 切根 chroot /mnt/sysimage/
9 mount /dev/sr0 /mnt
10 rpm -ivh /mnt/Packages/kernel-....rpm --force; ls /boot
11 grub-install /dev/sda(此步骤可以不写,grub文件都存在,只是缺少grub.conf文件,交互式操作创建grub.conf文件也可以)
12 非交互式操作,创建grub.conf文件:
vim /boot/grub/grub.conf
default=0
timeout=3
hiddenmenu
title fgq linux
kernel (hd0,0)/vmlinuz... root=/dev/VolGroup/lv-root (r!ls /boot/vmlinuz) (selinux=0 禁用selinux,这里可以不写,默认禁用)
initrd /initramfs-....img (r!ls /boot/initramfs.img)
13 sync..
14 exit 两次 reboot
Paste_Image.png
chmod -R 000 /boot/*
ll /boot/ /boot/grub/
变更/boot/下的文件权限,不会导致系统启动不起来;
倒计时界面,按a进入内核文件系统,行最后加上max_loop=100 rhgb quite 回车即可;
ls /dev/loop*
cat /proc/cmdline 内核参数
yum -y install kernel-doc
内核参数文档: /usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt
七、制作MINI_Linux,放在U盘,启动后自动就有IP,能通信;
1 准备新磁盘 /dev/sdb 20G (U盘也行)
echo "- - -" > /sys/class/scsi_host/host2/scan; lsblk 使新增磁盘生效
fdisk /dev/sdb; n——p——1——+100M; n——p——2——+10G; w 存盘;
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2
思路:grub文件,grub.conf文件,/etc/fstab文件,kernel文件,initramfs文件,bash shell文件;
2 挂载
mkdir /tmp/boot /tmp/rootfs
mount /dev/sdb1 /tmp/boot
mount /dev/sdb2 /tmp/rootfs
3
(1)cp /boot/vmlinuz* /boot/initramfs* /tmp/boot/
(2)grub-install --root-directory=/tmp /dev/sdb
(3)vim /tmp/boot/grub.conf
default=0
timeout=3
title mini_linux
kernel /vmlinuz.xxx root=UUID=/dev/sdb2...(r!blkid) selinux=0 init=/bin/bash(自带IP,init就不写了,或者需要自己手写,第5步:vim /sbin/bash)
initrd /initramfs.xxx.img
4 运行脚本,复制命令工具
bash copycmd.sh 脚本内容在下面,可以更改安装目录
(复制命令:bash/kill/ping/tree/cat/ls/cp/mv/vi/ip/rm/touch/ifconfig/reboot/quit/insmod)
insmod功能:加载驱动模块——网络功能
(insmod /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko 加载网络驱动模块)
(lsmod | grep e1000)
tree /tmp/rootfs/ 观察是否成功复制命令工具
(ethtool -i eth0 查看eth0网卡信息)
(locate e1000.ko 查看eth0网卡驱动文件)
mkdir /tmp/rootfs/{root,bin,sbin,lib,lib64,var,usr,etc,dev,sys,proc,tmp,home,mnt}
cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /tmp/rootfs/lib/ 复制驱动网卡文件至/lib/目录里
5 新主机上挂载上述所准备的新磁盘 (拔下U盘,插到新主机上)
(vim /sbin/init) 自动有IP,能通信
(/bin/bash)
insmod /lib/e1000.ko
ifconfig eth0 172.16.0.100/16(设置自己的IP)
更改为桥接模式;
ping 172.16.0.1 可以ping通
复制命令的脚本:copycmd.sh
#!/bin/bash
ch_root="/mnt/sysroot" (/mnt/sysroot更改为自己所要安装的根目录,如:/tmp/rootfs)
[ ! -d $ch_root ] && mkdir $ch_root
bincopy() {
if which $1 &>/dev/null; then
local cmd_path=`which --skip-alias $1`
local bin_dir=`dirname $cmd_path`
[ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
[ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
return 0
else
echo "Command not found."
return 1
fi
}
libcopy() {
local lib_list=$(ldd `which --skip-alias $1` | grep -Eo '/[^[:space:]]+')
for loop in $lib_list;do
local lib_dir=`dirname $loop`
[ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}
[ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
done
}
read -p "Please input a command: " command
while [ "$command" != "quit" ];do
if bincopy $command ;then
libcopy $command
fi
read -p "Please input a command or quit: " command
done
思考:网上找Linux源码,从头到尾,自己编译安装;
网友评论