Linux boot分區意外格式化或清除之后…

boot分區在沒有備份的情況下意外被清空,包括啟動引導信息也沒了。這時若Linux還在運行,那你是幸運的,

修復的方法:

1. cat  /etc/*release      #趕快先確定當前系統的具體版本。有ISO鏡像趕快掛載上來.
   或  lsb_release -a      #或趕快找到對應版本的: >> kernel-`uname -r`.rpm 和 對應的grub-*.rpm 
   或  cat /proc/version

2. 找到當前系統的ISO鏡像則:

mount -o loop /path/to/file.iso  /mnt/iso 
cd /mnt/iso/
find . -name 'kernel-*.rpm' -o -name 'grub-*.rpm'
umount /boot              #先卸載boot分區的掛載
mkfs.ext2  /dev/sda1      #注:此假設為boot分區。
mount /dev/sda1 /boot 
rpm -ivh --root=/ --force kernel-`uname -r`.rpm  #"--root=/"指定其安裝的相對目錄為"/"下的boot.它主要安裝Kernel和驅動(ko);
                                                #vmlinuz:此為Linux的kernel文件. 
                                                #initramfs:此為Linux2.6的initrd文件,它包含了當前主機的磁盤驅動,
                                                #以便kernel可識別磁盤設備.
rpm -ivh --root=/ --force grub-*.rpm    #1. 它將安裝grub、grub-install等到系統中.它不是必須安裝的,
                                        #    若你的系統中已經可以使用grub-install,也可不安裝.但你需要做以下操作:
                           #(1) mkdir /boot/grub/
                           #(2) cp  /usr/share/grub/`uname -m`-redhat/*  /boot/grub/,這里復制的文件是安裝系統是創建的備份文件.
                           #    <1> stage1 :此為MBR引導信息(Bootloader)的備份.實際上就是磁盤0扇區446字節的備份文件。
                           #    <2> jfs_stage1_5,fat_stage1_5,xfs_stage1_5,iso9660_stage1_5,e2fs_stage1_5都是不同類型的文件系統,
                           #        bootloader通過它們來識別不同的boot分區,以便去查找stage2文件。
                           #    <3> stage2: 它會去找/boot/grub/grub.conf 來顯示啟動菜單.
                           
grub-install  /dev/sda          #這一步是安裝啟動引導,正常情況下:開機Post硬件自檢-->
                                #BIOS按啟動順序設定去找Disk、CDROM、PXE等方式啟動-->
                                #一般為Disk引導,當BIOS檢查到Disk上第一個可用的MBR引導(bootloader)后-->
                                #bootloader顯示啟動菜單-->
                                #選擇啟動系統后-->
                                #bootloader依啟動系統所在分區信息找到該OS的Kernel和initrd并裝載到內存特定位置-->
                                #Kernel啟動并檢查initrd是否為cpio格式-->
                                #是則解壓cpio到kernel初始化的rootfs文件系統中-->
                                #執行initrd中的init進程-->kernel退出,init進程啟動.

若系統不幸已經關機,那么可通過以下方式急救:

1. PXE方式:

    這里具體如何部署PXE環境,就不做介紹了。
    這里我測試的環境是Cobbler代替PXE來做測試。

   啟動Cobbler后,進入/var/lib/tftpboot目錄下。

   service httpd start    
   service cobblerd  start   
   service dnsmsaq start
   cd  /var/lib/tftpboot
   <1> vim pexlinux.cfg/default 
    【
        LABEL CDLinux
        kernel memdisk raw iso initrd=BT8_cdlinux_net.iso  
        # 注意: BT8鏡像是放在/var/lib/tftpboot/下的。
        # memdisk :引導IMG、IMA、ISO映像所必須加載的文件,它也可用來加載WinPE.ISO來提供網絡PE.
        #     但需要注意的是:ISO文件在網絡啟動時,不支持外置應用程序,也就是說ISO鏡像必須是將所有應用
        #     軟件都安裝到ISO鏡像內的系統目錄中才行。
            
    】

   <2> 注: 若CDLinux中不確定是否有支持Linux服務器的網卡驅動,建議先準備一個U盤,并將當前系統的ISO文件或直接將kernel-`uname -r`.rpm 和 grub-*.rpm拷貝到U盤上,然后,直接插到服務器上,在來從網絡啟動CDLinux.這樣它會自動加載USB的驅動,并將其掛載到/media目錄下。

   <3> 進入CDLinux后,操作方法就與CDROM的方式類似了。可直接參考CDROM方式即可。

   

2. CDROM方式:

這種方式最簡單,也最靠譜,但你的Linux服務器需要有CDROM 和 一張Linux發行版鏡像光盤。若沒有這就不行了。

操作方法:

1. 修改BIOS,將CDROM作為首選啟動項。

2. Linux光盤可任意發行版,但注意它必須支持Rescue模式。
        如:CentOS6.4的光盤引導中有"Rescue installed system"
           CentOS5 和Redhat5 的光盤啟動后,可在 boot: 處輸入: linux rescue回車進入Rescue模式。

3. 進入后,過程基本都一樣.一路回車.但需要注意: 一定要配置好網絡連接,給自己留條后路。最后它會自動檢測磁盤上的根文件系統,若成功檢測到,則會將其掛載到/mnt/sysimage上。接著,就會進入一個shell。

4. 進入shell后,可 chroot  /mnt/sysimage ,來切換到故障系統中。

5. 檢查當前掛載的文件系統有哪些。

    df -Th

6. 嘗試掛載boot分區到/boot下,若提示buzy或已掛載的錯誤,則先退出chroot模式。到最初shell界面,再次執行"df -Th" 查看是否掛載了/dev/sda1. 若已經掛載則先卸載它。

7. 注意: 

    做下面操作的前提是, chroot /mnt/sysimage  –>  mount /dev/sda1 /boot后。

<1> mount /dev/sr0 /mnt/cdrom     #這是假設你使用的光盤是當前系統的安裝光盤.
<2> cd /mnt/cdrom/Package/        #這是假設你的系統是Redhat或CentOS,并且光盤是Redhat或CentOS的光盤.

<3> 強制安裝kernel和grub

#注:若光盤不是當前系統的光盤,你就必須保障你的系統可以聯網。然后,下載與當前系統版本一致的rpm包。
rpm -ivh --root=/ --force kernel-`uname -r`.rpm
rpm -ivh --root=/ --force grub-*.rpm  #注: grub-*.rpm可不需要,但你必須保證系統中可以使用dd命令。

<4> 安裝Bootloader到0扇區

    grub-install /dev/sda
    #若你沒有安裝grub-*.rpm,系統中也沒有grub-install命令,那你就必須保證系統中有dd命令了,
    # 否則就只能下載一個grub或dd包.接著執行以下命令: 
    #    <1> mkdir /boot/grub
    #    <2> cp /usr/share/grub/`uname -m`-redhat/*  /boot/grub/
    #    <3> dd if=/boot/grub/stage1  of=/dev/sda  bs=446  count=1

<5> 修改/etc/fstab

vim /etc/fstab

    /dev/sda1  /boot  ext2 defaults 1 2     #若之前是UUID,則這里可先手動改成磁盤路徑。
    /dev/sda2 / ext4 defaults 1 1           #因為每次格式磁盤后,UUID會發生改變,為確保萬無一失,這里可先該成磁盤路徑.
    /dev/sda3 swap swap defaults    0 0

<6> 創建grub.conf

vim  /boot/grub/grub.conf 

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz  #注: 若/boot/grub/下沒有這個圖片文件,這里最好注釋掉。
hiddenmenu
title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)
    root (hd0,0)
    #這里注意:kernel和initrd一定不能寫錯,kernel部分也可只寫以下內容也可:
    #    "kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/sda2"
    #     但必須注意:root=LABEL=/
    #    root=UUID=....
    #    root=/dev/sda2 或是LVM路徑等.
    kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/sda2 rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD 
        SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-358.el6.x86_64.img

<7> 到此就修復boot分區完成了。接著reboot即可。

3. U盤啟動CDLinux

這種方式我測試時,始終無法成功啟動CDLinux.
若你已經能成功啟動CDLinux,那這種方式當然也是可行的,也是最方便的。

原創文章,作者:Wn1m,如若轉載,請注明出處:http://www.www58058.com/13007

(5)
Wn1mWn1m
上一篇 2016-03-22 10:43
下一篇 2016-03-22 10:47

相關推薦

  • Linux磁盤管理詳解

    linux磁盤管理 添加磁盤步驟: fdisk 管理磁盤分區 格式化文件系統。 設備掛載 開機自動掛載 UUID掛載 取消掛載點 Parted(gpt大于2G分區) 查看文件系統的使用情況。 df 查看掛載信息與磁盤使用量 du 查看使用量 查看分區狀況lsblk 查看設備信息blkid linux磁盤管理 當全新安裝了一塊新的硬盤設備后,為了更充分、安全的…

    Linux干貨 2016-09-07
  • Linux運維實戰之6:掛載/卸載磁盤分區

    上次博文我們具體討論了Linux系統中磁盤的分區及格式化( http://www.www58058.com/60811),本次博文我們具體來說說分區的掛載哈! 【問題引入】 已經格式化好的分區如何與系統現有的文件系統建立關聯(如何使用新分區)? 新的磁盤分區創建完成并格式化之后需要掛載(或裝入)到目錄樹上才能被使用。 何謂掛載/卸載? 【答】將某個…

    Linux干貨 2016-12-04
  • Linux的哲學思想及Linux發行版

    講述一下幾個問題: 第一,Linux的哲學思想;第二,Linux發行版的基礎目錄名稱,命名法則和功用規定;第三,Linux不同發行版之間的聯系和區別。 Linux的哲學思想: 1、一切皆文件。是Unix/Linux的基本哲學之一,不僅普通的文件,目錄,字符設備,塊設備,套接字等在Unix/Linux中都是以文件被對待。 2、小型,單一用途的程序。程序和可執行…

    Linux干貨 2016-09-17
  • N26-第十一周

    1、詳細描述一次加密通訊的過程,結合圖示最佳。     發送方:1、使用單項加密算法計算數據文件的特征碼2、使用發送方私鑰加密特征碼3、使用對稱加密算法生成一對臨時密鑰4、使用臨時密鑰加密數據文件和加密后的特征碼5、使用接收方的公鑰加密使用臨時密鑰加密后的數據和特征碼和臨時密鑰的解密密碼,并將之發送給接收方 接收方1、使用接收方的私鑰解密…

    2017-04-09
  • 網絡配置管理:ifcfg、iproute2和ss等相關命令介紹(不完整,需要后期完善)

    網絡配置管理:ifcfg、iproute2和ss等相關命令介紹 ifcfg家族: ifconfig [interface] ifconfig interface [aftype] options | address …   -a :查看所有 接口信息 add<地址>:設置網絡設備IPv6的ip地址 del<地址>…

    Linux干貨 2017-01-19
  • yum與rpm包

    yum與rpm包 包命名和工具 包:分類和拆包 Application-VERSION-ARCH.rpm:主包 Application-devel-VERSION-ARCH.rpm 開發子包 Application-utils-VERSION-ARHC.rpm 其它子包 Application-libs-VERSION-ARHC.rpm 其它子包 包之間:可…

    Linux干貨 2017-05-08

評論列表(1條)

  • stanley
    stanley 2016-03-22 10:46

    系統恢復是非常嚴肅的事情,如果真的出現這個問題我不會參考這篇文章,因為少了詳細的背景描述和更專業的技術介紹

欧美性久久久久