Apakah ada kebenaran pada filosofi yang harus Anda selaraskan; sinkronkan; sinkronkan; sinkronkan?

27

Ketika saya pertama kali diperkenalkan ke Linux, bekerja di Cisco Systems pada tahun 2000, saya diajari manfaat dari syncperintah, yang digunakan untuk menyiram buffer ke disk untuk mencegah kerusakan sistem file / kehilangan data. Saya diberitahu bukan hanya oleh rekan kerja di sana, tetapi oleh teman-teman di kampus untuk selalu menjalankan sync"beberapa" atau "banyak" kali, yaitu, mungkin 5 - 10 kali, bukan hanya sekali.

Saya telah melanjutkan kebiasaan ini sejak itu, tetapi, adakah manfaat untuk ini? Adakah orang lain yang pernah mendengar ini? Dan yang paling penting, adakah yang bisa memberikan alasan rasional / empiris yang baik untuk / menentang gagasan bahwa Anda perlu menjalankan synclebih dari satu kali agar bisa efektif?

Josh
sumber

Jawaban:

34

Saya mendengarnya (maaf, saya lupa di mana) ketika mengetik syncperintah tiga kali (seperti pada S Y N C Return:, tunggu prompt, ulangi, ulangi). Saya juga membaca bahwa asalnya adalah sistem tertentu di mana akan membutuhkan beberapa detik bagi disk untuk menyelesaikan penyiraman buffernya, bahkan setelah ia memberi tahu sistem operasi semuanya baik-baik saja. Mengetik perintah dua kali lagi memberi disk cukup waktu untuk menyelesaikan. Tampaknya selama bertahun-tahun, tujuannya dilupakan, dan saran disingkat karena sync; sync; synctidak akan memiliki efek yang diinginkan (karena disk telah melaporkan "semua jelas", sinkronisasi kedua dan ketiga akan selesai secara instan dan cepat akan kembali terlalu dini).

Saya belum pernah mendengar tentang sistem di mana beberapa syncoperasi memiliki kegunaan, dan saya sangat skeptis ada. Saya menganggap ini legenda urban. Di sisi lain, saya merasa sangat dapat dipercaya bahwa akan ada sistem di mana Anda harus menunggu beberapa detik setelah sinkronisasi dan sebelum mematikannya.

Googling mengarah ke beberapa analisis bersama yang independen, misalnya Legenda sinkronisasi . Lihat juga Apakah eksekusi sinkronisasi (8) masih diperlukan sebelum mematikan linux? .

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Keren terima kasih! Saya seharusnya mengklarifikasi, ketika saya memasukkan sync; sync; sync; syncjudul, dan kadang-kadang saya mengetiknya dengan cara itu, saya juga mendengarnya menjelaskan kepada saya dengan cara yang sama, yaitu, sinkron, tunggu, sinkronkan lagi, tunggu, dll.
Josh
9

Old-timer di sini. Kembali ke masa kejayaan TAPE, 3 sinkronisasi cepat secara berurutan adalah cara untuk memberitahu pengendali TAPE untuk tidak hanya membatalkan tautan / membuka alur pita rekaman, tetapi juga untuk memutarnya kembali, yaitu mengatur FD / rw-head ke 0.

"sync; sync; sync" benar-benar hanya digunakan, secara produktif, oleh kita yang memotong gigi kita dengan Unix's berbasis TAPE, yaitu aplikasi yang file-filenya di-mount pada / var / spool, penyimpanan termurah yang mungkin saat itu. ;)

Manual operator MIPS Risc / OS memiliki halaman tentang ini ..

ibisum
sumber
6

Tentu saja ada sistem UNIX yang lebih tua yang lebih aman untuk disinkronkan lebih dari sekali, tetapi tidak semua pada satu baris perintah sebagai "sinkronisasi; sinkronisasi; sinkronisasi". Pada pertengahan 80-an, ini menjadi disaring untuk:

Ketika Anda mematikan sistem, Anda harus menyinkronkan tiga kali. Tidak lebih, tidak kurang. Tiga harus menjadi nomor yang disinkronkan, dan jumlah yang akan disinkronkan adalah tiga. Empat kali jangan menyinkronkan, tidak menyinkronkan dua kali, kecuali bahwa Anda melanjutkan untuk menyinkronkan ketiga kalinya ...

