HocThuatSo.comHọc Thuật Số
Gửi thư
Dữ liệu FAIR và lưu trữ dài hạn

Mã băm kiểm toàn vẹn dữ liệu: phát hiện tệp lặng lẽ hỏng

Tạo mã băm SHA-256 cho từng tệp bằng lệnh có sẵn trên Windows, macOS, Linux, lưu thành bảng kê kèm bộ dữ liệu, rồi kiểm lại sau mỗi lần chép giữa các ổ để bắt tệp hỏng mà không ai báo.

Mã băm kiểm toàn vẹn dữ liệu: phát hiện tệp lặng lẽ hỏng

Mã băm là một chuỗi ngắn tính ra từ toàn bộ nội dung tệp; chỉ cần một bit đổi thì chuỗi đổi hoàn toàn. Tạo mã SHA-256 cho mọi tệp, lưu thành bảng kê đặt cạnh dữ liệu, rồi tính lại sau mỗi lần chép hay định kỳ; mã khác là tệp đã hỏng.

Tệp hỏng hiếm khi báo lỗi. Một ổ cứng bắt đầu có cung hỏng, một lần rút USB khi chưa ghi xong, một dịch vụ đồng bộ ghi đè bằng phiên bản dở dang: tệp vẫn còn đó, đúng tên, đúng dung lượng, chỉ là bên trong đã khác. Với dữ liệu nghiên cứu không thu lại được, phát hiện muộn có nghĩa là mất luôn cả bản sao lưu, vì bản lỗi đã được sao lưu đè lên. Mã băm là cách rẻ nhất để biết sớm.

Mã băm hoạt động thế nào?

Hàm băm nhận đầu vào là toàn bộ các byte của tệp và trả ra một chuỗi có độ dài cố định. SHA-256 cho chuỗi 64 ký tự thập lục phân. Cùng một tệp luôn cho cùng một chuỗi, trên mọi máy, mọi hệ điều hành. Hai tệp khác nhau dù chỉ một ký tự gần như chắc chắn cho hai chuỗi khác hẳn nhau.

Mã băm không sửa được tệp hỏng và không cho biết hỏng ở đâu. Nó chỉ trả lời một câu hỏi có hoặc không: tệp này có còn giống hệt lúc tạo mã không. Muốn khôi phục thì vẫn phải có bản sao lưu khác còn tốt, và mã băm chính là thứ giúp bạn biết bản nào còn tốt.

Một ví dụ quen thuộc: nhóm chép bộ ảnh hiển vi vài trăm gigabyte từ máy đo sang ổ ngoài, rồi từ ổ ngoài sang máy chủ khoa. Vài tháng sau, một số ảnh mở ra bị sọc. Không ai biết hỏng ở bước nào, và bản trên máy đo đã bị xoá để lấy chỗ. Nếu có bảng kê tạo ngay trên máy đo, chỉ cần một lệnh là biết tệp nào hỏng và hỏng từ bước chép nào.

Chọn thuật toán nào?

Với mục đích phát hiện hỏng do vô tình, thuật toán nào phổ biến cũng dùng được. Khác biệt nằm ở khả năng chống làm giả có chủ đích.

Thuật toánĐộ dài mãChống làm giảNên dùng khi
MD532 ký tựKhông còn an toàn, đã có cách tạo hai tệp trùng mãĐối chiếu với kho hoặc hệ thống cũ chỉ cung cấp MD5
SHA-140 ký tựKhông còn an toànTránh dùng cho dự án mới
SHA-25664 ký tựAn toàn theo hiểu biết hiện nayMặc định cho dữ liệu nghiên cứu
SHA-512128 ký tựAn toànKhi quy định của đơn vị yêu cầu

Zenodo hiển thị mã MD5 cho từng tệp tải lên. Bạn có thể tính MD5 ở máy rồi so với con số trên trang để chắc tệp đã lên đủ, đồng thời vẫn giữ bảng kê SHA-256 của mình làm chuẩn lưu trữ.

Tạo và kiểm mã băm bằng lệnh có sẵn trên máy

Không cần cài thêm phần mềm. Ba hệ điều hành phổ biến đều có sẵn lệnh. Trong các ví dụ, đứng ở thư mục gốc của bộ dữ liệu trước khi chạy để đường dẫn trong bảng kê là đường dẫn tương đối, mang sang ổ khác vẫn kiểm được.

Windows

Trong Command Prompt, gõ certutil -hashfile khaosat.csv SHA256. Trong PowerShell, gõ Get-FileHash khaosat.csv -Algorithm SHA256; mặc định lệnh này đã dùng SHA256. Tính cho cả thư mục bằng PowerShell: Get-ChildItem -Recurse -File | Get-FileHash -Algorithm SHA256 | Export-Csv bangke.csv -NoTypeInformation, ra một tệp CSV có thuật toán, mã và đường dẫn. Lưu ý Get-FileHash ghi đường dẫn đầy đủ tính từ ổ đĩa, nên khi kiểm trên ổ khác cần so theo tên tệp hoặc dùng một đoạn mã nhỏ cắt phần đầu đường dẫn. Kiểm một tệp đơn lẻ thì chỉ cần chạy lại lệnh và so chuỗi bằng mắt hoặc bằng phép so sánh trong PowerShell.

macOS

Mở Terminal, gõ shasum -a 256 khaosat.csv. Cho cả thư mục: find . -type f ! -name bangke.sha256 -exec shasum -a 256 {} + > bangke.sha256. Kiểm lại toàn bộ: shasum -a 256 -c bangke.sha256; mỗi dòng in OK hoặc FAILED.

Linux

Gõ sha256sum khaosat.csv. Cho cả thư mục: find . -type f ! -name bangke.sha256 -exec sha256sum {} + > bangke.sha256. Kiểm: sha256sum -c bangke.sha256; thêm --quiet để chỉ in những tệp lỗi. Định dạng tệp bảng kê của sha256sum và shasum -a 256 giống nhau, nên tạo trên Linux kiểm trên macOS được.

Lưu bảng kê kèm bộ dữ liệu như thế nào?

Bảng kê chỉ có ích khi đi cùng dữ liệu và được tạo lúc dữ liệu còn tốt chắc chắn:

  • Tạo bảng kê ngay sau khi chốt một phiên bản dữ liệu, ví dụ sau khi nhập liệu xong hoặc sau khi làm sạch xong.
  • Đặt tệp bảng kê ở thư mục gốc, tên rõ như bangke.sha256, ghi trong README thuật toán đã dùng và lệnh để kiểm.
  • Lưu thêm một bản bảng kê ở nơi khác dữ liệu, ví dụ trong kho mã hoặc gửi email cho chính mình, để nếu cả ổ hỏng vẫn còn mã đối chiếu.
  • Khi dữ liệu đổi phiên bản, tạo bảng kê mới, giữ bảng kê cũ đi kèm phiên bản cũ.
  • Với bộ dữ liệu lớn hoặc cần bàn giao chính thức, cân nhắc đóng gói theo chuẩn BagIt (đặc tả RFC 8493): thư mục chứa dữ liệu, bảng kê manifest-sha256.txt và tệp thông tin gói, có công cụ tạo và kiểm tự động.

Khi nào cần kiểm lại?

Sau mỗi lần chép sang ổ khác. Chép xong, chạy lệnh kiểm trên bản mới. Đây là lúc dễ hỏng nhất, nhất là với USB và ổ ngoài rút vội.

Trước khi xoá bản gốc. Không bao giờ xoá bản gốc khi bản mới chưa qua kiểm mã băm.

Định kỳ trên kho lưu trữ dài hạn. Ổ cứng để lâu không dùng vẫn có thể hỏng. Đặt lịch kiểm mỗi quý hoặc mỗi sáu tháng cho ổ lưu trữ, ghi kết quả vào nhật ký.

Sau khi tải về từ kho dữ liệu. So với mã kho công bố để chắc tệp tải đủ, nhất là tệp vài chục gigabyte.

Khi nghi ngờ có người sửa. Dữ liệu gốc đã khoá mà bảng kê báo khác là tín hiệu cần điều tra, kể cả khi lý do hoá ra vô hại.

Đưa việc kiểm mã băm vào nếp làm hằng ngày

Kiểm khi sao chép bằng rsync

