Apakah eksekusi sinkronisasi (8) masih diperlukan sebelum mematikan linux?

19

Saya masih melihat orang merekomendasikan penggunaan sync; sync; sync; sleep 30; haltmantra 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 syncprosedur sebelum melepas perangkat yang bisa dilepas, dan tidak pernah menemukan masalah.

Contoh lain - Xen memungkinkan DomU untuk dikirim shutdownperintah dari Dom0, ini dianggap sebagai "shutdown bersih" tanpa ada yang harus masuk dan mengetikkan magis sync; sync; syncterlebih dahulu.

Apakah saya benar atau saya beruntung karena beberapa ribu sistem shutdown?

Amos Shapira
sumber
Bagaimana dengan remounting sistem file hanya baca sebagai baca / tulis? Saya telah me-mount rootfs sebagai readonly dan saya remount sebagai read / write dengan perintah ini: mount -o remount, rw / dan kemudian ketika saya telah mengubah rootfs saya menjalankan mount -o remount, ro / tapi saya melihat beberapa masalah ketika saya memeriksa fs dengan fsck. Apakah perintah kedua memanggil SYNC sebelum pemasangan sebagai hanya baca?

Jawaban:

18

Alasan orang akan berjalan sync; syncsebelum a haltadalah karena haltperintah 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 menggunakan init _runlevel_atau shutdown.

The shutdownperintah sebenarnya menceritakan initproses 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 haltperintah hanya menyebut shutdownperintah kecuali tingkat run sudah 0 (mematikan) atau 6 (reboot) tetap ; jadi tidak ada kerugian di sana.

Tindakan unmount menggunakan filesystem umountakan menyinkronkan data ke disk sebelum melepaskannya.

Jika Anda telah menjalankan sync; sync; haltLinux Anda akan baik-baik saja dengan keadaan sistem file karena pengembang telah memastikan bahwa haltmelakukan hal yang benar ; namun akan lebih tepat untuk digunakan:shutdown now

DaveG
sumber
Terima kasih untuk penjelasannya. Hanya untuk memperjelas apa yang Anda katakan - "pengembang telah memastikan bahwa berhenti melakukan hal yang benar" berarti bahwa "berhenti" memanggil "sinkronisasi" juga atau bahwa ia menjalankan skrip init yang tepat yang akhirnya memanggil "sinkronisasi"? Bagaimana dengan sudah berada dalam mode pengguna tunggal dan hanya memanggil "berhenti"? Apakah saya benar dalam asumsi saya bahwa kernel Linux cukup pintar untuk tidak benar-benar mematikan secara tiba-tiba tetapi akan meng-unmount semua sistem file sebelum mematikan?
Amos Shapira
1
haltpanggilan panggilan shutdownmana umountyang melakukan sinkronisasi.
DaveG
Terima kasih DaveG. Jadi yang Anda katakan adalah bahwa semua itu terjadi di tingkat pengguna dan kernel tidak akan umount dan menyinkronkan sistem file sendiri? Bagaimanapun, itu terdengar seperti upacara "sinkronisasi; shutdown" yang berlebihan hari ini.
Amos Shapira
7

Penggunaan beberapa syncpanggilan 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 30lebih sesuai dengan apa yang dimaksudkan.

mpez0
sumber
7

Saya hanya bisa berbicara mengapa Anda mengeluarkan syncbeberapa kali. Perintah menjadwalkan flush ke disk tetapi kembali sebelum flush yang sebenarnya selesai. syncPerintah selanjutnya akan memblokir sampai semua flush yang beredar sedang berlangsung sebelum menjadwalkan flush dan keluar yang lain. Karena itu, sync; syncpastikan flush sinkron. Anda tidak perlu melakukannya lebih dari 2 kali, atau membawa sleepke dalam campuran.

Jeberle
sumber
5

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.

Jay Vaughan
sumber
3
Kaset adalah perangkat karakter. "mount" beroperasi pada perangkat blok. Saya pernah ke sana (menjalankan "dump" pada Vax 11/750 dengan BSD 4.2 di pertengahan 80-an) dan tidak ada hal seperti itu dan menjalankan "sinkronisasi" pada perangkat rekaman. Rekaman itu akan diulang otomatis jika Anda membukanya sebagai satu nama perangkat dan tetap di situ jika Anda membukanya dengan yang lain, dan Anda bisa mengirim perintah eksplisit menggunakan "mt" jika Anda harus.
Amos Shapira