1殺-9

1殺-9

設定

我已經成為一名程式設計師很長一段時間了,但我對深層的、內在的東西仍然有點模糊。

現在。我很清楚這都不是個好主意:

  1. Kill -9 一個進程(不好)
  2. 自發性地拔掉正在運作的電腦或伺服器的電源插頭(更糟)

然而,有時你只是不得不這樣做。有時,無論您做什麼,進程都不會回應,有時,無論您做什麼,電腦都不會回應。

我們假設系統透過 mod_wsgi 運行 Apache 2、MySQL 5、PHP 5 和 Python 2.6.5。

注意:我在這裡對 Mac OS X 最感興趣,但與任何 UNIX 系統相關的答案都會幫助我。

我的顧慮

每次我必須做其中之一,尤其是第二個時,我都會在一段時間內非常擔心有東西壞了。某處的某些文件可能已損壞 - 誰知道哪個文件?計算機上有超過 1,000,000 個檔案。

我經常使用 OS X,因此我將透過磁碟實用程式執行「驗證磁碟」操作。它不會報告任何問題,但我仍然對此感到擔憂。

如果某處的某個設定檔搞砸了怎麼辦?或者更糟的是,如果某個地方的二進位檔案損壞了怎麼辦?或某處的腳本檔案現在已損壞。如果某些硬體損壞怎麼辦?

如果我直到下個月才發現,在嚴重的情況下,當腐敗或損壞導致災難時怎麼辦?

或者,如果有價值的資料已經遺失怎麼辦?

我的希望

我希望這些擔憂和擔憂是沒有根據的。畢竟,之前已經做過很多次了,還沒有發生什麼真正糟糕的事情。最糟糕的是我必須修復一些 MySQL 表,但我似乎沒有丟失任何資料。

但是,如果我的擔心並非毫無根據,並且在情況 1 或情況 2 中都可能發生真正的損害,那麼我希望有一種方法可以檢測到它並預防它。

我的問題

這是否是因為現代作業系統的設計目的是確保在這些情況下不會遺失任何內容?這是否是因為現代軟體的設計目的是確保不會失去任何東西?現代硬體設計怎麼樣?拔掉電源插頭時有哪些措施?

我的問題是,對於這兩種情況,什麼確切地可能會出錯,應該採取什麼步驟來修復它?

我的印像是,可能出錯的一件事是某些程式可能沒有將其資料刷新到磁碟,因此任何應該寫入磁碟的最新資料(例如,在斷電前幾秒鐘) )可能會遺失。但除此之外呢? 5 秒資料遺失的問題是否會搞砸系統?

隱藏在硬碟上的巨大文件森林中的隨機文件損壞怎麼辦?

硬體損壞怎麼辦?

什麼對我最有幫助

  1. 有關當您終止 -9 進程或關閉整個系統電源時內部發生的情況的詳細描述。 (看起來很快,但有人可以幫我放慢速度嗎?)

  2. 對這些場景中可能出錯的所有事情的解釋,以及(當然是粗略的)機率(即,這不太可能,但這是可能的)...

  3. 描述現代硬體、作業系統和軟體中採取的措施,以防止這些情況發生時發生損壞或損壞。 (安慰我)

  4. 除了「驗證磁碟」之外,有關在執行kill -9 或斷電後該怎麼做的說明,以真正確保驅動器上的某處沒有任何損壞或損壞。

  5. 可以採取的措施來強化電腦設置,以便在必須殺死某些東西或必須切斷電源時,可以減輕任何潛在的損害。

  6. 關於二進位檔案的一些資訊——apache 二進位檔案或某些庫是否可能在中間有一個或兩個隨機位元組損壞,直到稍後才會出現並導致問題?我如何確保自己這不是由於拉力或殺戮而發生的?

非常感謝!

答案1

拉動電源會導致一切在飛行中停止,沒有任何警告。 Kill -9 對單一進程有相同的效果,用信號殺死

如果進程因核心或斷電而終止,它不會進行任何清理。這意味著您可能會遇到半寫入的檔案、不一致的狀態或遺失的快取。由於日誌記錄、退出狀態和電池備份,您通常不必擔心這些。

如果 /tmp 中的臨時檔案位於 tmpfs 中,它們將自動消失,但您可能仍然有特定於應用程式的鎖定檔案需要刪除,例如 Firefox 的鎖定和 .parentlock。

如果沒有記錄成功的退出狀態,大多數軟體都足夠聰明,可以重試事務。典型的郵件系統就是一個很好的例子。如果訊息正在傳遞,但在中間被切斷,發送者將稍後重試,直到成功為止。

您的檔案系統可能已記錄日誌。如果您正在移動或寫入檔案且該檔案在中途終止,則日誌檔案系統仍將引用原始檔案。日誌檔案系統將以非破壞性方式進行更改,保留舊副本,然後僅在回收舊副本在磁碟上佔用的空間之前引用新副本作為最後一步。

