* อะไร * ที่ได้รับการเมาเมื่อฉันฆ่า -9 หรือดึงพลังงาน?


13

ติดตั้ง

ฉันเป็นโปรแกรมเมอร์มาระยะหนึ่งแล้ว แต่ฉันก็ยังสับสนอยู่กับสิ่งที่อยู่ลึก ๆ

ตอนนี้ ฉันทราบดีว่าไม่ใช่ความคิดที่ดีเช่นกัน:

  1. kill -9 a โพรเซส (ไม่ดี)
  2. ดึงปลั๊กไฟบนคอมพิวเตอร์หรือเซิร์ฟเวอร์ที่กำลังทำงานตามปกติ (แย่กว่า)

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

สมมติว่าระบบที่ใช้ Apache 2, MySQL 5, PHP 5 และ Python 2.6.5 ผ่าน mod_wsgi

หมายเหตุ: ฉันสนใจ Mac OS X มากที่สุดที่นี่ แต่คำตอบที่เกี่ยวข้องกับระบบ UNIX จะช่วยฉันได้

ความกังวลของฉัน

ทุกครั้งที่ฉันต้องทำอย่างใดอย่างหนึ่งโดยเฉพาะอย่างยิ่งที่สองฉันกังวลมากในช่วงระยะเวลาหนึ่งที่มีบางอย่างผิดปกติ ไฟล์บางไฟล์อาจเสียหาย - ใครจะรู้ว่าไฟล์ใดบ้าง มีคอมพิวเตอร์มากกว่า 1,000,000 ไฟล์

ฉันมักจะใช้ OS X ดังนั้นฉันจะเรียกใช้การดำเนินการ "ตรวจสอบดิสก์" ผ่าน Disk Utility มันจะรายงานปัญหาใด ๆ แต่ฉันยังคงกังวลเกี่ยวกับเรื่องนี้

จะเกิดอะไรขึ้นถ้าไฟล์การกำหนดค่าบางอย่างเกิดความผิดพลาด หรือแย่กว่านั้นคือถ้าไฟล์ไบนารีที่ใดที่หนึ่งเสียหาย หรือไฟล์สคริปต์บางแห่งเสียหายในขณะนี้ เกิดอะไรขึ้นถ้าฮาร์ดแวร์เสียหาย

ถ้าฉันไม่ทราบเกี่ยวกับเรื่องนี้จนถึงเดือนถัดไปในสถานการณ์ที่สำคัญเมื่อความเสียหายหรือความเสียหายทำให้เกิดภัยพิบัติ

หรือถ้าข้อมูลที่มีค่าสูญหายไปแล้วล่ะ

ความหวังของฉัน

ความหวังของฉันคือความกังวลและความกังวลเหล่านี้ไม่มีมูลความจริง ท้ายที่สุดหลังจากทำสิ่งนี้มาหลายครั้งแล้วก็ยังไม่มีอะไรเลวร้ายเกิดขึ้นเลย ที่แย่ที่สุดคือฉันต้องซ่อมแซมตาราง MySQL บางตัว แต่ฉันดูเหมือนจะไม่สูญเสียข้อมูลใด ๆ

แต่ถ้าความกังวลของฉันไม่ได้ไม่มีมูลความจริงและความเสียหายที่แท้จริงอาจเกิดขึ้นได้ทั้งในสถานการณ์ที่ 1 หรือ 2 ความหวังของฉันคือว่ามีวิธีในการตรวจจับและป้องกันมัน

คำถามของฉัน

อาจเป็นเพราะระบบปฏิบัติการที่ทันสมัยได้รับการออกแบบเพื่อให้แน่ใจว่าไม่มีอะไรหายไปในสถานการณ์เหล่านี้? อาจเป็นเพราะซอฟต์แวร์ที่ทันสมัยถูกออกแบบมาเพื่อให้แน่ใจว่าไม่มีอะไรหายไป? แล้วการออกแบบฮาร์ดแวร์ที่ทันสมัยล่ะ มีมาตรการอะไรบ้างเมื่อคุณดึงปลั๊กไฟ

คำถามของฉันคือสำหรับทั้งสองสถานการณ์เหล่านี้สิ่งที่ว่าสามารถไปผิดและสิ่งที่ขั้นตอนที่ควรจะได้รับการแก้ไขหรือไม่

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

สิ่งที่เกี่ยวกับความเสียหายของไฟล์สุ่มซ่อนอยู่ที่ไหนสักแห่งในป่าขนาดใหญ่ของไฟล์บนฮาร์ดไดรฟ์ของฉัน

แล้วความเสียหายของฮาร์ดแวร์ล่ะ?

