Wednesday, October 5, 2011

拯救 FreeBSD 小惡魔

為了幫某個系統問題除錯,在等不及重新編釋/make world 的情況下,我直接用一個 新版本的 libc.so,蓋掉 /lib/libc.so.7。結果,很不幸的, copy 的動作並未完成, 並留下損毀的 /lib/libc.so.7。於是乎,系統無法執行任何新指令了,也無法重新 進行 copy。就此,我展開了拯救 FreeBSD 小惡魔大作戰。

甲計劃,我開始做開機用的 USB storage。先從另一台 notebook 上,重新 build world 並製作開機用的 image。 但這太慢了,又試著從網路上 download 現有的 binary。 這也不是這麼順利, memory stick 的 image 是給 EFI 用的。 於是靈光乍現,想到了乙計劃。

乙計劃。FreeBSD 系統的 /rescue 目錄下,有一個小型的系統,包括一些常用的工具, 包括 sh, mount, cp, mount_nfs, xz, newfs ... 等等。 而且全都是 static link。 也就是說,這些程式全都不會 depend on 已損毀的 /lib/libc.so。 於是,我開進 single user mode,直接指定 /rescue/sh 取代預定的 /bin/sh。 於是順利的進入系統,並使用該 /rescue/cp 重新進行 copy 的動作, 將 /lib/libc.so.7 恢復到正常的狀態。

於是,再一次的,正義贏得最後的勝利。小惡魔再次被成功的搭救。 這已是我第 N 次進行搭救半毀小惡魔的行動,目前還沒失手過。 這完全要感謝強壯的 FreeBSD 小惡魔。

Reference:
http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/455

No comments: