為什麼 Linux 升級系統不用重啟,而Android和iOS卻必須重啟?


Android 不是不能免重啟,是沒有必要實現。

除了內核以外的所有部分都可以實現不重啟升級。但實現不重啟升級需要額外的工作,而重啟升級最省事。

GNU/Linux 最常用的場景是伺服器,伺服器通常有不能重啟的需求,所以必須實現不重啟升級,才能滿足需要。

而對於 Android/Linux 來說,通常不會用作伺服器,因而沒有必要實現不重啟升級的功能。沒有用戶會為不重啟升級功能付錢,所以當然就不進行這個功能的開發了。

解釋一下伺服器跟桌面的區別:伺服器通常只是一個刀片,沒有顯示器也沒有界面的,而桌面通常有圖形界面。不重啟操作系統的情況下,服務都可以完全無縫繼續運行。而圖形界面本身如果升級就需要重新啟動圖形界面(雖然不用重新啟動操作系統),不然這個升級不能生效。重新啟動圖形界面意味著大多數桌面應用將被關閉(想像一下你Linux重啟XWindowServer會是什麼情況),因而,不重啟操作系統的意義就不大了。


目前android 7的A/B 插槽式的系統更新,已經實現了升級的安裝過程無需重啟到recovery才能進行了。

提供這個特性的android設備擁有兩套完整的系統分區,分別稱為slot A與slot B。

顯然同時只能運行某一個slot上的系統。

如當前運行的是slot A的系統,則更新包會安裝在slot B,安裝完後,便可以直接重啟到另一個slot B。

廠商需要為此準備更多的差分更新包。

比如一個設備出廠時的安全更新都是2016年12月級別:

2017年1月級的安全更新把slot B升級後,下個月的安全更新既可能是從2016年12月直接跳到2017年2月級別,也可能是2017年1月級跳到2017年2月級

得益於2016年的android 7開始啟用了art的jit代碼,在這種沒有odex的情況下,啟動系統不再需要等待漫長的aot編譯了。aot編譯會推遲到收集了足夠多性能數據,並且設備處於充電且不使用時,以pgo guided編譯的形式進行,如此系統可以獲得更好的性能,且不需要編譯所有的代碼(節省儲存空間)。


你說的 Linux 的升級更接近於安卓或 iOS 更新 app

安卓或 iOS 需要重啟的更新是整個系統

一般來說 Linux 升級內核也需要重啟的,除非用了 kgraft 或者 kpatch


android的升級流程是重啟到另外一個系統(recovery),然後解壓鏡像

就算安裝的時候不重啟,如果android.jar更新了你也需要restart system service,如果內核更新了還需要重啟內核,你可以試一下su am restart,除了快一些,和重啟沒啥區別了

linux內核升級了的話也需要重啟或者kexec啊,你安裝了新內核正在運行的還是舊內核


其他人都講的很好了,

如果你的linux升級了內核,一般也是需要重啟的。

你的「升級不重啟」應該只是升級了應用軟體,

相當於在安卓上升級了 你的自帶的應用級的app。


如果你的整個linux系統都在一個squashfs裡面, 那你升級完了也需要重啟.


樓上說的已經很詳細了。

Linux啟動後也需要計算機載入一個內核。

這個內核升級後,似乎目前還不能在不啟動的情況下成為runtime.

不過,做到不重啟或者偽裝成不重啟,大概是可以解決的。只是技術上要繁瑣一點。


你說的linux升級系統是升級應用吧,升級內核試試,看看要不要重啟。當然升級內核你也可以不重啟,效果嘛就是沒升級一樣。


討論前提不成立。Android的更新是包括內核的,方便起見直接進入另外一個系統(recovery)中對這個系統進行刷寫;GNU/Linux更新包的時候不用重啟,更新內核的時候也得重啟。GNU/Linux的升級(更新包)與Android更新APP更加相似。所以題中隱含的兩者差不多是不成立的。

Android刷機包,經常見到的,是Android的內核、框架和應用一起更新,所以選擇啟動到一個簡易的臨時系統中直接刷寫更方便。


linux更新軟體時各種系統services都有按照依賴關係的restart機制。

android只有app層面有這個東西。android更新app不需要reboot。

一般linux在版本內更新可以不重啟,但是如果像類似android一般的跨版本升級也不能不重啟吧。


Windows安裝卸載優良軟體也不需要重啟。

一個系統可以比喻成公司。linux伺服器系統核心是總裁,十分能幹,啥活都幹了(實際是公司業務簡單沒啥活),其他人隨時可以更換。

Windows總裁比較傻,需要一幫coo cfo, 這幫高管還有一群小弟,換小弟有時都會全公司停擺,比如卸載360,360就跟高管說,開除我不要緊,小心點你的艷照噢。於是高管跪了,總裁也跟著跪了,得嘞,重啟吧。

安卓蘋果是一樣的,人機交互需要資源太多,相應許可權就比較大,為了防止意外還是重啟安全。

有一種遊戲版本叫硬碟版,這就屬於比較精良的遊戲,來不用安裝,走不用重啟,作風優良啊。


你覺得是花時間搞黑科技搞超薄搞3touth能賺錢還是花時間去解決一個根本不是問題的問題,重啟更新系統?


看升級了那些東西決定是不是需要重啟


@pansz 已經說得很好了,場景不同。補充一點,Linux升級內核早就不用重啟操作系統了。

Android等手持設備可以隨時重啟整個系統,尤其是涉及到GUI部分還可能必須重啟; RHEL/SUSE/Ubuntu等Linux系統一般應用於伺服器/大型機/雲,不能隨意重啟操作系統。

但是,自從2015年4月Linux kernel4.0發布以後,Linux升級內核大多數情況下也可以不重啟操作系統了,這得益於一個叫做live patching(實時補丁)的功能合併進kernel main line,那意味著你的Linux系統甚至可以連續運行幾年乃至十幾年,此功能深受運維者歡迎。


不重啟怎麼讓人感覺已經升級了


誰說linux升級不用重啟?bash如果升級了,通常是要logout然後再login的。glibc如果升級了,通常推薦退出所有進程然後再重新運行的。kernel/driver如果升級了,通常必須重啟。Xorg/KDE等如果升級了,通常要退出KDE/Xorg,然後再運行的。等等。

以上和Windows的重啟,其實也差不了多少。Windows設計時無非沒有特意減少升級的麻煩,加上獨立軟體開發商有時為了省事和減少麻煩,主動要求有時不必要的重啟。


分頁阅读: 1 2