สิ่งที่จะช่วยฉันได้มากที่สุด

  1. คำอธิบายโดยละเอียดเกี่ยวกับสิ่งที่เกิดขึ้นภายในเมื่อคุณฆ่ากระบวนการ -9 หรือดึงพลังงานบนทั้งระบบ (ดูเหมือนว่าจะเกิดขึ้นทันที แต่บางคนสามารถทำให้ฉันช้าลงได้ไหม)

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

  3. คำอธิบายของมาตรการที่มีอยู่ในฮาร์ดแวร์สมัยใหม่ระบบปฏิบัติการและซอฟต์แวร์เพื่อป้องกันความเสียหายหรือความเสียหายเมื่อเกิดสถานการณ์เหล่านี้ (เพื่อปลอบฉัน)

  4. คำแนะนำสำหรับสิ่งที่ต้องทำหลังจาก kill -9 หรือ power pull นอกเหนือจาก "การตรวจสอบดิสก์" เพื่อให้แน่ใจว่าไม่มีสิ่งใดเสียหายหรือเสียหายบนไดรฟ์

  5. มาตรการที่สามารถนำมาใช้เพื่อเสริมการตั้งค่าคอมพิวเตอร์เพื่อให้บางสิ่งบางอย่างต้องถูกฆ่าหรือต้องดึงพลังงานความเสียหายที่อาจเกิดขึ้นจะลดลง

  6. ข้อมูลบางอย่างเกี่ยวกับไฟล์ไบนารี - ไม่เป็นความจริงหรือที่ไฟล์ apache binary หรือบางไลบรารีอาจมีการสุ่มไบต์หรือสองไฟล์เสียหายกลางซึ่งจะไม่ออกมาและทำให้เกิดปัญหาจนกระทั่งในภายหลัง ฉันจะมั่นใจได้อย่างไรว่าสิ่งนี้ไม่ได้เกิดขึ้นจากการดึงพลังหรือการฆ่า?

ขอบคุณมาก!


กระบวนการใดที่คุณส่ง kill -9 คุณพูดถึง 'Apache 2, MySQL 5, PHP 5 และ Python 2.6.5 ผ่าน mod_wsgi' คุณกำลังฆ่าสิ่งเหล่านี้ การรู้ว่าคุณกำลังฆ่าอะไรจะอนุญาตให้มีการตอบสนองโดยตรงต่อความหมายของการทำเช่นนั้น นอกจากนี้สิ่งที่เกิดขึ้นจริงจะทำให้คุณต้องการฆ่ากระบวนการ รู้สิ่งนี้และอาจสามารถระบุสาเหตุที่แท้จริงของปัญหาของคุณได้มากกว่าที่คุณจะเข้าใจถึงผลกระทบของวิธีการใช้กำลังดุร้ายเพื่อแก้ไข BTW บน MacOS X สำหรับเครื่องจักรที่ทันสมัยกดปุ่มเปิดปิดค้างไว้ 10 วินาทีแทนที่จะดึงพลังงานก็โหดร้ายน้อยกว่า
Graham Dumpleton

ฉันไม่รู้เกี่ยวกับ kill -9 แต่ถ้าคุณมีแหล่งจ่ายไฟสำรองบางอย่างฉันคิดว่ามันค่อนข้างปลอดภัยที่จะบอกว่าทุกอย่างถูกฆ่าเมื่อคุณดึงปลั๊กไฟ
John Gardeniers

คำตอบ:


9

การดึงพลังงานทำให้ทุกอย่างหยุดบินโดยไม่มีการเตือนล่วงหน้า ฆ่า -9 มีผลเช่นเดียวกันกับกระบวนการเดียวอย่างแข็งขันยุติด้วยSIGKILL

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

ไฟล์ชั่วคราวใน / tmp จะหายไปโดยอัตโนมัติหากไฟล์เหล่านั้นอยู่ใน tmpfs แต่คุณยังอาจมีไฟล์ล็อคเฉพาะแอปพลิเคชันที่วางไว้เพื่อลบเช่นล็อคและ. parentlock สำหรับ firefox

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

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

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

ใช่สองสามบิตอาจเสียหายในระบบเลขฐานสอง แต่ฉันไม่ต้องกังวลกับฮาร์ดแวร์ที่ทันสมัยมากนัก หากคุณหวาดระแวงจริงๆคุณสามารถตรวจสอบสุขภาพของดิสก์และ RAID ด้วยเครื่องมือที่เหมาะสม แต่คุณควรทำเช่นนั้น ทำการสำรองข้อมูลปกติและรับ Uninterruptible Power Supply


5

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

1 ฆ่า -9

POSIX SIGKILL และขึ้นอยู่กับการใช้งาน กระบวนการที่รับสัญญาณนี้จะไม่ได้รับโอกาสในการจัดการมัน

1 ปิดเครื่อง