Người dùng macOS và Linux sao chép thư mục lớn bằng rsync có thể thêm tuỳ chọn --checksum để công cụ so nội dung thay vì chỉ so thời gian sửa và kích thước khi quyết định tệp nào cần chép. Tuỳ chọn này chậm hơn nhưng không thay được bảng kê: rsync so hai bên với nhau, còn bảng kê so với trạng thái lúc dữ liệu còn tốt chắc chắn.

Ghi nhật ký kiểm

Mỗi lần kiểm, ghi một dòng vào tệp nhật ký: ngày, ổ nào, số tệp đạt, số tệp lỗi, người kiểm. Khi có sự cố, nhật ký cho biết dữ liệu hỏng trong khoảng thời gian nào, từ đó chọn bản sao lưu đủ cũ để khôi phục.

Phân công rõ người làm

Việc kiểm định kỳ hay bị bỏ vì không ai được giao. Ghi tên người phụ trách trong kế hoạch quản lý dữ liệu, đặt lịch nhắc trên lịch chung của nhóm. Với nhóm có máy chủ, một tác vụ chạy định kỳ gửi thư khi có tệp lỗi là đủ.

Lỗi hay gặp khi dùng mã băm

Phần lớn sự cố đến từ quy trình, không phải từ thuật toán.

Hiện tượngNguyên nhânCách xử lý
Mọi tệp báo lỗi không tìm thấyChạy lệnh kiểm ở sai thư mục, bảng kê dùng đường dẫn tương đốiChuyển về thư mục gốc của bộ dữ liệu rồi chạy lại
Tệp bảng kê tự báo lỗiBảng kê được tính trong lúc chính nó đang được ghiLoại tệp bảng kê khỏi danh sách tính, như ví dụ dùng ! -name
Tệp văn bản mở ra giống hệt nhưng mã khácKiểu xuống dòng bị đổi khi chép qua công cụ đồng bộ hoặc GitTắt chuyển đổi xuống dòng tự động; so lại byte bằng công cụ so tệp
Tệp Excel đổi mã dù không sửa gìMở rồi lưu lại, phần mềm ghi thêm siêu dữ liệuĐặt bản chốt ở chế độ chỉ đọc, làm việc trên bản sao
Không biết mã nào là đúngTạo bảng kê sau khi tệp đã hỏngTạo bảng kê sớm, lưu thêm một bản ở nơi khác

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

Mã băm có phải là mã hoá dữ liệu không?

Không. Mã băm chỉ là dấu vân tay để so sánh, không giấu nội dung và không giải ngược được ra tệp. Muốn bảo mật dữ liệu phải dùng công cụ mã hoá riêng.

Dùng MD5 cho dữ liệu nghiên cứu có được không?

Để phát hiện hỏng do vô tình thì MD5 vẫn bắt được. Nhưng MD5 không chống được làm giả có chủ đích, nên dự án mới nên dùng SHA-256 làm chuẩn.

Đổi tên tệp có làm đổi mã băm không?

Không. Mã băm tính từ nội dung, không tính từ tên. Tuy vậy bảng kê ghi theo tên, nên đổi tên thì lệnh kiểm sẽ báo không tìm thấy tệp.

Bao lâu nên kiểm mã băm một lần?

Kiểm ngay sau mỗi lần chép hoặc tải về, và định kỳ mỗi quý hoặc mỗi sáu tháng cho ổ lưu trữ dài hạn. Ghi kết quả vào nhật ký để biết lần cuối dữ liệu còn tốt là khi nào.

Dịch vụ đám mây đã kiểm toàn vẹn rồi, có cần mã băm riêng không?

Nên có. Dịch vụ kiểm việc truyền tải, nhưng không biết tệp đã hỏng từ máy bạn trước khi tải lên, cũng không biết khi bạn chép từ đám mây sang ổ khác.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

🧭
Bạn đang ở chặng nào của đường học vị?
Nhập chỗ bạn đang đứng và đích bạn nhắm — công cụ trả về số năm, chi phí và việc phải làm từng chặng.
Xem lộ trình của tôi →
Miễn phí, không cần tài khoản. Xem tất cả công cụ

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.

hoặc
[email protected]