ทำไมผู้ใช้ที่ไม่มีสิทธิพิเศษสามารถดำเนินการคำสั่ง `sync` ได้?


11

ขณะนี้บน Ubuntu Linux แต่ฉันสังเกตเห็นสิ่งนี้บนระบบปฏิบัติการอื่น ๆ ด้วย เห็นได้ชัดว่าผู้ใช้ทุกคนสามารถรันsyncคำสั่ง - แต่ทำไมถึงเป็นเช่นนั้น? ฉันเห็น แต่ข้อเสีย: ระบบช้าลงเนื่องจากการเขียนดิสก์ที่ไม่จำเป็น

ทำไมผู้ใช้ทุกคนสามารถดำเนินการsync?


1
คำถามของฉันในหัวข้อนี้จะเป็น: มีวิธีแม้แต่ป้องกันผู้ใช้จากการซิงค์ ()?
Bonsi Scott

@BonsiScott แน่นอนคุณสามารถลบบิตการอนุญาตออกจากการเรียกใช้ แต่ฉันไม่รู้ว่าจะมีอะไรเสียหายเมื่อคุณทำเช่นนั้นหรือไม่
jippie

ไม่เพียง แต่ผู้ใช้จะเรียกใช้การซิงค์คุณยังไม่จำเป็นต้องมีบัญชี บัญชี 'ซิงค์' ทำงาน/bin/syncเป็นเชลล์เพื่อให้คุณสามารถซิงค์โดยไม่ต้องเข้าสู่ระบบ
camh

มีประโยชน์สำหรับอะไร? BTW ไม่มีรหัสผ่านในบัญชีการซิงค์ในกล่องที่ฉันกำลังทำงานอยู่ดังนั้นมันจะไม่ทำงาน
jippie

ขอแนะนำสำหรับระบบการผลิตเพื่อลดเวลารอคอยระหว่างsync-calls (เช่นใน HP-Unix) เหตุผลคือเพื่อหลีกเลี่ยงการรอที่ไม่จำเป็นเนื่องจากมีกลุ่มของการเขียนที่โดดเด่นถูกเขียนลงดิสก์ทั้งหมดในครั้งเดียว
นิลส์

คำตอบ:


16

มีวิธีการมากมายสำหรับผู้ใช้ที่ไม่มีสิทธิพิเศษเพื่อชะลอระบบและการซิงค์ที่ทำงานอยู่ไกลจากการมีประสิทธิภาพมากขึ้น ในทางกลับกันการมีข้อมูลระบบไฟล์ที่คอมมิทไปยังดิสก์นั้นเป็นคำขอที่ชอบด้วยกฎหมายดังนั้นผู้ใช้จึงห้ามการเสนอราคา

ในกรณีใด ๆ ฉันไม่เห็นด้วยกับคำสั่ง "การเขียนดิสก์ที่ไม่จำเป็น" ของคุณ การเขียนเหล่านี้มีความจำเป็นอย่างแน่นอนและจะเกิดขึ้นโดยอัตโนมัติหลังจากผ่านไประยะหนึ่ง

แม้จะไม่มีการรับประกันใด ๆ การเรียกใช้การซิงค์จะทำสิ่งใดโดยเฉพาะทั้งนี้ขึ้นอยู่กับการใช้งาน การซิงค์การโทรคือตามมาตรฐาน POSIX กำหนดเพียง "ข้อเสนอแนะ" สำหรับระบบปฏิบัติการเพื่อล้างแคชของระบบไฟล์จึงไม่จำเป็นต้องบังคับให้ฟลัชเกิดขึ้นทันที การโทรขอให้ระบบปฏิบัติการกำหนดเวลาการล้างแคช แต่ไม่มีการรับประกันว่าจะเกิดขึ้นก่อนเวลาที่กำหนดไว้แล้วแม้ว่าการใช้งาน Linux จะรอให้ระบบเกิดขึ้นก่อนที่จะส่งคืน

ยิ่งไปกว่านั้นการเรียกการซิงค์หลาย ๆ ครั้งในแถวจะไม่ทำให้ระบบช้าลงมากเท่าที่แคชจะถูกล้างหากไม่มีกระบวนการใดที่กำลังเขียนลงในไฟล์แคชจะว่างเปล่าดังนั้นการซิงค์จะไม่ทำงาน

หากคุณต้องการป้องกันไม่ให้ผู้ใช้เรียกใช้การซิงค์บนระบบของคุณคุณสามารถเรียกใช้คำสั่งเหล่านี้ได้:

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

ส่วนใหญ่นั้นจะไม่มีใครสังเกตเห็นโดยผู้ใช้และไม่มีผลกระทบด้านลบยกเว้นกับคนที่เพิ่งเรียกใช้ซิงค์แล้วลบอุปกรณ์เก็บข้อมูล (เช่น usb thumbdrive) โดยไม่ต้องถอดอุปกรณ์ออก แต่ผู้ใช้เหล่านี้ก็ทำตัวโง่อยู่แล้ว

