Neden ayrıcalıklı olmayan bir kullanıcı `sync` komutunu çalıştırabilir?


11

Şu anda Ubuntu Linux'ta, ancak bunu diğer işletim sistemlerinde de fark ettim. Görünüşe göre herhangi bir kullanıcı synckomutu yürütebilir - ama neden bu? Sadece dezavantajı görebiliyorum: gereksiz disk yazmaları nedeniyle sistem yavaşlıyor.

Neden her kullanıcı çalıştırabilir sync?


1
Bu konuyla ilgili sorum şu olabilir: Kullanıcıların sync () kullanmasını engellemenin bir yolu var mı?
Bonsi Scott

@BonsiScott Elbette, izin bitlerini yürütülebilir dosyadan kaldırabilirsiniz. Ama bunu yaptığınızda bir şeyin kırılıp kırılmayacağını bilmiyorum.
jippie

Herhangi bir kullanıcı yalnızca senkronizasyon gerçekleştiremez, aynı zamanda bir hesaba ihtiyacınız yoktur. 'Senkronizasyon' hesabı /bin/synckabuk olarak çalışır , bu yüzden giriş yapmadan senkronize edebilirsiniz.
camh

Bu ne işe yarar? BTW Şu anda üzerinde çalıştığım kutudaki senkronizasyon hesabında şifre yok, bu yüzden çalışmaz.
jippie