ขึ้นอยู่กับฮาร์ดแวร์ หัวจอดรถอัตโนมัติภายใต้แรงขับของไดรฟ์และทุกอย่างในแคชการเขียนของคุณจะสูญเสียการรีเฟรช DRAM และสลายตัวไปสู่ความเสียหายที่แก้ไขไม่ได้ภายในไม่กี่วินาที สิ่งเดียวกันนี้เกิดขึ้นกับหน่วยความจำระบบ, แคช CPU, การลงทะเบียน ฯลฯ

จาก wdc.com (google: site: wdc.com ที่จอดรถป้องกันศีรษะ)

พลังงานสูญเสีย: ฮาร์ดไดรฟ์ถูกรีเซ็ต หัวจอดอยู่ในโซนลงจอดโดยใช้พลังงานแกนหมุน มอเตอร์แกนหมุนหยุดทำงาน

2 - มีอะไรผิดพลาด

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

3 - การตอบโต้

ดูด้านบนสำหรับสิ่งที่ดิสก์ทำ

ค้นหาระบบไฟล์ที่ถูกเจอร์นัลโดยปกติแล้วตอนนี้: http://en.wikipedia.org/wiki/Journaling_file_system

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

Windows เก็บสำเนาของรีจิสทรี (มันสำคัญเกินไป) Wikipedia: "Windows 2000 เก็บสำเนาสำรองของกลุ่มรีจิสทรี (.ALT) และพยายามสลับไปใช้เมื่อตรวจพบความเสียหาย" (ฉันยังไม่ได้ทำการสนับสนุนเทคโนโลยีหนักตั้งแต่นั้นมา Win2k ดังนั้นฉันไม่แน่ใจว่ากลไกใหม่ของ MS คืออะไร)

4 - จะทำอย่างไร

ตามลำดับของความยากลำบาก (ง่าย - ยาก)

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

การสำรองข้อมูลเป็นคำตอบที่เหมาะสมที่สุดการสำรองข้อมูลที่ดีควรให้คุณกลับไปใช้เวอร์ชันที่แก้ไขก่อนหน้านี้

5

พลังงานที่ซ้ำซ้อน? จบการศึกษาของผู้ใช้หรือไม่ วางเทปและกระดาษแข็งบนปุ่มเปิดปิดหรือไม่

6

ไม่มีฮาร์ดแวร์ทำงานผิดปกติไดรเวอร์ดิสก์ที่เสียหายเคอร์เนลระบบปฏิบัติการที่ขาดการขาด checksums หรือล่มระหว่างการอัพเกรดไบนารีและไลบรารีจะไม่เปิดอ่าน - เขียนเพื่อไม่ให้เกิดความเสียหาย มันเกิดขึ้น แต่มันหายาก


+1 สำหรับจุด # 6
Bigbio2002

4

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

ระบบไฟล์ทุกวันนี้แข็งแกร่งมาก สิ่งต่างๆเช่น XFS, JFS, ext3 และ ext4 ล้วนมีวารสารและสิ่งอื่น ๆ เพื่อให้เมทาดาทาของระบบไฟล์ยังคงเหมือนเดิม

ไบนารีเช่นอาปาเช่และตัวเองอื่น ๆ ไม่น่าจะได้รับความเสียหายจากการสูญเสียพลังงานอย่างกะทันหันหรือโดยการฆ่าระบบเนื่องจากพวกเขาอยู่ในหน่วยความจำหรือกำลังอ่านอยู่ หากพวกเขากำลังอ่านจาก (เช่น Apache HTTP กำลังเริ่มเป็นต้น) มันเป็นไปได้ที่ไฟกระชากอาจทำให้ไบนารีเสียหาย แต่ดูเหมือนไม่น่าเป็นไปได้

ฉันเป็นคน Mac Mini ดูเหมือนว่าจะชอบปิดเย็น (ไม่ว่ากี่ครั้งที่ฉันบอกพวกเขา ..... ) และมันก็ดำเนินต่อไป

ส่วนใหญ่ตราบใดที่คุณไม่พึ่งพาการฆ่า -9 หรือการปิดเครื่องเป็นประจำฉันจะไม่กังวลมากเกินไป สิ่งที่เลวร้ายยิ่งกว่าในอดีต; ฉันกังวลมากขึ้นเกี่ยวกับโซลาริส 2.6 มากกว่าโซลาริสที่ 10 (เป็นต้น)



3

"kill -9" จะไม่ซิงค์การดำเนินการ IO ที่ค้างอยู่ ปัญหานี้มักจะไม่ใช่ปัญหา แต่ถ้าระบบมีภาระการใช้งาน IO หนักคุณอาจสูญเสียข้อมูล

มันมีปัญหามากขึ้นกับเซิร์ฟเวอร์ที่ตัวควบคุม RAID (ไม่มีแคชแบตเตอรี่สำรอง) อาจแคชเขียนและสูญเสียข้อมูลของคุณ

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

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