Saya masih melihat orang merekomendasikan penggunaan sync; sync; sync; sleep 30; halt
mantra ketika berbicara tentang mematikan atau me-reboot Linux.
Saya sudah menjalankan Linux sejak awal dan meskipun ini adalah prosedur yang disarankan dalam BSD 4.2 / 4.3 dan SunOS 4 hari, saya tidak dapat mengingat bahwa saya harus melakukannya setidaknya selama sepuluh tahun terakhir, di mana saya mungkin melewati shutdown / reboot Linux mungkin ribuan kali.
Saya menduga bahwa ini adalah anakronisme sejak zaman kernel tidak dapat meng-unmount dan menyinkronkan sistem file root dan sistem file kritis lainnya yang diperlukan bahkan selama mode single-user (misalnya / tmp), dan oleh karena itu perlu untuk memberitahu secara eksplisit untuk menyiram data sebanyak mungkin ke disk.
Saat ini, tanpa menemukan kode yang relevan di sumber kernel (menggali melalui http://lxr.linux.no dan google), saya menduga bahwa kernel cukup cerdas untuk unmount unmount bahkan sistem file root dan sistem file cukup cerdas untuk secara efektif melakukan sinkronisasi (2) sebelum melepas sendiri selama normal shutdown
/ reboot
/ poweorff
.
The "sync; sync; sync"
hanya diperlukan dalam kasus-kasus ekstrim di mana filesystem tidak akan unmount bersih (misalnya kegagalan disk fisik) atau sistem dalam keadaan yang hanya memaksa reboot langsung (8) akan mendapatkannya dari pembekuan (misalnya beban terlalu tinggi untuk membiarkannya menjadwalkan perintah shutdown).
Saya juga tidak pernah melakukan sync
prosedur sebelum melepas perangkat yang bisa dilepas, dan tidak pernah menemukan masalah.
Contoh lain - Xen memungkinkan DomU untuk dikirim shutdown
perintah dari Dom0, ini dianggap sebagai "shutdown bersih" tanpa ada yang harus masuk dan mengetikkan magis sync; sync; sync
terlebih dahulu.
Apakah saya benar atau saya beruntung karena beberapa ribu sistem shutdown?
sumber
Jawaban:
Alasan orang akan berjalan
sync; sync
sebelum ahalt
adalah karenahalt
perintah tidak akan mematikan sistem dengan bersih di linux lama. Cara yang benar untuk melakukan ini pada sistem SYSVr4 adalah selalu memberitahu init untuk pindah ke level run yang berbeda.BSD dan SunOS 4 bukan sistem operasi SYSVr4 yang mengapa mereka berbeda. Solaris (SunOS 5) adalah SYSVr4 dan Linux memilih bit dari standar SYSVr4 yang ingin digunakan.
Menggunakan halt sebenarnya adalah cara yang sangat buruk untuk melakukannya di sebagian besar UNIX (Linux menjadi salah satu pengecualian) karena ia tidak benar-benar dijalankan melalui skrip init untuk melakukan hal-hal seperti menghentikan proses dan melepas disk - hanya menghentikan prosesor.
Jika Anda dapat menjamin bahwa Anda tidak akan pernah, pernah menggunakan sistem UNIX apa pun selain Linux maka Anda dapat terus menggunakan
halt
- jika ada kemungkinan Anda akan menggunakan UNIX lain maka saya akan merekomendasikan untuk membiasakan diri menggunakaninit _runlevel_
ataushutdown
.The
shutdown
perintah sebenarnya menceritakaninit
proses untuk mengubah tingkat menjalankan nya tingkat run - dalam melakukannya init kemudian mulai menjalankan masing-masing K * init script dan S * init script yang terkait dengan tingkat run. Salah satu skrip dalam run-level 0 melakukan unmount dari sistem file.Pada Linux
halt
perintah hanya menyebutshutdown
perintah kecuali tingkat run sudah 0 (mematikan) atau 6 (reboot) tetap ; jadi tidak ada kerugian di sana.Tindakan unmount menggunakan filesystem
umount
akan menyinkronkan data ke disk sebelum melepaskannya.Jika Anda telah menjalankan
sync; sync; halt
Linux Anda akan baik-baik saja dengan keadaan sistem file karena pengembang telah memastikan bahwahalt
melakukan hal yang benar ; namun akan lebih tepat untuk digunakan:shutdown now
sumber
halt
panggilan panggilanshutdown
manaumount
yang melakukan sinkronisasi.Penggunaan beberapa
sync
panggilan adalah untuk memungkinkan OS dan waktu disk untuk membersihkan antrian penulisan."sync; sync; sync"
tidak dianggap berguna; satu lakukan"sync<cr> sync<cr> sync<cr"
dan penundaan sementara ASR-33 Anda melakukan carriage return / newline memberikan penundaan yang cukup. Berhenti selalu melakukan sinkronisasi panggilan; pertanyaannya adalah apakah akan ada cukup waktu untuk membersihkan antrian sebelum listrik dilepas.Poster asli
sync; sleep 30
lebih sesuai dengan apa yang dimaksudkan.sumber
Saya hanya bisa berbicara mengapa Anda mengeluarkan
sync
beberapa kali. Perintah menjadwalkan flush ke disk tetapi kembali sebelum flush yang sebenarnya selesai.sync
Perintah selanjutnya akan memblokir sampai semua flush yang beredar sedang berlangsung sebelum menjadwalkan flush dan keluar yang lain. Karena itu,sync; sync
pastikan flush sinkron. Anda tidak perlu melakukannya lebih dari 2 kali, atau membawasleep
ke dalam campuran.sumber
Anda semua memberi tahu kami bahwa "sinkronisasi; sinkronisasi; sinkronisasi" tidak memiliki tujuan mengungkapkan usia Anda.
Kembali di masa lalu, sebelum Unix adalah sesuatu untuk remaja, kami dulu harus menggunakan TAPE untuk kebutuhan streaming / cadangan kami. Sering kali, kami memasang sistem file berbasis tape untuk mengalirkan cadangan, dan sebagainya. Satu pita tipis panjang pita plastik magnetik inilah yang dimiliki sebagian dari kita, untuk menyimpan file kita di ..
Perintah 'sync; sync; sync' adalah cara agar mesin rekaman lama ini dapat diperintahkan untuk memundurkan diri mereka sendiri sampai akhir (sebelum shutdown) - mereka memiliki firmware di papan yang akan menerima cmd sinkronisasi (seperti semua sistem file yang bagus lakukan), dan jika diikuti segera oleh dua perintah buffer sinkronisasi lagi, drive tape itu sendiri akan menafsirkan ini berarti "mundur rekaman dan unmount itu". Tidak ada cara untuk memberitahu tape drive untuk mundur, di luar metode ini, dan itu agak macet .. Kebiasaan ini kemudian beralih ke kata ketika hard drive menjadi lebih tersedia - kita operator tua yang berkerak tidak hanya realokasi ( ) memori otot kita lho! Saya percaya itu mencapai status cerita rakyat segera setelah kaset menjadi kurang umum dan hard drive menjadi lebih tersedia, tetapi masih memiliki kegunaannya bagi kita dengan tape drive.
sumber