AutoCAD – Bản vẽ

Không mở được file CAD: cứu lại 91% bản vẽ bằng RECOVER

Không mở được file CAD thì dùng RECOVER. Đo trên bản vẽ thật: sửa được 105 lỗi, nhưng 398 đối tượng biến mất mà không một dòng nào báo.

  • TS. Đỗ Quốc Hoàng
  • 14 phút đọc
Bản vẽ hỏng 64 byte: RECOVER sửa 105 lỗi nhưng 398 trong 4.686 đối tượng biến mất Ảnh: Sơ đồ của Viện Tin học Xây dựng

Bốn giờ chiều, hồ sơ phải nộp lúc năm giờ, và bản vẽ mặt bằng kết cấu không chịu mở. Cảm giác đầu tiên là mất trắng. Thật ra không mở được file CAD hiếm khi đồng nghĩa với mất bản vẽ, nhưng cũng hiếm khi cứu về nguyên vẹn như nhiều người tưởng.

Bài này làm một việc mà các hướng dẫn khác bỏ qua: cố tình phá một bản vẽ thật, cứu nó bằng RECOVER, rồi đếm xem còn lại bao nhiêu. Toàn bộ quy trình quản lý hồ sơ bản vẽ được dạy kỹ trong khoá AutoCAD cho xây dựng của Viện.

Ba câu hỏi khác nhau bị gộp làm một

Người dùng gõ tìm kiếm thì viết giống nhau, nhưng ba triệu chứng dưới đây có ba nguyên nhân hoàn toàn khác và ba cách chữa khác hẳn.

Triệu chứngNguyên nhân thường gặpViệc phải làm
Nháy đúp vào tệp, AutoCAD báo lỗi rồi thoátDữ liệu trong tệp hỏng thậtRECOVER
Mở ra bình thường, nhưng Ctrl + S không ănTệp bị khoá ghi, không phải hỏngSửa quyền ghi của tệp
Mở ra bình thường, nhưng không sửa được nét nàoLớp bị khoá, hoặc bản vẽ chỉ đọcMở khoá lớp, hoặc lưu sang tên mới

Câu "không mở được file CAD" vì thế nên được hỏi lại thành: nó không mở, hay nó mở mà không cho ghi. Nhầm nhóm là mất thời gian vô ích. Chạy RECOVER cho một tệp chỉ đọc thì chẳng sửa được gì, vì tệp ấy có hỏng đâu. Ngược lại, đổi quyền ghi cho một tệp thật sự hỏng cũng chẳng cứu được dòng dữ liệu nào.

Gọi RECOVER và AUDIT từ đâu

Bảng sau đọc từ chính tệp giao diện acad.cuix và tệp lệnh tắt acad.pgp của bản 2027 trên máy, chứ không chép từ tài liệu.

LệnhLệnh tắtVào từ menuLàm gì
RECOVERkhông cóFile → Drawing Utilities → RecoverSửa rồi mở một tệp hỏng
AUDITkhông cóFile → Drawing Utilities → AuditSoát lỗi bản vẽ đang mở
RECOVERALLkhông cóFile → Drawing Utilities → Recover drawing and xrefsCứu cả bản vẽ lẫn xref của nó
DRAWINGRECOVERYDRMFile → Drawing Utilities → Drawing Recovery ManagerBảng danh sách bản vẽ chờ cứu

Ba lệnh đầu không có lệnh tắt, đây là điểm khác biệt đáng nhớ so với hầu hết lệnh vẽ. Chỉ DRAWINGRECOVERY có lệnh tắt DRM.

Chạy AUDIT trên một bản vẽ lành, nhật ký của phần mềm ghi lại nguyên văn như sau.

Command: _.AUDIT
Fix any errors detected? [Yes/No] <N>: y
Auditing Header
Auditing Tables
Auditing Entities Pass 1
Pass 1 16600   objects audited
Auditing Entities Pass 2
Pass 2 16600   objects audited
Auditing Blocks
 523     Blocks audited
Auditing AcDsRecords
Total errors found 0 fixed 0
Erased 0 objects

Để ý dấu ngoặc nhọn <N> ở dòng thứ hai. Đó là giá trị mặc định, nghĩa là bấm Enter cho nhanh thì phần mềm soát mà không sửa gì cả. Muốn nó sửa thì phải gõ Y rồi mới Enter.

AutoCAD không mở được file DWG: cứu bằng RECOVER được bao nhiêu

Đây là phần mà không hướng dẫn tiếng Việt nào trả lời bằng con số.

Bản vẽ dùng để thử là một mặt bằng kết cấu thật, 674.660 byte, có 4.686 đối tượng trong Model. Chép ra hai bản giống hệt nhau. Bản thứ hai bị ghi đè 64 byte ở vị trí 303.597, tức khoảng giữa tệp. Rồi chạy RECOVER cho cả hai.

