2008年7月5日 星期六

Rescue mode (救援模式)


有的時候 ,
Linux 主機硬碟中某一 partition 壞了 , 或 系統被 cracker 破壞了 ,
或 系統管理員 ....... 不小心 ...........  ................... 等等 ...


而造成 Linux 系統無法正常啟動 ,
這時 , 我們可以進入救援模式 ,

"嘗試" 修復系統 .....


"嘗試" 救出重要卻沒備份的資料 .....


欲進入救援模式 , 最簡單的方式就是用安裝光碟來開機 ,


Fedora Core 6 的開機畫面 :
        請在 boot :  後面輸入 linux  rescue






Fedora Core 8 的開機畫面 :
        請用鍵盤的 "上下鍵" 選擇 Rescue  installed  system 這個項目 .


上面是兩個不同版本安裝片的開機畫面 , 較舊的版本是文字介面 , 而較新的版本是圖型介面 , 圖型介面比較沒問題 , 就選擇 Rescue 這個項目按 Enter 便是 , 若是文字介面 , 請在 Boot : 的後面 , 輸入 linux rescue , 然後按下 Enter ,


P.S. 並不須要對應損壞的系統版本 , 來選擇救援模式的版本 .


       在第一個畫面按下 Enter 後 , 它會開機然後出現如下畫面 :
        這裡是問你在安裝階段的語系 , 請選 “English” , 按 Tab 鍵切換到 “OK” ,
        按 Enter 繼續 .


        鍵盤型態請選擇 “us” .
        按 Tab 鍵切換到 “OK” , 按 Enter 鍵繼續 .


        如果你要在救援模式的階段使用 network , 請按 Tab 鍵選 “Yes” ,
        否則請選 “No” , 然後按 Enter 繼續 .


        這個畫面是剛才選了要使用網路 , 所以它問你是否要設定它 ..........


        它有找到 AMD 79c970 這張網卡 , 問說支援 IPv4 or IPv6 ,
        請在 “IPv4” 的項目上按空白鍵選擇之 , 然後按 Tab 到 “OK” , 按 Enter 繼續 .


        這裡的設定就看當時的網路架構了 ,
        若有 DHCP Server , 就選 “DHCP” 這項然後按 “OK” 繼續 ,
        如果沒有 DHCP Server , 就自行填個網路上沒有人用到的 IP 及 遮罩 .


        這裡是讓我們輸入 “閘道器” 及二台 “DNS 伺服器” 的位址 .
        如果在救援模式的階段有須要讓資料在不同網段中傳輸 ,
        這裡請依當時網路架構來設定 .


        因為上一個畫面並沒有輸入 “閘道器” , 所以它出現這個警告訊息 .


        這裡則是警告剛才沒有設定 DNS Server 的位址 .


        救援模式將試圖尋找硬碟內的 Linux 安裝 , 並將它掛載到 /mnt/sysimage 資料夾下 ,
        然後我們就可以對硬碟內的系統做些變動 .
        如果想要繼續這個步驟 , 請按 “Continue” ,
        如果想以唯讀的方式讀取硬碟資料 , 請按 “Read-Only” ,
        如果因為種種原因想要跳過這個步驟 , 請按 “Skip” 以直接命令接後續設定 .


        這裡說找到的系統已經掛載在 /mnt/sysimage 資料夾內了 .
        按下 “OK” 取得一個 Shell .(可以下指令來操作了)
        如果你想要以硬碟中的系統來做為救援模式時的環境 , 可以執行下列指令 :
        chroot  /mnt/sysimage
        當你從 Shell 離開後 , 系統將自動地重新開機 .

        這裡又再一次的提醒我們 , 硬碟中的系統已經被掛載在 /mnt/sysimage 內了 .
        當完成操作而離開這個 Shell 後 , 系統將會重新開機 .


        最後游標停在井字號(#)的後面 , 可以開始輸入指令來修改資料或嘗試救出資料了 .








以上只是進入 Rescut Mod 的方式而以 , 進入後才依據系統狀況來執行資料的設定或救援 .







下面簡單介面一下進入後的環境 :


特別要注意的是 , 因為我們是用光碟開機 ,
所以目前看到的系統根目錄(Root File System)是光碟系統 , 而不是我們要救援的硬碟系統 ,
在進入 Rescue Mode 時的最後一個畫面中就有提醒我們 ,
找到的 Linux 系統是掛載在 /mnt/sysimage


所以 , 如果要編輯或複製欲救援的系統 , 請在 /mnt/sysimage 內尋找 .
畫面中也說到 , 如果你想要以硬碟中的系統來做為救援模式時的環境 ,
也就是以硬碟系統的根目錄(Root File System)來做為救援階段的根目錄 ,
可以執行下列指令 : chroot  /mnt/sysimage


再來就可以進行系統或資料的救援了 ,


如果我們沒有做剛才的 chroot 指令也是可以的 ,
但不要忘記硬碟內系統根目錄是掛載在 /mnt/sysimage/ 內 ,
所以如果是要編輯 /etc/passwd 檔應該要這樣下 vi  /mnt/sysimage/etc/passwd .


剛才我們在進入 Rescue Mode 時 , 有設定網路 ,
所以我們可以把檔案備份到別台電腦上 .
當然 , 網路必須要有通啦 !

上面圖片中的例子 :
      1 . 先用 ping 指令測試網路是否有通 .
      2 . 利用 ssh client 所附的 scp 程式 ,
把 /etc/passwd 這個檔案複製到另一事前準備好的 SSH Server 上的 /tmp 內 .
最後一行表示傳輸完成 .


都操作完後 , 執行指令 exit , 系統會自動重開機 .


如果前面有執行過 chroot 指令的話 ,
執行 exit 是退出 chroot 環境 ,
再執行一次 exit , 便會自動重新開機了 .






以上都是在 Rescue Mode 抓得到硬碟內的 Linux 系統 ,
如果它抓不到的話 ........................ 怎麼辦呢 ?

        真糟糕 , 金害 , 它說沒有 Linux partitions ..........
        按下 “OK” 可以取得一個 Shell ,
        當離開這個 Shell 時 , 系統會自動重開機 .



它沒有幫我們找到硬碟中的 Linux 系統 .
我們就只好自己找 , 自己把它掛載起來救資料 .


取得一個 Shell 後 , 可以下 fdisk 指令來看看有哪些 partitions
請執行 fdisk –l


我們可以從 partitions list 中看到這台電腦只有一顆硬碟(/dev/sda) ,
有五個 partitions(sda1-5) , 其中 , sda4 是延伸磁區(Extendcd) , sda5 是 SWAP ,
sda1-3 只知是 Linux ext2 or Linux ext3 格式 , 不知資料是在哪一個 partition 裡 .
這時 , 可以用 e2label 指令來看一下 partition label(標籤) ,
從 label 名稱中 , 我們大概可以猜測這個 partition 內是存放哪些資料 .

分別對 sda1-3 執行 e2label 指令 ,
取得名稱分別為 /boot /  , /var/lib/pgsql ,


/dev/sda1(/boot) 為開機磁區 .
/dev/sda2(/) 為 RootFileSystem 系統根目錄 .
/dev/sda3(/var/lib/pgsql) 為 Postgresql 資料庫存放的磁區 .

如果我們只打算把資料庫資料救出來 , 那我們可以把 /dev/sda3 給掛載起來 ,

執行 :
mkdir  /mnt/disk
先建立一個資料夾 , 等一下要把 /dev/sda3 掛載在這裡 .
mount /dev/sda3 /mnt/disk
把 /dev/sda3 這個 partition 掛載到 /mnt/disk 這個資料夾 .


mount 指令可以看目前有哪些 partitions 掛載在哪些資料夾上 .
ls –l /mnt/disk 指令會列出 /mnt/disk 資料內有哪些物件 .



好了 , 可以利用上面有提到的 scp 指令把要救出來的檔案給 Copy 出去了 .
( 另還有 ftpgetftpput 等網路工具可用 )

也可以用 tar 指令把資料夾打包並壓縮成一個壓縮檔後再傳 .
指令如 :
tar  czvf  data.tgz  data
(建立一個壓縮檔 data.tgz , 把整個 data 資料夾放進去壓縮檔內.)

















沒有留言: