สคริปต์ Batch ทำความสะอาดข้อมูล Exchange แต่วางคำสั่งลบโฟลเดอร์ System32 ของ Windows NT 4 ทำให้เซิร์ฟเวอร์หยุดทำงาน

ที่มาภาพ: The Register

Software-อ่าน 6 นาทีThe Register

สคริปต์ Batch ทำความสะอาดข้อมูล Exchange แต่วางคำสั่งลบโฟลเดอร์ System32 ของ Windows NT 4 ทำให้เซิร์ฟเวอร์หยุดทำงาน

⚡ สรุป 30 วิ

ผู้ดูแลระบบเขียนไฟล์ batch เพื่อลดขนาดฐานข้อมูล Exchange และลบไฟล์ชั่วคราว แต่คำสั่ง DEL ไม่ระบุพาธทำให้ลบโฟลเดอร์ System32 ของ Windows NT 4…

Lead: ผู้อ่าน “Pascal” จากบริษัทที่เพิ่งเปิดใช้ Microsoft Exchange Server** รุ่นแรกสำหรับ 600 กล่องเมล ได้เขียนไฟล์ batch เพื่อทำการบีบอัดฐานข้อมูลและทำความสะอาดระบบโดยอัตโนมัติ แต่สคริปต์ดังกล่าวกลับลบโฟลเดอร์สำคัญของ Windows NT 4 ทำให้เซิร์ฟเวอร์หยุดทำงานอย่างถาวร การเกิดเหตุนี้เป็นกรณีศึกษาเรื่องความเสี่ยงของการใช้คำสั่งไฟล์แบบไม่มีการระบุพาธชัดเจนในสภาพแวดล้อมไอทีที่สำคัญ

Overview

Pascal รายงานต่อ The Register ว่าตอนแรกผู้จัดการไอทีต้องการให้ทีมตรวจสอบประสิทธิภาพของ Information Store ของ Exchange เป็นประจำ และเสนอให้นำเซิร์ฟเวอร์ออกจากเครือข่ายสัปดาห์ละครั้งเพื่อทำการ defragment ข้อมูล การทำเช่นนี้ถือเป็นแนวทางที่ได้รับความนิยมในการรักษาขนาดฐานข้อมูลให้คงที่

ด้วยเหตุผลเหล่านั้น Pascal จึงสร้างไฟล์ batch ที่ทำหน้าที่หยุดบริการ Information Store, รันคำสั่ง `eseutil /d` เพื่อลดขนาดไฟล์ฐานข้อมูล, ลบไฟล์ชั่วคราวที่เกิดขึ้นระหว่างกระบวนการ, แล้วรีสตาร์ทเซอร์วิสอีกครั้ง เขาทดสอบสคริปต์บนเครื่องทดสอบและเห็นผลลัพธ์ว่าไฟล์ฐานข้อมูลลดลงจริง ทำให้เขาตัดสินใจตั้งเวลาให้สคริปต์ทำงานอัตโนมัติทุกคืนวันศุกร์

What Happened

ในคืนสุดท้ายของการรันสคริปต์ Pascal ได้รับแจ้งจากผู้ใช้หลายคนว่า Exchange ไม่สามารถเข้าถึงได้ เมื่อกลับมาที่สำนักงานเขาพบว่าเซิร์ฟเวอร์ Windows NT 4 แสดงอาการทำงานผิดพลาดอย่างหนัก ระบบไฟล์หลักในโฟลเดอร์ System32 ถูกลบไปส่วนใหญ่ ทำให้บริการพื้นฐานของระบบปฏิบัติการไม่สามารถทำงานต่อได้

Pascal พบว่าคำสั่ง `DEL ` ที่เขาใส่ไว้เพื่อทำความสะอาดไฟล์ชั่วคราวไม่ได้ระบุพาธโฟลเดอร์ใด ๆ ระบบจึงทำการรันคำสั่งจากไดเรกทอรีปัจจุบันซึ่งในกรณีนี้คือ `C:\Windows\System32` การลบไฟล์ทั้งหมดภายใน System32 ทำให้ระบบ Windows NT 4 เสียหายอย่างถาวรและไม่สามารถบูตขึ้นมาใหม่ได้

Technical Details

สคริปต์ batch ของ Pascal ประกอบด้วยขั้นตอนหลักดังต่อไปนี้:

  • หยุดบริการ `net stop MSExchangeIS` เพื่อปิดการทำงานของ Information Store
  • บีบอัดฐานข้อมูล ด้วยคำสั่ง `eseutil /d "C:\Program Files\Microsoft\Exchange Server\v14\Mailbox\<dbname>.edb"`
  • ลบไฟล์ชั่วคราว ใช้ `DEL ` (โดยไม่ได้ระบุโฟลเดอร์) เพื่อทำความสะอาดไฟล์ที่สร้างขึ้นในขั้นตอนก่อนหน้า
  • เริ่มบริการใหม่ `net start MSExchangeIS` เพื่อให้ Exchange กลับมาทำงาน

