Saat ini di Ubuntu Linux, tapi saya perhatikan ini di OS lain juga. Tampaknya setiap pengguna dapat menjalankan sync
perintah - tetapi mengapa ini? Saya hanya dapat melihat kekurangannya: sistem melambat karena penulisan disk yang tidak perlu.
Mengapa setiap pengguna dapat mengeksekusi sync
?
/bin/sync
sebagai cangkangnya, sehingga Anda dapat menyinkronkan tanpa masuk.sync
panggilan (mis. Pada HP-Unix). Alasannya adalah untuk menghindari menunggu yang tidak perlu karena banyak tulisan yang beredar sedang ditulis ke disk sekaligus.Jawaban:
Ada banyak cara bagi pengguna yang tidak mampu untuk memperlambat sistem dan menjalankan sinkronisasi masih jauh dari efisien. Di sisi lain, memiliki data sistem file yang dikomit ke disk adalah permintaan yang sah sehingga melarang pengguna (dan dengan demikian proses mereka) untuk melakukannya akan berlebihan.
Bagaimanapun, saya tidak setuju tentang pernyataan "disk yang tidak perlu Anda tulis". Tulisan-tulisan ini tentu diperlukan dan secara otomatis akan terjadi setelah beberapa saat.
Bahkan tidak ada jaminan panggilan sinkronisasi akan melakukan hal tertentu tergantung pada implementasinya. Memanggil sinkronisasi, adalah, seperti yang didefinisikan oleh standar POSIX , hanya sebuah "saran" bagi OS untuk mem-flush cache sistem file-nya, itu tidak serta-merta memaksa flushes terjadi segera. Lebih tepatnya, panggilan meminta OS untuk menjadwalkan flush cache tetapi tidak ada jaminan itu akan terjadi sebelum waktu yang sudah dijadwalkan meskipun implementasi Linux menunggu hal itu terjadi sebelum kembali.
Selain itu, memanggil sinkronisasi beberapa kali secara berurutan tidak akan memperlambat sistem sebanyak itu, karena begitu cache dihapus, jika tidak ada proses yang secara aktif menulis ke file cache kosong maka sinkronisasi adalah no-op.
Jika Anda benar-benar ingin mencegah pengguna menjalankan sinkronisasi pada sistem Anda, Anda bisa menjalankan perintah ini:
Itu sebagian besar akan diperhatikan oleh pengguna dan tidak memiliki efek negatif kecuali dengan orang-orang yang baru saja menjalankan sinkronisasi kemudian menghapus perangkat penyimpanan (misalnya: usb thumbdrive) tanpa melepas mereka, tetapi pengguna ini sudah bertindak bodoh pula.
Perhatikan bahwa saya tidak akan merekomendasikan tautan / bin / sync sebelumnya dengan / bin / true.
sync
tentu berguna dalam beberapa kasus. Misalnya, jika Anda takut pematian brutal (kekurangan daya, kepanikan sistem, ...) mungkin terjadi tidak lama, itu akan membantu menjaga konten sistem file. Inilah yang saya sebut permintaan yang sah.sumber
sync
biner adalah memanggilsync()
fungsi, jadi (seperti yang dikatakan Bonsi Scott) apa yang sebenarnya Anda tanyakan adalah mengapa kernel memungkinkan pengguna yang tidak terpanggil memanggilsync()
umount
, yang, apa pun OSnya, selalu membersihkan buffer (kecuali jika disk sudah hilang ...) alih-alihsync
tidak dijamin untuk melakukannya tergantung pada OS. Perhatikan bahwa Linuxsync
menunggu flush menjadi efektif sehingga dapat dipercaya juga.sync
tidak dapat membahayakan sistem. Ini dapat memperlambatnya, tetapi tidak lebih dari menjalankan program yang mengakses disk. Mengapa harus dibatasi?Ada alasan bagus untuk mengizinkan pengguna menjalankan
sync
. Ini diperlukan jika beberapa operasi harus dilakukan secara berurutan meskipun sistem mengalami gangguan atau kehilangan daya. Misalnya, pertimbangkan agen pengiriman surat yang menerima email. Setelah menulis file yang berisi email ke spool, ia memanggilsync
, dan hanya kemudian ia membalas mesin pengirim yang memberitahukan bahwa email telah diterima. Jika tidak meneleponsync
, dan mesin penerima kehilangan daya tepat setelah mengirim pemberitahuan penerimaan tetapi sebelum melakukan file ke disk, maka email akan hilang.Sistem operasi menunda disk untuk efisiensi. Mereka tidak dapat mengetahui kapan aplikasi benar-benar membutuhkan penulisan untuk terjadi. Jadi aplikasi diberikan cara untuk memberitahu sistem operasi untuk menulis sekarang, dengan
sync(1)
dansync(2)
danfsync(2)
.sumber