มีความจริงกับปรัชญาที่คุณควรซิงค์; ซิงค์; ซิงค์; ซิงค์?


27

เมื่อฉันได้รับการแนะนำให้รู้จักกับ Linux เป็นครั้งแรกที่ทำงานกับ Cisco Systems ในปี 2000 ฉันได้รับการสอนถึงข้อดีของsyncคำสั่งที่ใช้ในการฟลัชบัฟเฟอร์ลงดิสก์เพื่อป้องกันความเสียหายของระบบไฟล์ / การสูญหายของข้อมูล ฉันได้รับการบอกเล่าจากเพื่อนร่วมงานที่นั่นไม่เพียง แต่จากเพื่อน ๆ ในวิทยาลัยที่มักจะเรียกใช้sync"ไม่กี่" หรือ "พวง" หลายครั้งนั่นอาจจะเป็น 5 - 10 ครั้งแทนที่จะเป็นเพียงครั้งเดียว

ฉันยังคงนิสัยนี้มานับ แต่มีบุญใด ๆ นี้ มีใครเคยได้ยินเรื่องนี้บ้างไหม? และที่สำคัญที่สุดคือทุกคนสามารถให้เหตุผล / หลักฐานเชิงประจักษ์ที่ดีสำหรับ / กับความคิดที่คุณต้องใช้syncมากกว่าหนึ่งครั้งเพื่อให้มีประสิทธิภาพหรือไม่

คำตอบ:


34

ฉันได้ยินมัน (ขออภัยฉันลืมที่) ในขณะที่พิมพ์syncคำสั่งสามครั้ง (ใน:: S Y N C Returnรอการแจ้งให้ทำซ้ำทำซ้ำ) ฉันยังอ่านว่าจุดเริ่มต้นเป็นระบบเฉพาะซึ่งใช้เวลาสองสามวินาทีก่อนที่ดิสก์จะเสร็จสิ้นการล้างบัฟเฟอร์แม้ว่ามันจะบอกว่าระบบปฏิบัติการทุกอย่างเรียบร้อยดีก็ตาม การพิมพ์คำสั่งอีกสองครั้งทำให้ดิสก์มีเวลาเพียงพอในการชำระ ดูเหมือนว่าในช่วงหลายปีที่ผ่านมามีวัตถุประสงค์ที่ถูกลืมและคำแนะนำสั้น ๆ ว่าsync; sync; syncจะไม่มีผลตามที่ต้องการ (ตั้งแต่ดิสก์รายงานว่า "ชัดเจน" การซิงค์ที่สองและสามจะเสร็จสมบูรณ์ทันทีและพร้อมท์ จะกลับมาเร็วเกินไป)

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

Googling นำไปสู่การไม่กี่วิเคราะห์ประจวบอิสระเช่นตำนานของซิงค์ ดูเพิ่มเติมจำเป็นต้องทำการซิงค์ (8) ก่อนปิด linux หรือไม่ .


1
เยี่ยมมากขอบคุณ! ฉันควรจะได้ชี้แจงในขณะที่ฉันใส่sync; sync; sync; syncในชื่อเรื่องและบางครั้งฉันจะพิมพ์มันเป็นอย่างนั้นฉันยังได้ยินมันอธิบายให้ฉันทางเดียวกัน, ที่อยู่, ซิงค์, รอซิงค์อีกครั้งรอ ฯลฯ
Josh

9

ตั้งเวลาเก่าไว้ที่นี่ ย้อนกลับไปในสมัยรุ่งเรืองของ TAPE การซิงค์อย่างรวดเร็ว 3 ครั้งติดต่อกันเป็นวิธีที่จะบอกคอนโทรลเลอร์ของ TAPE ไม่เพียงแค่ยกเลิกการเชื่อมโยง / ถอดเทปเทปสตรีม แต่เพื่อย้อนกลับเช่นกันเช่นตั้งค่า FD / rw-head ถึง 0

"sync; sync; sync" มีการใช้งานจริงเท่านั้นผลิตโดยพวกเราที่ตัดฟันของเราด้วย Unix's ที่ใช้ TAPE นั่นคือแอปที่มีไฟล์ถูกติดตั้งที่ / var / spool ซึ่งเป็นที่เก็บข้อมูลที่ถูกที่สุดในเวลานั้น ;)

คู่มือการใช้งาน MIPS Risc / OS มีหน้านี้ ..


6

มีระบบ UNIX ที่มีอายุมากกว่าซึ่งปลอดภัยกว่าในการซิงค์มากกว่าหนึ่งครั้ง แต่ไม่ใช่ทั้งหมดในบรรทัดคำสั่งเดียวว่า "sync; sync; sync" ในช่วงกลางยุค 80 สิ่งนี้ก็กลั่นไปที่:

