Script backup lỡ "ăn" phải dấu sao và xóa sạch toàn bộ dữ liệu

Công nghệ18 tháng 5, 2026·3 phút đọc

Một câu chuyện cảnh tỉnh về việc để một lập trình viên trẻ viết mã hệ thống quan trọng mà không có sự giám sát. Một lỗi cú pháp nhỏ với dấu sao đã dẫn đến việc xóa sạch toàn bộ dữ liệu trên mainframe.

Script backup lỡ "ăn" phải dấu sao và xóa sạch toàn bộ dữ liệu

Chào mừng đến với buổi sáng thứ Hai, thời điểm The Register luôn đăng tải cột chuyện "Who, Me?" (Ai, Tôi ư?) — nơi chúng tôi chia sẻ những câu chuyện thú nhận từ độc giả về những sai lầm trong sự nghiệp, và cách họ thoát khỏi tình huống khó xử mà không ảnh hưởng đến công việc.

Tuần này, chúng ta sẽ gặp một độc giả mà chúng ta gọi giả danh là "Miller". Ông chia sẻ rằng khi mới 21 tuổi, mình đã được giao nhiệm vụ quản lý một mainframe tạo ra máy ảo (virtual machine) và đĩa ảo đi kèm cho từng người dùng.

Doanh nghiệp của Miller sẽ tắt các máy ảo này vào cuối ngày làm việc để giải phóng tài nguyên cho các công việc chạy qua đêm. Vì vậy, ông đã viết một quy trình dọn dẹp để loại bỏ các ổ đĩa này và sao lưu nội dung của chúng.

Câu chuyện diễn ra vào năm 1981, một thời điểm mà mã nguồn do một người 21 tuổi viết có thể được đưa vào môi trường sản xuất (production) mà không cần nhiều sự kiểm duyệt khắt khe như ngày nay.

Sự cố được phát hiện lúc 3 giờ sáng, khi các nhân viên vận hành qua đêm chạy mã dọn dẹp của Miller và nó thông báo lỗi "file not found" (không tìm thấy tệp).

Miller đã dành cả ngày thứ Bảy để tìm ra nguyên nhân. Vấn đề bắt nguồn từ việc mainframe gán một chữ cái cho mỗi ổ đĩa người dùng, với A-Z là các nhãn khả dụng.

"Quy trình sẽ gắn vào tất cả các ổ đĩa của người dùng và sao lưu chúng vào một ổ đĩa tạm," Miller giải thích. "Nhưng bạn không bao giờ biết trước hệ thống sẽ gán chữ cái nào cho ổ đĩa tạm. Vì vậy, tôi đã viết một quy trình để gắn nó và bắt lấy chữ cái đó."

Cách tiếp cận này hoạt động tốt cho đến khi nó không còn nữa — bởi vì vào ngày hôm đó, công ty của Miller đã cấp tài khoản mainframe cho một người dùng khác. Và ổ đĩa ảo của người dùng này khiến mainframe đã sử dụng hết toàn bộ bảng chữ cái cho các đĩa dữ liệu.

"Lời gọi tạo đĩa tạm thất bại và quy trình của tôi đã trả về một dấu sao thay vì mã lỗi," Miller thú nhận.

Sau đó, quy trình chạy lệnh xóa, nhưng thay vì chỉ định một chữ cái ổ đĩa cụ thể để hủy, nó đã áp dụng dấu sao đó và xóa mọi thứ.

"Mọi tệp, toàn bộ dữ liệu và tất cả mã nguồn," Miller thừa nhận.

"Tôi đã tự viết toàn bộ mã nguồn đó, rất lâu trước khi có các bài đánh giá ngang hàng (peer reviews) hay DevOps hay bất kỳ biện pháp kiểm soát nào khác, nên mọi trách nhiệm đều thuộc về tôi," ông thêm vào.

The Register cho rằng điều đó hơi quá khắt khe — ai lại để một đứa trẻ viết mã quan trọng sống còn như thế chứ?

Miller mất một ngày để khôi phục dữ liệu, trong khi 20 người khác phải ngồi chờ đợi vô vọng cho đến khi ông hoàn thành công việc.

"Bài học khó khăn nhưng nó đã đi theo tôi hơn 40 năm qua!" Miller kết luận.

Bạn đã từng viết mã gây ra hậu quả nghiêm trọng? Hay bạn đã từng thất bại trong việc giám sát một nhân viên trẻ? Dù là trường hợp nào, hãy gửi email cho chúng tôi để chia sẻ câu chuyện của bạn vào một buổi sáng thứ Hai nào đó trong tương lai.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