Chạy RECOVER trênLỗi tìm thấyLỗi đã sửaĐối tượng bị xoá
Bản còn nguyên110
Bản bị ghi đè 64 byte1051050

Hộp thoại phần mềm hiện ra sau khi cứu xong ghi đúng những dòng này.

Open Drawing - Damaged File
The drawing file was recovered.
Errors were found and fixed in the drawing. Invalid data might have been
changed or deleted, and some previously erased objects might have been restored.
Errors found:   105
Errors fixed:   105
Objects erased: 0

Đọc lướt thì yên tâm: sửa hết, không xoá đối tượng nào. Nhưng đếm lại số đối tượng trong bản vẽ vừa cứu thì ra chuyện khác hẳn.

Loại đối tượng trong ModelBản còn nguyênBản đã cứuMất
Đường thẳng2.1991.970229
Chữ một dòng1.1271.05869
Đa tuyến42337647
Khối chèn vào30728027
Mặt cắt vật liệu11710215
Kích thước thẳng48347310
Tổng4.6864.288398

398 đối tượng biến mất, tức 8,5% bản vẽ. Không một dòng nào báo, và hộp thoại vẫn ghi Objects erased: 0. Nói cách khác, con số ấy đếm số đối tượng bị xoá sau khi bản vẽ đã nạp xong, chứ không đếm phần phần mềm đọc không nổi nên bỏ qua ngay từ đầu.

Cứu bản vẽ hỏng được gì, mất gì Ảnh: Bản vẽ hỏng 64 byte: RECOVER sửa 105 lỗi nhưng 398 trong 4.686 đối tượng biến mất

Trang tài liệu của Autodesk về lệnh RECOVER nói thẳng điều này, chỉ có điều người đọc hay lướt qua: "Repairs and then opens a damaged drawing file. The program extracts as much data as it can from the damaged file."

Cụm as much data as it can mới là chỗ quan trọng. Lệnh không vá lại chỗ hỏng, nó rút ra được bao nhiêu thì rút.

Có một tin tốt thật sự trong phép đo. Toàn bộ phần khung của bản vẽ sống sót nguyên vẹn: 30 lớp còn đủ 30, 14 kiểu chữ còn đủ 14, 6 kiểu kích thước còn đủ 6, và cả hai layout đều còn. Thứ mất đi là hình vẽ rải rác, không phải thiết lập.

Sửa file CAD bị lỗi: thứ tự đúng và tệp .adt cho biết mất gì

Khi sửa file CAD bị lỗi, thứ tự dưới đây tiết kiệm được nhiều giờ dò tìm.

BướcLàm gìVì sao
1Chép tệp hỏng ra một bản dự phòngMọi bước sau đều có thể làm hỏng thêm
2Đặt AUDITCTL = 1Để có báo cáo lỗi bằng văn bản
3Chạy RECOVER trên bản chépĐây là lệnh duy nhất mở được tệp hỏng
4Chạy AUDIT, trả lời YQuét thêm một lượt trên bản đã nạp
5Chạy PURGE rồi lưu sang tên mớiĐừng ghi đè lên tệp gốc

Bước 2 là bước hầu như không ai làm, và nó chính là câu trả lời cho câu hỏi "mất những gì". Tài liệu Autodesk về lệnh AUDIT ghi: "If the AUDITCTL system variable is set to 1, a text file with an ADT file extension is created that describes the problem and the action taken."

Đặt AUDITCTL = 1 rồi cứu lại đúng bản vẽ hỏng ở trên, phần mềm sinh ra tệp t7.adt dài 1.117 dòng nằm cạnh bản vẽ. Mở đầu tệp ấy như sau.

Drawing: C:\t9\t7.dwg   Autodesk, Inc.   AutoCAD  AUDIT REPORT   Page 1
 Release: 26.0s (LMS Tech)   Microsoft Windows NT Version 10.0 (Intel64)

Reading handle 4239D object type AcDb2dVertex
        Error 13 (eUnknownHandle)
Reading handle 423B0 object type AcDb2dVertex
        Error 13 (eUnknownHandle)
...
Total errors found 105 fixed 105
Erased 0 objects

Tệp ghi rõ số hiệu và kiểu của từng đối tượng phần mềm đọc không nổi. Với AUDITCTL = 0 thì chạy y hệt như vậy không sinh ra tệp .adt nào. Lệnh PURGE và lệnh AUDIT dùng theo hướng dọn dẹp được nói kỹ hơn trong bài làm nhẹ bản vẽ CAD.

Một nguyên nhân khác cũng hay bị nhầm là bản vẽ lưu ở đời mới hơn phiên bản đang dùng. Trường hợp ấy tệp không hỏng chút nào, chỉ cần hạ đời, và cách làm nằm ở bài chuyển bản vẽ CAD về đời thấp.