เมื่อคุณปิดระบบคุณจะซิงค์สามครั้ง ไม่มากไม่น้อย. สามจะเป็นจำนวนการซิงค์และจำนวนการซิงค์จะเป็นสาม ท่านจะไม่ทำการซิงค์สี่ครั้งหรือทำการซิงค์สองครั้งยกเว้นว่าท่านจะทำการซิงค์เป็นครั้งที่สามอีกครั้ง ...

ฉันไม่รู้จริงๆว่ามาจากไหนสามครั้งยกเว้นว่ามันสนุก แต่คำว่าบนถนนจะทำมันสองครั้ง ไม่เป็น "ซิงค์; ซิงค์" แต่แยกเป็นสองบรรทัดบนเชลล์

ย้อนกลับไปในสมัยก่อนพูดว่า V7 UNIX การซ่อมแซมระบบไฟล์ไม่ค่อยสนุกเท่าไหร่ คุณต้องทำด้วยมือรู้มากเกี่ยวกับวิธีการทำงานของระบบไฟล์และลักษณะนิสัยของโปรแกรมเช่น dcheck, ncheck และ icheck fsck ถ้าคุณมีมันไม่ใช่สิ่งที่คุณจะไว้ใจเสมอไป

นี่เริ่มเป็นเสียงเหมือน "เราเดินผ่านหิมะขึ้นเขาทั้งสองทาง" เราไม่มีคำสั่งแฟนซีเช่นรีบูตหรือปิดระบบ เมื่อคุณต้องการรีบูตระบบคุณทำการซิงค์ระบบไฟล์ด้วยการซิงค์จากนั้นกด Ctrl-P บนคอนโซลเพื่อหยุดการทำงาน

เมื่อคำสั่ง sync ออกแล้วเคอร์เนลได้กำหนดเวลาการซิงค์ แต่ไม่ใช่บัฟเฟอร์ทั้งหมด (รวมถึง superblock ระบบไฟล์ที่สำคัญทั้งหมด) ซึ่งจำเป็นต้องทำกับดิสก์ ดังนั้นมันจึงค่อนข้างง่ายที่จะทำการซิงค์และหยุดสิ่งต่าง ๆ ก่อนที่มันจะปลอดภัย

การทำข้อมูลให้ตรงกันอีกครั้งเป็นเรื่องง่ายที่จะทำใช้เวลาและมีการอุทธรณ์ที่ใช้งานง่ายโดยไม่ต้องเข้าใจทุกอย่างหรือจัดการกับคำแนะนำที่คลุมเครือเช่น "นับถึง 10" หรืออะไรทำนองนั้น

มีแม้แต่ส่วน BUG ในหน้า V7 สำหรับคนที่updateพูดด้วย:

ด้วยการรันการอัปเดตหาก CPU หยุดทำงานเช่นเดียวกับการซิงค์จะดำเนินการระบบไฟล์อาจเสียหายได้ นี่เป็นบางส่วนเนื่องจากฮาร์ดแวร์ DEC ที่เขียนเลขศูนย์เมื่อ NPR ร้องขอล้มเหลว การแก้ไขจะมีการซิงค์ (1) เพิ่มเวลาของระบบชั่วคราวอย่างน้อย 30 วินาทีเพื่อทริกเกอร์การดำเนินการอัพเดต สิ่งนี้จะให้ 30 วินาทีสง่างามเพื่อหยุด CPU

(ซึ่งโดยวิธีการเป็นสิ่งสุดท้ายในเล่ม 1 ของคู่มือ V7)

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

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


ฟังดูเหมือนว่าฉันเรียนรู้ ... แต่มันเป็นเพียงแค่วูดูหรือมีเหตุผลอะไรบ้าง บางคำตอบอื่น ๆ ให้คำแนะนำที่ดีเกี่ยวกับวิธีการที่นิสัยนี้อาจก่อตัวขึ้นในหมู่พวกเราดูแลระบบ
Josh

@ Josh เหตุผลที่ได้รับ "เมื่อคำสั่ง sync ออกแล้วเคอร์เนลได้กำหนดการซิงค์ แต่ไม่ใช่บัฟเฟอร์ทั้งหมด (รวมถึง superblock ระบบไฟล์ที่สำคัญทั้งหมด) จำเป็นต้องทำไว้ในดิสก์" ดูเพิ่มเติมที่: "ตามข้อกำหนดมาตรฐาน (เช่น POSIX.1-2001), sync () กำหนดเวลาการเขียน แต่อาจกลับมาก่อนการเขียนจริงจะเสร็จสิ้น" man7.org/linux/man-pages/man2/sync.2.html
sourcejedi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.