โปรดทราบว่าฉันจะไม่แนะนำลิงก์ / bin / sync ก่อนหน้าด้วย / bin / true syncมีประโยชน์อย่างแน่นอนในบางกรณี ตัวอย่างเช่นถ้าคุณกลัวการปิดที่โหดร้าย (การขาดแคลนพลังงาน, ความตื่นตระหนกของระบบ, ... ) อาจเกิดขึ้นในไม่ช้าซึ่งจะช่วยรักษาเนื้อหาระบบไฟล์ นี่คือสิ่งที่ฉันเรียกว่าการร้องขอที่ชอบด้วยกฎหมาย


2
@ jippie syncไบนารีทั้งหมดคือการเรียกใช้sync()ฟังก์ชั่นดังนั้น (เช่น Bonsi Scott พูด) สิ่งที่คุณถามจริงๆคือทำไมเคอร์เนลให้ผู้ใช้ที่ไม่มีสิทธิพิเศษโทรsync()
Michael Mrozek

2
@ jippie ฉันคิดว่าคุณไม่มีจุด การซิงค์ทั้งหมดจะกระทำ (ทันที) ไปยังดิสก์สิ่งที่จะต้องมีการยืนยันแล้ว เมื่อฉันไปเอาแฟลชไดรฟ์ฉันต้องการตรวจสอบให้แน่ใจว่าทุกสิ่งที่ฉันเขียนลงไปนั้นถูกเขียนขึ้นจริง และในขณะที่จำนวนที่ควรจะรับประกันนี้ฉันไม่มั่นใจดังนั้นฉันต้องการ (ในฐานะผู้ใช้) เพื่อให้แน่ใจก่อนที่ฉันจะดึงมัน ไม่มีอันตรายอะไรในการบังคับให้ระบบล้างบัฟเฟอร์ในดิสก์ ที่เลวร้ายที่สุดบางสิ่งบางอย่างจะล่าช้าเป็นวินาทีในขณะที่ระบบล้างบัฟเฟอร์อย่างแข็งขัน อันตรายที่เกิดขึ้นจะทำให้ผู้ใช้ปฏิเสธฟังก์ชันนี้
killermist

2
@killermist: การซิงค์ไม่ได้บังคับเพียงแค่แนะนำเท่านั้น การซิงค์อาจกลับมาพร้อมกับสถานะการออกจากความสำเร็จโดยไม่ต้องล้างข้อมูลใด ๆ ลงในดิสก์ไม่ต้องพูดถึงดิสก์เองอาจทำให้การเขียนล่าช้าภายใต้ประทุน ในขณะที่ฉันมักจะแบ่งปันความเห็นว่า Windows ขาดคุณสมบัติที่จำเป็นคำสั่งซิงค์จะทำให้ฉันกังวลน้อยที่สุด
jlliagre

3
@killermist @jippie ถูกต้อง คุณควรจะไว้ใจumountมากกว่านี้ไม่ว่าระบบปฏิบัติการใดจะล้างบัฟเฟอร์เสมอ (ยกเว้นกรณีที่ดิสก์หายไป ... ) แทนที่จะsyncไม่รับประกันว่าจะทำขึ้นอยู่กับระบบปฏิบัติการ โปรดทราบว่า Linux syncรอให้ flush มีประสิทธิภาพดังนั้นจึงสามารถเชื่อถือได้เช่นกัน
jlliagre

1
linux.die.net/man/2/sync -> ตามข้อกำหนดมาตรฐาน (เช่น POSIX.1-2001), sync () กำหนดเวลาการเขียน แต่อาจกลับมาก่อนการเขียนจริงจะเสร็จสิ้น อย่างไรก็ตามเนื่องจากรุ่น 1.3.20 Linux ใช้งานได้จริง (สิ่งนี้ยังไม่รับประกันความถูกต้องของข้อมูล: ดิสก์ที่ทันสมัยมีแคชจำนวนมาก)
Bonsi Scott

5

syncไม่สามารถทำอันตรายใด ๆ กับระบบ มันสามารถทำให้ช้าลง แต่ไม่มากไปกว่าการรันโปรแกรมที่เข้าถึงดิสก์ ทำไมมันจึงถูก จำกัด

มีเหตุผลที่ดีที่จะช่วยให้ผู้ใช้ใด ๆ syncที่ใช้คือ นี่เป็นสิ่งจำเป็นหากการดำเนินการบางอย่างจะต้องดำเนินการตามลำดับแม้ว่าระบบล่มหรือสูญเสียพลังงาน ตัวอย่างเช่นพิจารณาเอเจนต์การถ่ายโอนเมลที่ได้รับอีเมล เมื่อมันเขียนไฟล์ที่มีอีเมลลงในสปูลแล้วมันก็จะโทรsyncแล้วก็ตอบกลับไปยังเครื่องส่งเพื่อแจ้งว่าได้รับอีเมลแล้ว หากเครื่องไม่ได้รับสายsyncและเครื่องรับพลังงานดับหลังจากส่งการแจ้งเตือนการรับ แต่ก่อนส่งไฟล์ไปยังดิสก์อีเมลจะหายไป

ระบบปฏิบัติการหน่วงเวลาการเขียนดิสก์เพื่อประสิทธิภาพ พวกเขาไม่สามารถรู้ได้ว่าเมื่อใดที่แอปพลิเคชันต้องการให้การเขียนเกิดขึ้นจริง ๆ ดังนั้นแอพพลิเคชั่นจึงมีวิธีบอกให้ระบบปฏิบัติการเขียนตอนนี้ด้วยsync(1)และและsync(2)fsync(2)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.