2010年6月14日 星期一

開機隨身碟過度覆寫該怎麼辦?

就再買一顆囉。

以上是有錢人的處置方式。 但是刻苦耐勞勤儉持家的阿宅們, 不會甘願為了區區幾個壞軌, 就放棄一顆隨身碟。 首先, 阿宅從一開始就會避免這種情況發生。 詳見 Slax 的常見問題解決

其次, 萬一真的發生了, 還是要想辦法繼續使用那些還算正常的軌。 我們要 (1) 把壞掉的檔案找出來 (2) 把它搬到一個不會再用到的地方。

接下來要找出所有壞掉的檔案。 以 slax 為例, 所有會變動 (會被覆寫) 的東西, 全部放在 .../changes/ 子目錄底下。 所以用 root 的身份:

cd .../changes/
find . -type f > /tmp/ok.txt

最後一個指令是: 找出所有正常的檔案, 把它們的名字列出, 收集到 /tmp/ok.txt 裡面。 這時螢幕上不應該列出任何檔名; 如果有出現, 那些就是壞軌的檔案。

但光是檢查檔名可能還不夠。 應該把所有檔案的內容通通翻出來看一遍, 才能真正確認。 當然, 阿宅們有很多事要忙, 老實說, 我們對檔案的內容並沒有興趣, 只對錯誤訊息有興趣。 (而且有些是二進位檔, 只有天神等級的阿宅才讀得懂) 所以要把結果丟到虛無飄渺界: cat $(find . -type f) > /dev/null 螢幕上不應該出現任何東西; 如果螢幕上出現檔名, 那就是壞掉的檔案。 例如我在自己的壞碟上看到:

cat: ./home/ckhung/.Xauthority: 過舊的 NFS 檔案控制碼
cat: ./home/ckhung/.mozilla/firefox/Crash: 沒有此一檔案或目錄
cat: Reports/InstallTime20100115133306: 沒有此一檔 案或目錄

第一個就是壞掉的檔案; 後兩個其實是一個 "檔名內有空格" 的檔案, 被誤拆成兩個。 不要理它。

可以在 changes/ 以外的其他任何地方 (總之就是在 "不會發生寫入動作" 的地方) 建一個空目錄, 比方說叫做 bad-sectors/ 吧。 然後把所有壞掉的檔案搬過去。 不過通常搬不動 -- 因為關於檔案的某些資訊 (例如檔案名稱﹑ 檔案存取權限﹑ 最後修改日期﹑ ...) 不是存在檔案裡面, 而是存在 「壞檔所在的目錄」。 就連這些資訊都壞掉了咩, 所以只好把 「壞檔所在的目錄」 視為壞掉的目錄。 例如要處理上面的 .Xauthority, 可能需要把 ./home/ckhung/ 整個目錄當做壞掉的目錄, 搬到 .../bad-sectors/ 底下, 再把那個目錄底下其他沒壞的檔案刪掉, 把它們佔用的空間釋放到可用空間:

cd .../bad-sectors/ckhung
ls -a > /tmp/all.txt
然後編輯 /tmp/all.txt 把所有 「壞檔」 的名稱刪掉
rm -rf $(cat /tmp/all.txt)

如果壞掉的目錄底下有很多個壞檔, 就應該把每個壞檔所在的最上層目錄名稱都從 /tmp/all.txt 刪除。 意思就是: 這些壞掉的檔案或目錄, 不刪除, 讓它們繼續佔用壞掉的空間, 以免被別的檔案拿去使用。

以我使用 slax 而言, 最後我還會把 changes/ 子目錄底下的重要資料救出來, 然後整個砍掉, 從最近一次備份的 changes.tgz 重新解壓還原, 整個又回到 (幾天前或幾週前的) 正常狀態。

不過老實說, 通常這樣救回來的隨身碟, 再掛掉的機會還是蠻大的。 如果重複幾次還是撐不了多久, 還是必須買新的啦。 但至少阿宅們又多學一招了。

沒有留言:

張貼留言