萬盛學電腦網

 萬盛學電腦網 >> Solaris介紹 >> Solaris下誤刪除根目錄下文件的解決之道

Solaris下誤刪除根目錄下文件的解決之道

 記得幾年以前剛接解UNIX操作系統的時候,學會了rm命令,還學會了rm -rf *,我想很多人都經常這樣使用,在UNIX下如果不用alias rm rm -i的話,刪除根本不做任何提示,這也是UNIX設計的哲學,但是對於新手有時候會容易犯錯誤的.有時候後果是很嚴重 .以前在AIX下就一不小心把/目

 記得幾年以前剛接解UNIX操作系統的時候,學會了rm命令,還學會了rm -rf *,我想很多人都經常這樣使用,在UNIX下如果不用alias rm rm -i的話,刪除根本不做任何提示,這也是UNIX設計的哲學,但是對於新手有時候會容易犯錯誤的.有時候後果是很嚴重 .以前在AIX下就一不小心把/目錄下的東西刪除的差不多,等會按Ctrl+C的時候已經遲了,被批評了一通,還好那個機器沒什麼東西,從那以後就非常小心了,後來只能重新安裝操作系統了,從那以後我印象中這種總量只能重裝操作系統了.

  這不,這幾天這件事情又發生了,不過這次沒那麼簡單了(不是我干的),這個機器是雙機的主機,上面掛的磁陣,安裝SC以及Veritas軟件,還是數據庫,不過這次嘗試了一下重裝以外的辦法,最終花了兩個小時(包括查資料時間搞定),當時的場景是這樣的:

  話說一位高手在電腦前以無影手的速度擊打鍵盤,突然停了下來,伴著一聲慘叫"啊,怎麼當前目錄在根目錄下",我一看高手輸入的最後一個命令就是稱為UNIX殺手锏的"rm -rf *",這時看了一下,好像只是bin目錄沒有了,因為bin只是鏈接到/usr/bin的符號鏈接,我重新建一個不就可以了,以為到此天下太平了.下午的時候,因為修改一些配置必須重新啟動機器,平時幾分鐘就可以了,可以今天等了好久也沒能連上,最後用串口線連上去一看,系統已經進入ok狀態,這還不容易,把參數auto-reboot修改為true,再輸入go,可是機器經過幾分鐘機器沒有任何反應,我再重啟,這樣試了幾次,還是沒用,看來這次問題嚴重了.沒辦法只能重裝操作系統(以前家裡用Windows的時候,只要一中病毒且殺不掉或者系統變的很慢,一個辦法重裝,有時在想,這樣的操作系統讓生產硬件廠商也多賣點硬盤和內存之類,不過現在家裡電腦早就換成Linux了,再也沒有以前那種煩惱了!),費話少說: 把Solaris的安裝盤插入光驅,在ok狀態輸入: boot cdrom -sw,用光盤引導啟動以後進入操作程系統.

  我們的思路是把原來的根分區掛載以後,找到根分區丟失的文件,把丟失的文件再補回來應該就可以了,好了.正式開始:

  用format命令找到原來根分區所使用的磁盤,我發現format裡顯示的磁盤順序和正常啟動時顯示的磁盤順序不一樣,只能一個一個選中磁盤以後用p查詢分區和掛載情況,比如:我發現c1t0d0s1是原來的根分區的話,退出format.

  在/tmp/root/下新建目錄mytmproot,mkdir /tmp/root/mytmproot

  mount /dev/dsk/c1t0d0s1 /tmp/root/mytmproot

  可能覺得奇怪,為什麼要掛到/tmp下,而不直掛載到/下,你要知道我們是光盤引導,所以根分區是只讀的.

  上面的掛載成功以後,到/tmp/root/mytmproot看一下是不是你原來根目錄的東東呀,這時我們要找到少了哪些文件,用了一個土辦法,找另外一個同樣的機器用du或者du -s查看目錄下的文件個數和大小進行比較,最終發現/dev的dsk目錄沒有了,另外/devices下面也少了一些文件,可能大家都知道這下面的文件是干嗎的吧?因為/dev/dsk下都是一些符號鏈接到/devices下的,想手工建立符號鏈接,但是因為每個機器可能有差別,直接照搬可能有風險,我想起來可以用: devfsadm -C -r /tmp/root/mytmproot, -r選項可以設定根目錄的路徑,執行完成以後,發現/dev/dsk下面的文件都回來了,心想這樣應該差不多了(因為比較發現就這個下面的文件被刪除了),重啟以後出現一些網卡相關的錯誤,不管它,重啟(從硬盤引導)以後發現以前配置的網卡都不在了,用ifconfig ce0 plumb提示沒有這樣的設備,一比較發現/devices下面丟失了一些網卡的設備文件,進入ok狀態以後,輸入probe-scsi-all,再輸入watch-net-all,再power-off,重啟重新檢測硬件進入操作系統,以前丟失的東西都回來了,至此所有問題都解決了.

  可能我這個問題比較特殊,因為刪除的文件特殊,希望能夠起到一個拋磚引玉的作用吧!

copyright © 萬盛學電腦網 all rights reserved