Mengapa restart hanya diperlukan pada beberapa pembaruan?

18

Mengapa Ubuntu tidak meminta restart pada lebih banyak pembaruan? Saya tahu bahwa untuk pembaruan kernel dan hal-hal seperti driver video, itu tidak dapat memuat perubahan tanpa restart. Tapi saya ingin tahu tentang pembaruan yang lebih mendasar dari paket-paket mendasar yang seringkali tidak memerlukan restart. Hal-hal seperti Telepati, glibc, gtk, dll. Mengapa paket seperti ini tidak membutuhkan restart untuk diperbarui? Apakah versi baru benar-benar berjalan setelah pembaruan?

Contoh lain adalah Gwibber. Baru-baru ini saya menerima dan memperbarui ke gwibber melalui Update Manager ketika gwibber sedang berjalan. Pembaruan selesai dengan sukses. Apakah gwibber menjalankan versi baru tanpa me-restart secara manual? Dan apakah itu sama untuk paket lain? (Saya tahu beberapa seperti mysql dan apache secara otomatis restart pada pembaruan). Untuk paket yang tidak restart secara otomatis, bukankah itu bisa menjadi masalah keamanan untuk perbaikan keamanan?

Ini muncul karena saya telah menjalankan OS X selama sekitar satu minggu dan hampir setiap pembaruan memerlukan restart walaupun itu tidak berkaitan dengan driver kernel / video (sejauh yang saya tahu - mereka tidak memberi Anda banyak informasi ). Seorang teman saya mengatakan bahwa pasukan Apple memulai ulang pada sebagian besar pembaruan "untuk berjaga-jaga" akan aneh jika Anda tidak memulai kembali. Windows adalah yang terburuk karena hampir semua instalasi / pencopotan atau pembaruan memerlukan restart (seringkali memaksa shutdown membutuhkan waktu yang sangat lama). Ini mungkin agak luas untuk tempat ini, tetapi mengapa sistem operasi yang berbeda menangani hal ini secara berbeda? Atau, lebih spesifik untuk Ubuntu: mengapa Ubuntu tidak mengikuti kebijakan restart yang lebih ketat?

gregghz
sumber

Jawaban:

23

Setiap kali Anda membuka atau mengeksekusi file di Windows, Windows mengunci file di tempatnya (ini adalah penyederhanaan, tetapi biasanya benar.) Anda mungkin telah menemukan kesalahan yang mengganggu di mana Anda tidak dapat menghapus file karena proses lain memiliki kunci eksklusif pada Itu. Inilah sebabnya mengapa setiap kali Windows harus memperbarui sendiri, Anda memerlukan boot ulang agar dapat berfungsi. Windows akan mengantri untuk penggantian file dan kegiatan penghapusan ketika boot berikutnya (ketika tidak ada yang terkunci pada apa pun.)

Di sisi lain, Linux memiliki mekanisme di mana itu bukan file yang dikunci tetapi data yang mendasarinya pada disk itu. Ini mungkin tampak diferensiasi sepele tetapi itu berarti bahwa catatan file dalam daftar isi filesystem dapat dihapus tanpa mengganggu program yang sudah membuka file tersebut. Jadi Anda dapat menghapus file saat masih dieksekusi atau sedang digunakan dan itu akan terus ada di disk selama beberapa proses memiliki pegangan terbuka untuk itu meskipun entri dalam tabel file hilang. Hal ini memungkinkan Linux untuk mengganti program sepenuhnya saat masih berjalan dan kemudian cukup me-restart program atau hanya menunggu proses untuk keluar secara alami. Setelah contoh lama terbunuh,

Jadi, selama file tertentu tidak istimewa dalam beberapa hal (seperti, misalnya, file gambar kernel atau file yang memiliki sistem tingkat rendah yang serupa), pembaru biasanya dapat memperbarui di tempat seperti ini. Saya yakin ada kasus dan situasi khusus di mana ini bukan ide yang baik, tetapi untuk sebagian besar kasus tidak masalah.

Adapun mengapa OS X melakukannya, teori "kalau-kalau" terdengar masuk akal.

Andrew Lambert
sumber
1
Untuk mendemonstrasikan poin Amazed, buat file test.py: #!/usr/bin/env python print raw_input()Jalankan ini dengan python test.pyatau chmod +x test.py && ./test.pydan, ketika diminta Anda untuk input rm test.py,.
raylu
Alasan bahwa sebagian besar program pengguna tidak secara otomatis dihidupkan ulang adalah karena mereka dianggap memiliki masa hidup yang sangat singkat dan hampir tidak ada hak untuk mengubah sistem. Jika Anda khawatir dapat keluar dan kembali, ini akan menutup semua program yang sudah Anda buka.
LassePoulsen
2
Secara khusus, dpkg menginstal file dengan menuliskannya ke foo.dpkg-new dan kemudian menamai ulang file tersebut di atas semua file sebelumnya yang ada di sana, yang memungkinkan pemutakhiran perpustakaan dan executable yang lancar di tempat.
Colin Watson