Saya tidak benar-benar tahu dari mana tiga kali berasal, kecuali mungkin itu menyenangkan. Tapi kata di jalan melakukannya dua kali. Bukan sebagai "sinkronisasi; sinkronkan", tetapi sebagai dua baris terpisah pada shell.

Kembali pada zaman, katakanlah, V7 UNIX, perbaikan sistem file tidak terlalu menyenangkan. Anda harus melakukannya dengan tangan, mengetahui banyak tentang cara kerja sistem file dan keanehan program seperti dcheck, ncheck, dan icheck. fsck, jika Anda memilikinya, tidak selalu sesuatu yang Anda percayai.

Ini mulai terdengar seperti kisah "kami berjalan melintasi salju menanjak dua arah". Yah, kami tidak memiliki perintah mewah seperti reboot atau shutdown. Ketika Anda ingin me-reboot sistem, Anda menyinkronkan sistem file dengan sinkronisasi, dan kemudian Anda menekan Ctrl-P pada konsol untuk menghentikannya.

Ketika perintah sinkronisasi keluar, kernel telah menjadwalkan sinkronisasi, tetapi tidak semua buffer (termasuk superblock filesystem yang sangat penting) telah berhasil masuk ke disk. Jadi itu sangat mudah untuk menjalankan sinkronisasi dan kemudian menghentikan beberapa hal sebelum aman.

Menjalankan sinkronisasi lagi adalah hal yang mudah dilakukan, menyita waktu, dan memiliki daya tarik intuitif tertentu tanpa harus memahami semuanya, atau berurusan dengan instruksi yang tidak jelas seperti "menghitung sampai 10" atau sesuatu seperti itu.

Bahkan ada bagian BUG di halaman manual V7 untuk updatejuga mengatakan:

Dengan berjalannya pembaruan, jika CPU terhenti tepat saat sinkronisasi dijalankan, sistem file dapat rusak. Ini sebagian karena perangkat keras DEC yang menulis nol ketika permintaan NPR gagal. Perbaikan akan memiliki sinkronisasi (1) sementara waktu sistem meningkat setidaknya 30 detik untuk memicu pelaksanaan pembaruan. Ini akan memberi waktu 30 detik untuk menghentikan CPU.

(yang, omong-omong, adalah hal terakhir dalam Volume 1 manual V7)

Seiring waktu, alat sistem file dan program untuk mematikan dan me-reboot sistem menjadi lebih baik untuk menghindari berurusan dengan ini. Cerita rakyat, sihir, dan sihir sistem masuk ke dalamnya ketika sistem berperilaku secara misterius. Menyinkronkan dua kali membuatnya jauh lebih kecil kemungkinannya Anda harus keluar dari penjepit bit untuk menyatukan kembali sistem file Anda, jadi itu menjadi bagian dari ritual. Setelah Anda melakukannya beberapa kali, Anda melakukannya tanpa berpikir. Kemudian seseorang memperhatikan dan bertanya mengapa. Dan jawabannya adalah seperti, "Selalu lakukan itu. Itu lebih aman."

Saya tidak akan mengklaim bahwa ini otoritatif, dan saya mungkin salah tentang beberapa detail. Tapi saya pikir itu cukup dekat dengan asalnya.

Menang
sumber
Kedengarannya seperti apa yang saya pelajari ... tetapi apakah itu hanya voodoo atau memang ada alasan? Beberapa jawaban lain memberikan saran yang baik tentang bagaimana kebiasaan ini mungkin terbentuk di antara kita sysadmin
Josh
@ Oh, alasannya diberikan. "Ketika perintah sinkronisasi keluar, kernel telah menjadwalkan sinkronisasi, tetapi tidak semua buffer (termasuk superblock sistem file yang sangat penting) harus berhasil masuk ke disk." Lihat juga: "Menurut spesifikasi standar (mis., POSIX.1-2001), sinkronisasi () menjadwalkan penulisan, tetapi mungkin kembali sebelum penulisan yang sebenarnya dilakukan." man7.org/linux/man-pages/man2/sync.2.html
sourcejedi