Üretim sistemlerinin syncaramalar arasındaki bekleme süresini azaltması önerilir (örn. HP-Unix'te). Bunun nedeni, olağanüstü yazıların yığınlarının bir kerede diske yazılması nedeniyle gereksiz beklemeleri önlemektir.
Nils

Yanıtlar:


16

Ayrıcalıklı olmayan bir kullanıcının bir sistemi yavaşlatmasının birçok yolu vardır ve senkronizasyonu çalıştırmak daha verimli olmaktan çok uzaktır. Öte yandan, dosya sistemleri verilerinin diske işlenmesi oldukça meşru bir taleptir, bu nedenle kullanıcıların (ve dolayısıyla işlemlerinin) bunu yapmasını yasaklamak aşırı olacaktır.

Her durumda, "gereksiz disk yazma" ifadeniz hakkında katılmıyorum. Bu yazılar kesinlikle gereklidir ve küçük bir süre sonra otomatik olarak gerçekleşecektir.

Senkronizasyon çağrısının, uygulamasına bağlı olarak özel bir şey yapacağının garantisi bile yoktur. Senkronizasyonu çağırmak , POSIX standardının tanımladığı gibi , işletim sisteminin dosya sistemi önbelleklerini yıkaması için sadece bir "öneri" dir, yıkamaların hemen gerçekleşmesini zorunlu kılmaz. Daha kesin olarak, çağrılar işletim sisteminden bir önbellek sifonu planlamasını ister, ancak Linux uygulaması geri dönmeden önce gerçekleşmesini beklese de, önceden programlanmış zamandan önce gerçekleşeceğine dair bir garanti yoktur.

Ayrıca, senkronizasyonu arka arkaya birden çok kez çağırmak, önbellekler temizlendikten sonra, dosyalara hiçbir işlem aktif olarak yazmıyorsa, önbellekler boş olduğundan, senkronizasyonun bir işlem olmadığı için sistemleri o kadar yavaşlatmaz.

Kullanıcıların sisteminizde senkronizasyon yapmasını gerçekten önlemek istiyorsanız, şu komutları çalıştırabilirsiniz:

mv /bin/sync /bin/.sync
ln /bin/true /bin/sync

Bu, kullanıcılar tarafından büyük ölçüde fark edilmeyecek ve senkronizasyonu çalıştıran ve depolama cihazlarını (örn: usb thumbdrive) çıkarmadan insanlar çıkarmadan olumsuz etkileri yoktur, ancak bu kullanıcılar zaten aptalca davranıyorlardı.

Önceki / bin / sync bağlantısını / bin / true ile önermediğimi unutmayın. syncbazı durumlarda kesinlikle yararlıdır. Örneğin, kısa bir süre için acımasız bir kapanıştan (güç kesintisi, sistem paniği, ...) korkarsanız, bu, dosya sistemleri içeriğinin korunmasına yardımcı olur. Ben buna meşru talep diyorum.


2
@jippie Tüm syncikili, sync()fonksiyonu çağırmaktır , bu yüzden (Bonsi Scott'ın dediği gibi) çektiğiniz şey neden çekirdeğin ayrıcalıklı kullanıcıların aramasına izin vermesidirsync()
Michael Mrozek

2
@jippie Sanırım bu noktayı kaçırıyorsun. Tüm eşitleme, zaten işlenmesi gereken şeyleri (hemen) taahhüt eder. Bir flash sürücüyü çıkarmaya gittiğimde, yazdığım her şeyin gerçekten yazıldığından emin olmak istiyorum. Ve umount'un bunu garanti etmesi gerekiyorken, emin değilim, bu yüzden (bir kullanıcı olarak) çekmeden önce emin olmak istiyorum. Sistemi tamponları diske atmaya zorlayan hiçbir zarar yoktur. En kötüsü, sistem tamponları aktif olarak temizlerken bazı şeyler bir saniye gecikir. Tehlike, kullanıcıların bu işlevi reddetmesi olabilir.
killermist

2
@ killermist: senkronizasyon zorlama değil, sadece düşündürüyor. Senkronizasyon, diske herhangi bir şey temizlemeden başarılı bir çıkış durumuyla dönebilir, diskin kendisinin de başlık altındaki yazma işlemlerini geciktirebileceğinden bahsetmiyoruz. Genel olarak Windows'un gerekli özelliklerin eksik olduğu fikrini paylaşırken, bir senkronizasyon komutu endişelerimden en azını alır.
jlliagre

3
@killermist @jippie doğru. Sen güvenini daha iyi olmalıdır umountyerine OS, her zaman tampon temizler olursa olsun, (diski yoktu sürece ...) syncişletim sistemine bağlı olarak bunu yapmak için garanti edilmemektedir hangi. Linux'un syncfloşun etkili olmasını beklediğini ve bu nedenle de güvenilir olabileceğini unutmayın.
jlliagre

1
linux.die.net/man/2/sync -> Standart spesifikasyona göre (örneğin, POSIX.1-2001), sync () yazmaları zamanlar, ancak gerçek yazma işlemi tamamlanmadan önce geri dönebilir. Ancak, 1.3.20 sürümünden beri Linux aslında beklemektedir. (Bu hala veri bütünlüğünü garanti etmez: modern disklerin büyük önbellekleri vardır.)
Bonsi Scott

5

syncsisteme zarar veremez. Yavaşlayabilir, ancak diske erişen programları çalıştırmaktan daha fazla değil. Neden kısıtlanmalı?

Herhangi bir kullanıcının çalışmasına izin vermek için iyi bir neden vardır sync. Sistemin gücü kesilmiş veya kesilmiş olsa bile bazı işlemlerin yapılması gerekiyorsa bu gereklidir. Örneğin, e-posta alan bir posta aktarım aracısını düşünün. E-postayı içeren dosyayı makaraya yazdıktan sonra arar syncve ancak o zaman gönderen makineye e-postanın alındığını bildirerek yanıt verir. Arama yapmazsa syncve alıcı makine alım bildirimini gönderdikten hemen sonra ancak dosyayı diske teslim etmeden önce güç kaybederse, e-posta kaybedilir.

İşletim sistemleri verimlilik için disk yazma işlemlerini geciktirir. Bir uygulamanın gerçekten ne zaman yazılması gerektiğini bilmiyorlar. Uygulamaları ile, şimdi yazmaya işletim sistemini anlatmak için bir yol verilir Yani sync(1)ve sync(2)ve fsync(2).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.