จำเป็นต้องทำการซิงค์ (8) ก่อนปิด linux หรือไม่


19

ฉันยังเห็นคนแนะนำให้ใช้sync; sync; sync; sleep 30; haltคาถาเมื่อพูดถึงการปิดหรือรีบูตลินุกซ์

ฉันใช้งาน Linux มาตั้งแต่เริ่มต้นและแม้ว่านี่เป็นขั้นตอนที่แนะนำใน BSD 4.2 / 4.3 และ SunOS 4 วันฉันจำไม่ได้ว่าฉันต้องทำอย่างนั้นอย่างน้อยสิบปีที่ผ่านมาในระหว่างที่ฉันอาจ ผ่านการปิดระบบ / รีบูตของ Linux อาจนับพันครั้ง

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

วันนี้โดยไม่ต้องค้นหารหัสที่เกี่ยวข้องในแหล่งเคอร์เนล (ขุดผ่านhttp://lxr.linux.noและ google) ฉันสงสัยว่าเคอร์เนลนั้นฉลาดพอที่จะถอนการติดตั้งแม้ระบบไฟล์รูทและระบบไฟล์นั้นฉลาดพอ อย่างมีประสิทธิภาพจะซิงค์ (2) ก่อนที่จะ unmounting ตัวเองในช่วงปกติshutdown/ /rebootpoweorff

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

ฉันไม่เคยทำsyncขั้นตอนก่อนที่จะถอดอุปกรณ์ที่ถอดออกได้และไม่เคยประสบปัญหา

อีกตัวอย่างหนึ่ง - Xen อนุญาตให้ DomU ส่งshutdownคำสั่งจาก Dom0 ซึ่งถือว่าเป็น "การปิดระบบใหม่ทั้งหมด" โดยไม่มีใครเข้าสู่ระบบและพิมพ์เวทมนตร์sync; sync; syncก่อน

ฉันถูกหรือฉันโชคดีที่มีการปิดระบบหลายพันครั้งหรือไม่


สิ่งที่เกี่ยวกับการเมาท์ระบบไฟล์แบบอ่านอย่างเดียวว่าอ่าน / เขียน? ฉันติดตั้ง rootfs แบบอ่านอย่างเดียวและฉันติดตั้งใหม่เป็นอ่าน / เขียนด้วยคำสั่งนี้: mount -o remount, rw / และเมื่อฉันเปลี่ยน rootfs ฉันจะเรียกใช้ mount -o remount, ro / แต่ฉันเห็นปัญหาบางอย่างเมื่อฉันตรวจสอบ fs ด้วย fsck คำสั่งที่สองเรียก SYNC ก่อนทำการติดตั้งแบบอ่านอย่างเดียวหรือไม่?

คำตอบ:


18

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

BSD และ SunOS 4 ไม่ใช่ระบบปฏิบัติการ SYSVr4 ซึ่งเป็นสาเหตุที่แตกต่างกัน Solaris (SunOS 5) คือ SYSVr4 และ Linux เลือกบิตของมาตรฐาน SYSVr4 ที่ต้องการใช้

การใช้ halt นั้นเป็นวิธีที่ไม่ดีในการทำบน UNIX ส่วนใหญ่ (Linux เป็นหนึ่งในข้อยกเว้น) เนื่องจากมันไม่ได้ทำงานผ่านสคริปต์ init เพื่อทำสิ่งต่าง ๆ เช่นการหยุดกระบวนการและการถอดดิสก์ - เพียงแค่หยุดโปรเซสเซอร์

หากคุณสามารถรับประกันได้ว่าคุณจะไม่มีวันเคยใช้ระบบยูนิกซ์ชนิดใดก็ได้กว่า Linux คุณสามารถใช้ต่อไปได้halt- หากมีโอกาสที่คุณจะใช้งานยูนิกซ์อื่น ๆ คุณควรแนะนำให้ใช้นิสัยinit _runlevel_หรือshutdown.

shutdownคำสั่งจริงบอกinitขั้นตอนการเปลี่ยนแปลงวิ่งระดับระดับการทำงาน - ในการทำเช่น init แล้วดำเนินการเรียกใช้แต่ละ K * สคริปต์ init และ S * สคริปต์ init เกี่ยวข้องกับระดับการทำงานว่า หนึ่งในสคริปต์ในระดับรัน 0 ทำการ unmounting ของระบบไฟล์

บน Linux haltคำสั่งเพียงแค่เรียกshutdownคำสั่งเว้นแต่ระดับการทำงานที่มีอยู่แล้ว 0 (ปิด) หรือ 6 (รีบูต) อยู่แล้ว ; ดังนั้นไม่มีการสูญเสีย

การเลิกเมานท์ระบบไฟล์โดยใช้umountจะเป็นการซิงค์ข้อมูลไปยังดิสก์ก่อนที่จะทำการ unmount

หากคุณใช้งานsync; sync; haltบน Linux คุณจะไม่เป็นไรกับสถานะระบบไฟล์เพราะนักพัฒนาได้รับรองว่าhaltทำในสิ่งที่ถูกต้อง อย่างไรก็ตามมันจะถูกต้องมากขึ้นที่จะใช้:shutdown now


ขอบคุณสำหรับคำอธิบาย เพียงชี้แจงสิ่งที่คุณพูด - "ผู้พัฒนามั่นใจว่าหยุดทำสิ่งที่ถูกต้อง" หมายความว่า "หยุด" เรียกว่า "ซิงค์" ด้วยหรือว่าจะเรียกใช้สคริปต์ init ที่เหมาะสมซึ่งเรียกว่า "ซิงค์" ในที่สุด สิ่งที่เกี่ยวกับการอยู่ในโหมดผู้ใช้คนเดียวและเพียงแค่เรียก "หยุด"? ฉันถูกต้องตามสมมติฐานของฉันหรือไม่ว่าเคอร์เนล Linux นั้นฉลาดพอที่จะไม่ปิดตัวลงอย่างกะทันหัน แต่จะยกเลิกการต่อเชื่อมระบบไฟล์ทั้งหมดก่อนที่จะปิดตัวลงหรือไม่
Amos Shapira

1
haltโทรshutdownที่โทรumountซึ่งทำการซิงค์
DaveG

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

7

การใช้การsyncโทรหลายครั้งเป็นการอนุญาตให้ระบบปฏิบัติการและดิสก์เวลาล้างข้อมูลคิวการเขียน "sync; sync; sync"ไม่ถือว่ามีประโยชน์ หนึ่งได้"sync<cr> sync<cr> sync<cr"และความล่าช้าในขณะที่ ASR-33 ของคุณได้รับคืนหรือขึ้นบรรทัดใหม่ให้ล่าช้าเพียงพอ หยุดเรียกการซิงค์เสมอ คำถามคือว่าจะมีเวลาเพียงพอที่จะล้างข้อมูลคิวก่อนที่จะถูกลบออกพลังงาน

โปสเตอร์ต้นฉบับsync; sleep 30นั้นสอดคล้องกับสิ่งที่ตั้งใจไว้มากขึ้น


7

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


5

คนที่คุณบอกเราทั้งหมดว่า "ซิงค์; ซิงค์; ซิงค์" ไม่มีจุดประสงค์เพื่อเปิดเผยอายุของคุณ

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

คำสั่ง 'sync; sync; sync' เป็นวิธีที่เครื่องเทปเก่าเหล่านี้สามารถบอกให้ย้อนกลับไปจนสุด (ก่อนปิดเครื่อง) - มีเฟิร์มแวร์บนเครื่องที่จะได้รับการซิงค์ cmd (เช่นระบบไฟล์ที่ดีทั้งหมด do) และหากปฏิบัติตามคำสั่งบัฟเฟอร์การซิงค์อีกเกือบสองครั้งเทปไดร์ฟเองจะตีความสิ่งนี้ให้หมายความว่า "ย้อนกลับเทปและยกเลิกการต่อเชื่อม" ไม่มีวิธีใดที่จะบอกให้เทปไดรฟ์หมุนกลับได้นอกเหนือจากวิธีนี้และมันก็ติดอยู่ .. นิสัยนี้ก็ส่งผ่านไปยังคำว่าเมื่อฮาร์ดไดรฟ์มีให้ใช้มากขึ้น - เราผู้ประกอบการเก่าที่ดื้อรั้นไม่เพียง ) หน่วยความจำกล้ามเนื้อของเราคุณรู้! ฉันเชื่อว่ามันบรรลุสถานะคติชนในไม่ช้าหลังจากเทปกลายเป็นเรื่องธรรมดาน้อยลงและฮาร์ดไดรฟ์ก็มีให้ใช้มากขึ้น แต่มันก็ยังมีประโยชน์สำหรับพวกเราด้วยเทปไดรฟ์


3
เทปเป็นอุปกรณ์ตัวละคร "mount" ทำงานบนอุปกรณ์บล็อก ฉันเคยไปที่นั่น (ใช้งาน "การถ่ายโอนข้อมูล" ใน Vax 11/750 กับ BSD 4.2 ในช่วงกลางยุค 80) และไม่มีสิ่งเช่นนั้นและเรียกใช้ "ซิงค์" บนอุปกรณ์เทป เทปจะกรอย้อนอัตโนมัติหากคุณเปิดเป็นชื่ออุปกรณ์หนึ่งและอยู่ในตำแหน่งเดิมหากคุณเปิดด้วยชื่ออื่นและคุณสามารถส่งคำสั่งอย่างชัดเจนโดยใช้ "mt" หากคุณต้องการ
Amos Shapira
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.