File CAD bị khóa không save được: ba nguyên nhân thật

Nhóm triệu chứng thứ hai không liên quan gì đến hỏng hóc. Bản vẽ mở ra đẹp đẽ, sửa được, nhưng lưu thì không xong. Tình huống file CAD bị khóa không save được hầu như luôn rơi vào một trong ba nguyên nhân dưới đây.

Một, thuộc tính chỉ đọc của Windows. Đặt cờ chỉ đọc cho một tệp DWG rồi mở ra, thanh tiêu đề của phần mềm ghi thêm hai chữ Read Only sau tên bản vẽ, và thẻ bản vẽ hiện một hình ổ khoá nhỏ. Bấm lưu thì hiện hộp thoại.

AutoCAD Message
Drawing file is write protected.

Đây là dòng chính xác mà người gặp lỗi không lưu được bản vẽ CAD nhìn thấy. Cách chữa nằm ngoài phần mềm: nháy phải vào tệp trong Windows, vào Properties, bỏ dấu tích ở ô Read-only. Nếu tệp nằm trên ổ mạng mà bạn không có quyền ghi thì chỉ còn cách lưu sang chỗ khác bằng SAVEAS.

Hai, biến FILEDIA bị đặt về 0. Nhiều trang khuyên đặt lại FILEDIA = 1, và lời khuyên ấy đúng, nhưng lý do thì hay bị kể sai. FILEDIA = 0 không hề chặn việc lưu. Nó chỉ thay hộp thoại chọn tệp bằng một câu hỏi trên dòng lệnh.

Command: _.SAVEAS
Current file format: AutoCAD 2018 Drawing
Enter file format [R14(LT98&LT97)/2000(LT2000)/2004(LT2004)/2007(LT2007)/
2010(LT2010)/2013(LT2013)/2018(LT2018)/Standards/DXF/Template] <2018>:

Người dùng bấm Ctrl + S, không thấy hộp thoại quen thuộc hiện ra, nên tưởng máy treo. Thật ra phần mềm đang chờ trả lời ngay dưới màn hình. Gõ FILEDIA rồi nhập 1 là hộp thoại trở lại.

Ba, tệp đang nằm ở thư mục tạm. Mở thẳng bản vẽ từ tệp đính kèm trong thư điện tử hoặc từ tệp nén là rơi vào trường hợp này. Bản vẽ ở thư mục tạm của Windows, lưu thì được nhưng hôm sau tìm lại không thấy. Giải nén ra một thư mục thật trước khi mở.

Cách mở bản vẽ CAD bị khóa và chuyện tệp .dwl

Mở một bản vẽ lên, nhìn vào thư mục chứa nó sẽ thấy mọc thêm hai tệp nhỏ cùng tên.

TệpKích thước đo đượcChứa gì
mau-mbkc.dwg674.660 byteBản vẽ
mau-mbkc.dwl58 byteTên người và tên máy đang mở
mau-mbkc.dwl2208 byteCũng nội dung ấy, dạng XML

Mở tệp .dwl bằng Notepad thì thấy đúng ba dòng.

pc
DESKTOP-L2465T5
Sunday, September 20, 2026  8:23:15 PM

Tên tài khoản, tên máy, thời điểm mở. Đóng bản vẽ thì cả hai tệp tự biến mất. Đây là công dụng thật của chúng: khi bản vẽ dùng chung trên ổ mạng, tệp .dwl cho biết ai đang giữ nó, để bạn gọi điện cho đúng người.

Và đây là chỗ cần nói lại cho đúng. Rất nhiều hướng dẫn dạy rằng cách mở bản vẽ CAD bị khóa là xoá tệp .dwl đi. Thử trực tiếp trên máy: tạo tay một tệp .dwl ghi tên người khác trên một máy khác, đặt cạnh bản vẽ, rồi mở bản vẽ ấy lên. Kết quả là bản vẽ mở bình thường, ghi sửa thoải mái, không một lời cảnh báo, và phần mềm còn ghi đè luôn tệp .dwl ấy bằng tên máy của mình.

Nghĩa là tệp .dwl sót lại không khoá gì cả. Nó chỉ là mẩu giấy dán trên cửa. Khoá thật nằm ở chỗ khác: hệ điều hành giữ tệp khi một chương trình đang mở nó, và cờ chỉ đọc ở mục trước. Xoá .dwl không hại gì, nhưng cũng đừng trông chờ nó chữa được bệnh.

Ba tệp cứu bạn khi máy sập

Khi mất điện giữa chừng, thứ cứu bản vẽ không phải là lệnh nào cả, mà là mấy tệp phần mềm đã lặng lẽ để sẵn.

