天天看點

Linux伺服器生産環境中的檔案删除與替換

    這些現象包括但不限于:

删除某個應用程式的部分檔案,為何不會導緻此應用程式崩潰

nginx等服務如何可以做到平滑重新開機

某些删除的檔案為何可以通過lsof根據inode找回

為何某些應用程式的檔案替換或變更後需要重新開機才能生效

針對未被加載的SO,利用複制指令(cp new.so old.so)即可直接完成靜态替換,新SO在下次加載時生效。對于已經加載的原SO,直接用新SO複制替換将會導緻相應程式崩潰,此種情況可以使用删除原SO(rm -f old.so)或修改原SO名稱(mv old.so oldx.so)後,再複制新SO的方法代替,新SO同樣在下次加載時生效。 程式崩潰的原因是複制替換操作會破壞系統通路原SO的索引節點inode,導緻系統找不到原SO。系統為每個加載到記憶體中的檔案建立對應的inode,用來管理該檔案,inode包含了檔案的元資訊,如檔案位元組數、擁有者ID、讀寫執行權限等。系統以inode辨別程 序加載的SO,不再關心檔案名,修改SO名稱并未改變對應inode,是以程式可以繼續正常運作;删除SO隻是無法檢視,系統直到程式釋放SO後才真正删除SO和inode,是以程式也可以繼續正常運作;但是在直接複制替換時,新SO将會繼承原SO的inode,程式無法繼續通路原SO,進而導緻程式崩潰。

    是以,按照這個思路,日後在Linux運維工作中,可以按照這個理論去做一些事情,比如無論是在修改還是替換錢都保留源檔案,這也是為什麼在做修改前要備份的理由之一。

tag:生産環境,檔案删除,檔案替換,如何上線,操作标準

--end--

本文轉自 urey_pp 51CTO部落格,原文連結:http://blog.51cto.com/dgd2010/1863264,如需轉載請自行聯系原作者