ld.so.1庫檔案被破壞和刪除導致系統不能正常使用的解決

Dodd發表於2008-03-21

今天一個同事在一臺Solaris測試機上測試時,誤將/usr/lib/ld.so.1檔案給覆蓋了。進而導致系統中命令無法使用:

 

bash-2.03# ls

Bus Error

ls: Cannot read /usr/lib/ld.so.1

Killed

# dmesg

dmesg: Cannot read /usr/lib/ld.so.1

Killed

 

不過還好,這時沒有將當前的session斷開,否則就只有通過光碟恢復了。下面是恢復命令:

/usr/sbin/static/cp /etc/lib/ld.so.1 /usr/lib/

 

使用/usr/sbin/static/cp靜態命令將/etc/lib目錄下的ld.so.1備份檔案拷貝到ld.so.1目錄下即可。

 

上面的情況是使用者現有session沒有斷開的情況下的恢復情況,如果系統當前session斷開後,使用者是無法再登入系統的,這時只能重啟系統(而且執行reboot命令也會提示錯誤,只能通過按鈕重啟),通過光碟啟動的方法恢復了:

 

恢復的方法,用光碟或者其他方式啟動安裝介面,在介面上直接啟動一個終端程式。

1 當前的usr/lib目錄下是光碟中mount的目錄。可以做為恢復系統中損壞的ld.so.1檔案用。

2 接下來要做的是找到原來系統中usr/lib目錄,一般這個裝置是在/dev/dskc1t*的裝置檔案,一般不會是c1t0d0s0的。如果以前有各個目錄的裝置名記錄可以直接mount,不然只有一個一個來了。有可能在mount的時候會提示需要fsckfsck命令是:fsck -F ufs /dev/rdsk/c1t0d0s0(裝置名稱,根據實際情況來改)

mount命令:mount /dev/rdsk/c1t0d0s0 /mnt   (裝置名稱也是要一個一個改的哦)

mount成功後需要到mnt目錄下檢視,是不是有lib目錄,因為我們找的就是這個。

3 找到這個裝置後,就先ls l 看一下,是不是沒有執行權,沒有當然加一下嘍。方法:chmod +x  ld.so.1  

4 這裡要做的是先umount後再重新啟動機器。

Umount命令: umount /mnt 

 

Fsck也可以用在發生系統不能啟動的情況下,可以一個一個修復裝置,一般的小問題都可以解決。

 

 

下面介紹一下Solaris動態連結庫:

 

         大家都知道,在WINDOWS系統中有很多的動態連結庫(.DLL為字尾的檔案,DLLDynamic Link Library)。這種動態連結庫,和靜態函式庫不同,它裡面的函式並不是執行程式本身的一部分,而是根據執行程式需要按需裝入,同時其執行程式碼可在多個執行程式間共享,節省了空間,提高了效率,具備很高的靈活性,得到越來越多程式設計師和使用者的青睞。

 

         Solaris系統裡面有些庫檔案,當編譯的時候,如果把庫檔案也編譯到檔案中,那檔案本身就可以執行,但這樣的缺點是生成的檔案十分大。所以很多情況下使用動態連線庫,就是編譯出的檔案不包含庫,而只包含到庫的指標,這樣在執行的時候會到指定的地方呼叫這個庫,這樣就減少了檔案的大小。Solaris包含的實時聯結器ld.so.1,就是動態物件的執行階段連結程式。許多系統命令都要通過該檔案實時將相關東西動態裝載進核心,如果用truss來跟蹤某個命令來執行的話,都會發現絕大多數命令都要呼叫到ld.so.1庫檔案。

 

         如果ld.so.1檔案丟失將造成系統大多數命令都不能執行,為了防止這種情況,Solaris將一些重要的庫檔案備份在”/etc/lib”目錄下,並在 /usr/sbin/static下儲存了五個常用和關鍵系統的命令,這些命令不受該庫檔案的影響(也就是說即使該庫檔案被損壞,這些命令依然可以執行),此時如果系統還沒有當機或者沒有reboot,可以通過以下的方法來恢復:

 

# /usr/sbin/static/cp /etc/lib/ld.so.1 /usr/lib/

 

/usr/sbin/static目錄下的這個五個命令為:

cp ln mv rcp tar

 

這幾個命令都是靜態鏈連線的命令檔案,不受庫檔案的影響:

# file *

  cp: ELF 32-bit MSB executable SPARC Version 1, statically linked, stripped

  ln: ELF 32-bit MSB executable SPARC Version 1, statically linked, stripped

  mv: ELF 32-bit MSB executable SPARC Version 1, statically linked, stripped

  rcp: ELF 32-bit MSB executable SPARC Version 1, statically linked, stripped

  tar: ELF 32-bit MSB executable SPARC Version 1, statically linked, stripped

 

--The End--

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7220098/viewspace-214885/,如需轉載,請註明出處,否則將追究法律責任。

相關文章