Systemd

關機程序說明

  • June 1, 2016

“Linux 工作原理”一書說,一般的關閉過程(獨立於 init 系統)是這樣的:

  1. init 要求每個程序乾淨地關閉。
  2. 如果一個程序在一段時間後沒有響應,init 會殺死它,首先嘗試一個 TERM 信號。
  3. 如果 TERM 信號不起作用,init 會對任何落後者使用 KILL 信號。
  4. 系統將系統文件鎖定到位並為關機做其他準備。
  5. 系統解除安裝除根以外的所有文件系統。
  6. 系統以只讀方式重新掛載根文件系統。
  7. 系統使用同步程序將所有緩衝數據寫入文件系統。
  8. 最後一步是通過 reboot(2) 系統呼叫告訴核心重新啟動或停止。這可以通過 init 或輔助程序(例如重新啟動、暫停或斷電)來完成。

如果文件系統是只讀的,如何同步寫入其緩衝區?

你感到驚訝是對的:這個順序沒有意義。如果一本書以這種方式呈現,那就是草率和誤導。

解除安裝文件系統或以只讀方式安裝它會將所有數據寫入磁碟。當umount命令或mount -o remount,ro返回時,所有數據都寫入磁碟,sync無事可做。之前呼叫沒有意義sync(數據無論如何都會被 umount 操作寫入),之後呼叫也沒有意義(它不會做任何事情)。

我認為這在一些古老的 Unix 系統中是不正確的,你必須在解除安裝sync 之前呼叫。之後呼叫它仍然沒有意義。

如果您超越文件系統,可能會出現sync某些情況。例如,我認為在 Linux 上sync可以確保將 RAID 陣列的元數據寫入磁碟。即使在沒有任何文件系統以讀寫方式安裝的情況下,這也很有用。

引用自:https://unix.stackexchange.com/questions/286762