實戰:以centos6、7為例,如果誤刪/boot/initramfs–3.10.0-693.el7.x86_64.img,機器重啟如何恢復?機器重啟后菜單能出來后續不顯示了?。。?/span>
答:重啟—ESC—CD-ROM-Drive-進入救援模式–chroot /mnt/sysimage(切換到真正的根)–cd /boot/–
mkinitrd /boot/initramfs-`uname -r`.img `uname -r`–sync–exit—exit—選擇reboot選項即可修復。
實戰:以centos6、7為例,如果誤刪/boot/vmlinuz-2.6.32-696.el6.x86_64,重啟后如何恢復?
centos6、7:重啟—ESC—CD-ROM-Drive-進入救援模式— chroot /mnt/sysimage(切換到真正的根)–mount -o remount,rw /dev/sr0 /misc—cd /misc/isolinux—
cp vmlinuz /boot/vmlinuz-`uname -r`–sync—sync—sync—exit—exit—選擇root選項即可!??!
實戰:如何實現自己自定義的服務?
第一步:創建一個服務腳本,放在/etc/init.d/目錄下
服務腳本是有一定的格式的,關鍵內容有幾行,分別是
chkconfig:?? 345 95 5? 第一個數字(即345)的意思是加到服務以后,默認是在什么模式下處于on狀態的(如果是-,代表所有模式下該服務都是off狀態)。第二個數字(95)代表開機時在/etc/rc.N/下會生成一個S95的文件,第三個數字(5)代表關閉該服務的時候,會在/etc/rc.N/下生成一個K5的文件。
第二步:(描述信息,centos5上必須有,centos6可有可無)
description: Runs commands scheduled by the “at” command at the time \
第三步:腳本內容
注意第二行和第三行有冒號:
這樣做完以后還沒有成為真正的服務,因為在chkconfig –list中并沒有testsrv這個服務,需要將該服務添加到服務列表當中(加之前必須確保服務腳本在/etc/init.d的目錄下,且有執行權限),即chekconfig –add testsrv
ls /etc/init.d/
在服務列表中刪除testsrv服務 chkconfig –del testsrv,雖然服務被刪掉,但是腳本還在/etc/init.d/目錄下,但是在對應的/etc/rcN.d/下對應的S和K文件卻沒有了。
實戰:假設testsrv服務腳本寫的有問題,同時設為開機啟動,開機時系統卡在那,如何恢復?
重啟—按a鍵—輸入空格1—chkconfig testsrv off(將該服務在2、3、4、5模式上設為off狀態)—reboot,重啟后再慢慢修改testsrv這個腳本。
ls /etc/rc{1,2,3,4,5}.d/? 里面有一個S99local文件
這個服務的作用是:開機時所有的服務都運行完了才運行S99local,而且開機就會運行,所以我們可以將服務腳本放在S99local里面,開機后會自動運行!??!在centos7上如果想開機自動運行S99local腳本,需要自行加執行權限?。。?/p>
實戰:如果破壞了MBR的前446個字節,系統重啟后沒有經過菜單欄而直接切換到救援模式的界面, 如何恢復?
先研究第一階段,即MBR前446個字節,
dd if=/dev/sda of=/data/mbr bs=1 count=512
sz /data/mbr
dd if=/dev/zero of=/dev/sda bs=1 count=446
hexdump -C -n 512 -v /dev/sda
reboot
答:救援模式—dd if=/mnt/sysimage/data/mbr of=/dev/sda bs=1 count=446—
hexdump -C -n512 -v /dev/sda—sync—sync—exit—exit—選擇reboot項。
如果沒有備份,使用grub命令也可以生成,即grub-install /dev/sda,這個命令的作用效果是將grub的1階段、1.5階段以及第二階段都修復,不僅僅只修復1階段,只要看到菜單就說明已經成功的進入到第二階段,因為菜單是由第二階段的配置文件生成的,具體修復過程如下:
救援模式—切根(chroot /mnt/sysimage)–grub-install /dev/sda—sync—sync—
exit—exit—選擇reboot選項。
實戰:/boot為獨立分區!刪除/boot下的所有文件,包括目錄,重啟如何修復?方法一:
救援模式→chroot /mnt/sysimage→mount /dev/sr0 /mnt →
cp /mnt/isolinux/vmlinuz? /boot→mkinitrd initramfs-`umane -r`.img `uname -r`→grub-install /dev/sda →cd /boot/grub→vim grub.conf
→exit→exit→選擇reboot選項
方法二:(安裝kernel包,自動生成/boot下的vmlinuz和initramfs文件)
救援模式→mkdir /mnt/cdrom → mount /dev/sr0 /mnt/cdrom→
cd /mnt/sysimage/boot→
rpm -ivh /mnt/cdrom/Package/kernel-版本.rpm –root=/mnt/sysimage –force→chroot /mnt/sysimage→grub-install /dev/sda→cd /boot/grub→vi grub.conf
在vi里可以用:r!ls /boot/vmlinuz tab鍵補出來!
在命令行輸入的是–root= ,在vi grub.conf 里面輸入的是root=? !??!
如果/boot不是獨立分區,與根在一塊,如何恢復?
恢復過程一樣,只不過在編制/boot/grub/grub.conf文件時,那兩個文件要寫成
kernel /boot/vmlinuz??? 紅色的/表示的時boot這個目錄所在的分區?。。?/p>
initd /boot/initramfs
實戰:如果將/etc/fstab文件刪除,再將/boot下的所有文件刪除,如何恢復?
備注:/etc/fstab文件內存放的是各個分區掛載到哪個文件夾下。
救援模式下的故障狀態顯示
恢復方法:救援模式→fdisk -l,顯示如下,*代表引導的意思
經查有5個分區,建一個文件夾mkdir /mnt/rootfs,將上述分區分別掛載到/mnt/rootfs下,再進入到/mnt/rootfs下,看看到底哪個分區對應的是根分區→
vi /mnt/rootfs/etc/fstab
使用blkid可以查看分區是什么文件系統。
→exit→選擇reboot選項→救援模式→chroot /mnt/sysimage→mount /dev/sr0 /mnt →
cp /mnt/isolinux/vmlinuz? /boot→mkinitrd initramfs-`umane -r`.img `uname -r`→grub-install /dev/sda →cd /boot/grub→vim grub.conf
→exit→exit→選擇reboot選項
實戰:破壞/sbin/init文件,如何恢復?(/sbin/init是個二進制文件)方法一:
故障狀態為
思路:將別的centos6上的/sbin/init文件拷一份過來就可以!
方法:救援模式→配置網絡
→
→
→
chroot /mnt/sysimage→scp 192.168.30.48:/sbin/init ./→
mv init /sbin/→reboot
方法二:
查看/sbin/init來自于哪一個包,使用rpm -qf /sbin/init來查看
方法:救援模式→chroot /mnt/sysimage→掛載→
rpm2cpio /media/CentOS_6.9_Final/Packages/upstart-版本號.rpm | cpio -idv
./sbin/init? 意思是將只解壓upstart包里面的/sbin/init文件到當前目錄!
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/98376