有的時候 ,
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 後 , 它會開機然後出現如下畫面 :
按 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 伺服器” 的位址 .
如果在救援模式的階段有須要讓資料在不同網段中傳輸 ,
這裡請依當時網路架構來設定 .
因為上一個畫面並沒有輸入 “閘道器” , 所以它出現這個警告訊息 .
救援模式將試圖尋找硬碟內的 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
畫面中也說到 , 如果你想要以硬碟中的系統來做為救援模式時的環境 ,
也就是以硬碟系統的根目錄(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(sda1-5) , 其中 , sda4 是延伸磁區(Extendcd) , sda5 是 SWAP ,
sda1-3 只知是 Linux ext2 or Linux ext3 格式 , 不知資料是在哪一個 partition 裡 .
這時 , 可以用 e2label 指令來看一下 partition label(標籤) ,
從 label 名稱中 , 我們大概可以猜測這個 partition 內是存放哪些資料 .
取得名稱分別為 /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 這個資料夾 .
ls –l /mnt/disk 指令會列出 /mnt/disk 資料內有哪些物件 .
好了 , 可以利用上面有提到的 scp 指令把要救出來的檔案給 Copy 出去了 .
( 另還有 ftpget 及 ftpput 等網路工具可用 )
也可以用 tar 指令把資料夾打包並壓縮成一個壓縮檔後再傳 .
指令如 :
tar czvf data.tgz data
(建立一個壓縮檔 data.tgz , 把整個 data 資料夾放進去壓縮檔內.)
沒有留言:
張貼留言