การละเลยการกำหนดพาธให้กับคำสั่ง `DEL` เป็นจุดบกพร่องหลัก เนื่องจากเมื่อ batch file ถูกเรียกใช้โดยระบบอัตโนมัติ (เช่น Task Scheduler) มักทำงานในโฟลเดอร์ System32 ซึ่งเป็นที่ตั้งของไฟล์สำคัญหลายร้อยไฟล์

Lessons Learned

เหตุการณ์นี้สะท้อนให้เห็นถึงความสำคัญของการตรวจสอบและทดสอบสคริปต์อย่างละเอียดก่อนนำไปใช้จริง โดยเฉพาะอย่างยิ่งในสภาพแวดล้อมเซิร์ฟเวอร์ที่มีความอ่อนไหวต่อการเปลี่ยนแปลงไฟล์ระบบ การระบุพาธแบบเต็ม (`C:\Temp\`) หรือการใช้ตัวกรองไฟล์เฉพาะ (`DEL *.tmp`) สามารถลดโอกาสเกิดข้อผิดพลาดได้อย่างมาก

อีกประเด็นหนึ่งคือควรจัดให้มี ขั้นตอนสำรองข้อมูล (backup) ที่เป็นอัตโนมัติและตรวจสอบความสมบูรณ์ของแบ็กอัพก่อนทำการบีบอัดหรือทำความสะอาดระบบ การไม่มีแผนกู้คืนที่ชัดเจนทำให้ Pascal ต้องใช้เวลาตลอดสุดสัปดาห์เพื่อ rebuild เซิร์ฟเวอร์และกู้คืนข้อมูลจากสำเนาสำรอง

Impact

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

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

Summary

ไฟล์ batch ที่ออกแบบเพื่อบีบอัดฐานข้อมูล Exchange ของ Pascal กลับทำให้ระบบ Windows NT 4 เสียหายโดยการลบโฟลเดอร์ System32 เนื่องจากใช้คำสั่ง `DEL ` โดยไม่มีพาธที่ชัดเจน เหตุการณ์นี้ย้ำถึงความจำเป็นในการทดสอบสคริปต์อย่างละเอียดและมีแผนสำรองข้อมูลเพื่อป้องกันการสูญเสียบริการในองค์กร.

แชร์บทความนี้:

ชอบบทความแบบนี้?

สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม

แหล่งข่าวต้นฉบับ

ชื่อต้นฉบับ
Batch file automated a clean-up job, then fouled itself by deleting the wrong directory
ผู้เขียน
Unknown
แหล่ง
The Register
วันที่เผยแพร่
24 สิงหาคม 2569 เวลา 13:31

Related

บทความที่เกี่ยวข้อง

Samsung Modes & Routines – แอปศูนย์อัตโนมัติที่ดีกว่า Google HomeSoftware
4 สิงหาคม 2569 เวลา 02:30

Samsung Modes & Routines – แอปศูนย์อัตโนมัติที่ดีกว่า Google Home

Samsung Modes และ Routines ให้การตั้งค่าโหมดและสูตรอัตโนมัติง่ายโดยไม่ต้องเขียนโค้ด รองรับ Bixby และ SmartThings ทำให้ครอบคลุมฟีเจอร์มากกว่า Google Home…

XDA Developers7 นาที
เปิดเผยความสามารถอัตโนมัติของ VS Code ผ่าน Task RunnerSoftware
12 มิถุนายน 2569 เวลา 20:30

เปิดเผยความสามารถอัตโนมัติของ VS Code ผ่าน Task Runner

หลายคนใช้ VS Code เพียงคอมไพล์ด้วย Ctrl + Shift + B แต่ไฟล์ tasks.json เปิดโอกาสให้กำหนดงานอัตโนมัติต่าง ๆ ได้อย่างยืดหยุ่น…

XDA Developers8 นาที
Task Scheduler ของ Windows มีศักยภาพสูง แต่ UI เก่า ทำให้การตั้งค่าที่ยากSoftware
-

Task Scheduler ของ Windows มีศักยภาพสูง แต่ UI เก่า ทำให้การตั้งค่าที่ยาก

Task Scheduler ของ Windows ให้ความสามารถอัตโนมัติระดับสูงในการกำหนดงานตามเวลาและเหตุการณ์ต่าง ๆ. แต่ UI…

XDA Developers6 นาที
สี่ปลั๊กอินสุดลับของ Jellyfin ที่ทำให้เซิร์ฟเวอร์ Self‑Hosted ทำงานเต็มประสิทธิภาพSoftware
-

สี่ปลั๊กอินสุดลับของ Jellyfin ที่ทำให้เซิร์ฟเวอร์ Self‑Hosted ทำงานเต็มประสิทธิภาพ

บทความจาก XDA‑Developers แนะนำปลั๊กอินสี่ตัวที่ช่วยปรับเมตาดาต้า จัดไฟล์อัตโนมัติ และแจ้งเตือนการอัปเดต ทำให้ Jellyfin รองรับคอลเลกชันขนาดใหญ่ได้อย่างราบรื่น…

XDA Developers6 นาที
คัดลอกลิงก์แล้ว!