
ที่มาภาพ: 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