現在,如果您有一個 RAID 陣列,它具有各種記憶體緩衝區,可提高效能並在電源故障時提供可靠性。您的檔案系統很可能不知道裝置中的快取及其狀態,因此它認為變更已提交到​​磁碟,但它仍然位於 RAID 快取中的某處。那麼當電源消失時會發生什麼事呢?希望您的 RAID 機殼中有一塊功能正常的電池並對其進行監控。否則,您有一個損壞的檔案系統需要進行 fsck。

是的,二進位檔案中的一些位元可能會被損壞,但在現代硬體上我不會太擔心。如果您真的很偏執,您可以使用適當的工具監控磁碟和 RAID 的運作狀況,但無論如何您都應該這樣做。定期進行備份並取得不間斷電源。

答案2

在意外關閉時,唯一應該損壞的檔案是開啟用於寫入的檔案。在大多數系統上,在任何給定的時刻,您可能都沒有寫入檔案。大概。

1殺-9

是 POSIX SIGKILL 並且依賴實作。接收到該訊號的進程將不會有機會處理它。

1 關閉電源

取決於硬體。磁頭在驅動器動力下自動停放,寫入快取中的所有內容都會失去 DRAM 刷新,並在幾秒鐘內衰減為無法挽回的損壞。系統記憶體、CPU 快取、暫存器等也會發生同樣的情況。

來自 wdc.com(Google:site:wdc.com 停車防護頭)

斷電:硬碟重置。利用主軸能量將頭部停在著陸區。主軸馬達停止。

2 - 可能會出現什麼問題

保持開啟狀態的文件未完全寫出。如果開啟檔案進行寫入,則會出現資料損壞。現代硬體中的檔案寫入速度很快,而且現代 PC 通常不會受到 IO 壓力。這就像蒙著眼睛走在一條安靜的鄉間小路上。大多數時候,你都會沒事的。

3 - 對策

請參閱上文了解磁碟的用途。

查找日誌檔案系統,它們現在正常了:http://en.wikipedia.org/wiki/Journaling_file_system

MS Word 或 vi 等軟體將寫入臨時檔案而不是原始檔案。目標是永遠不要讓系統處於磁碟上沒有一致副本的狀態。

Windows 保留註冊表的副本(這太重要了)維基百科:「Windows 2000 保留註冊表配置單元 (.ALT) 的備用副本,並在檢測到損壞時嘗試切換到它」(自從Win2k,所以我不確定MS的新機制是什麼)

4 - 做什麼

按難度順序(易-難)

  • 保留備份
  • 檢查您最近在做什麼
  • 從單獨的磁碟啟動並尋找上次修改的日期/時間,以找出系統在崩潰時可能正在執行的操作
  • 從單獨的磁碟啟動並將所有檔案的 md5sum 與離線副本進行比較。

保留備份是最適合的答案,好的備份應該會讓你回到先前修改的版本。

5

冗餘電源?最終用戶教育?將膠帶和紙板貼在電源按鈕上?

6

如果沒有硬體故障、磁碟機損壞、作業系統核心損壞、升級過程中缺少校驗和或崩潰,二進位檔案和庫不會以讀寫方式打開,因此不會損壞。這種事雖然偶爾發生,但也很少見。

答案3

至於kill -9,這會向進程發送一個信號,讓其當場「死亡」。該進程死亡(除非它處於不可中斷的睡眠狀態,在這種情況下它會變成殭屍)。沒有檔案被關閉,沒有資料被寫出,程式無法捕捉此訊號並執行其他操作。沒有清理,什麼都沒有:它就死了。

如今的檔案系統非常強大;像 XFS、JFS、ext3 和 ext4 這樣的檔案系統都有日誌和其他東西來保持檔案系統元資料的完整性。

像 Apache 本身和其他二進位檔案不太可能因突然斷電或系統終止而損壞,因為它們要么在記憶體中,要么正在被讀取;如果正在讀取它們(例如,Apache HTTP 正在啟動),電源突波可能會損壞二進位文件,但這似乎不太可能。

我有一台 Mac Mini,人們似乎喜歡關掉冷氣(無論我告訴他們多少次...),而且它一直在繼續。

在大多數情況下,只要您不依賴kill -9或定期關閉電源,我就不會太擔心。過去的情況要糟糕得多。我比較擔心(例如)Solaris 2.6,而不是 Solaris 10(等等)。

答案4

「kill -9」不會同步掛起的 IO 操作。這通常不是問題,但如果系統處於繁重的 IO 負載下,您可能會丟失資料。

這更多是伺服器的問題,其中 RAID 控制器(沒有電池支援的快取)可能會快取寫入並丟失資料。

編輯:還有一件事......如果您依賴網路安裝的驅動器並具有打開的文件句柄,則很可能會導致文件不一致或損壞。在 Windows 上,您會看到這種情況的典型範例是當使用者將 Outlook PST 檔案裝載到共用上並失去電源或網路連線時。

相關內容