Tệp .bak. Lưu bản vẽ lần đầu thì chưa có gì. Lưu lần thứ hai mới sinh ra tệp .bak, và phép đo cho thấy nó nặng đúng 15.461 byte, bằng chằn chặn kích thước bản .dwg sau lần lưu thứ nhất. Nói cách khác, .bak là bản vẽ của lần lưu trước. Đổi đuôi .bak thành .dwg là mở được, nhưng bạn lùi lại một lần lưu.

Tệp .sv$. Phần mềm tự lưu mỗi 10 phút, theo biến SAVETIME, vào thư mục ghi ở biến SAVEFILEPATH. Trên máy thử, đó là C:\Users\pc\AppData\Local\Temp\, và tệp có tên kiểu mau-mbkc_1_1200_ca1ccebe.sv$. Chép nó ra chỗ khác, đổi đuôi thành .dwg, mở lên thì đủ cả 6.184 đối tượng, không thiếu một loại nào.

Có một cái bẫy nhỏ ở đây. Nếu không đổi đuôi mà mở thẳng tệp .sv$, phần mềm báo tệp không tồn tại, dù tệp nằm sờ sờ ở đó với đủ 709.527 byte.

File C:\t9\t6.sv$ is not found

Đổi đuôi là bắt buộc, không phải mẹo cho vui.

Bảng Drawing Recovery Manager. Sau một lần phần mềm thoát bất thường, gõ DRM để mở bảng này. Nó gom sẵn bản vẽ gốc, bản .bak và bản .sv$ của từng bản vẽ đang mở lúc sập, kèm thời điểm của mỗi bản, để bạn chọn bản mới nhất. Biến RECOVERYMODE trên máy thử đang ở giá trị 2, nghĩa là bảng này tự hiện lên sau sự cố.

Với bản vẽ có tham chiếu ngoài thì dùng RECOVERALL thay cho RECOVER, vì lệnh này cứu luôn các tệp xref đi kèm. Cách quản lý tham chiếu ngoài nằm ở bài xref trong CAD.

Năm điều hay nghe nhưng không đúng

Điều hay ngheĐo được gì
RECOVER cứu lại nguyên vẹn bản vẽCứu được 4.288 trên 4.686 đối tượng, mất 398
Hộp thoại ghi Objects erased: 0 nên không mất gìVẫn mất 8,5%, con số ấy không đếm phần đọc không nổi
Xoá tệp .dwl là mở được bản vẽ bị khoáTệp .dwl giả không hề chặn việc mở hay ghi
FILEDIA = 0 làm không lưu được bản vẽVẫn lưu được, chỉ là nó hỏi trên dòng lệnh
Mở thẳng tệp .sv$ cũng đượcPhần mềm báo is not found dù tệp vẫn còn đủ 709.527 byte

Câu hỏi thường gặp

Bản vẽ báo lỗi ngay khi mở, làm gì trước tiên?

Chép tệp ra một bản dự phòng đã, rồi mới chạy RECOVER trên bản chép. Với mọi trường hợp không mở được file CAD, đây luôn là bước đầu tiên, vì các bước sau đều có thể làm hỏng thêm.

Làm sao biết RECOVER đã làm mất những gì?

Đặt AUDITCTL = 1 trước khi cứu. Phần mềm sẽ để lại một tệp đuôi .adt cạnh bản vẽ, ghi số hiệu và kiểu của từng đối tượng nó đọc không nổi.

Thanh tiêu đề ghi Read Only, sửa thế nào?

Đóng bản vẽ, nháy phải vào tệp trong Windows, vào Properties rồi bỏ dấu tích ở ô Read-only. Nếu tệp nằm trên ổ mạng thì hỏi người quản trị, hoặc lưu sang chỗ bạn có quyền ghi.

Máy sập lúc chưa kịp lưu thì lấy lại bản vẽ ở đâu?

DRM để mở bảng Drawing Recovery Manager. Nếu bảng không có gì thì vào thư mục ghi ở biến SAVEFILEPATH, tìm tệp .sv$ cùng tên bản vẽ và đổi đuôi thành .dwg.

Cứu xong có nên lưu đè lên tệp cũ không?

Không. Lưu sang một tên mới, giữ nguyên tệp hỏng. Nếu sau này phát hiện thiếu hình, bạn còn tệp gốc để thử cách khác.

Bản vẽ có nhiều xref thì cứu thế nào?

Dùng RECOVERALL thay cho RECOVER. Lệnh này soát và sửa cả bản vẽ chính lẫn toàn bộ tệp tham chiếu ngoài mà nó gọi tới.

Về tác giả

TS. Đỗ Quốc Hoàng — Phó Viện trưởng Viện Tin học Xây dựng – Trường Đại học Xây dựng Hà Nội, chuyên gia lập trình phần mềm trong xây dựng