Điều này mất một số đào để tìm ra. Trong file src/so sánh.c
bên trong Git repo cho tar, chúng tôi tìm thấy một hàm có tên verify_volume
(trên dòng 527 tại thời điểm viết), trong đó có nhận xét sau
Việc xác minh một kho lưu trữ có nghĩa là để kiểm tra xem phương tiện vật lý có nhận được chính xác hay không, vì vậy hãy cố gắng đánh bại bộ đệm trong bộ nhớ thông minh liên quan đến phương tiện cụ thể này. Ví dụ, trên Linux, ổ đĩa mềm thậm chí sẽ không được truy cập để xác minh toàn bộ.
Điều đó giải thích những gì nó cố gắng làm, nhưng đối với thế nào nó làm được điều đó, chúng ta cần xem mã của chức năng. Nó bắt đầu bằng cách so sánh các tiêu đề để đảm bảo chúng khớp và nếu khớp, nó sẽ chạy chức năng diff_archive
(dòng 461 tại thời điểm viết), nó đi từng mục trong kho lưu trữ và khi gặp tệp *, nó sẽ chạy chức năng diff_file
(dòng 187). Nó bắt đầu bằng cách kiểm tra một số thứ đơn giản, chẳng hạn như loại và kích thước tệp (và những thứ khác). Nếu tất cả những điều đó đều đúng, thì nó (đối với một tệp bình thường) sẽ đi và xác minh từng khối của tệp (trong read_and_process
chức năng, dòng 120). Vì tập tin thưa thớt, nó gọi thưa thớt_diff_file
(dòng 698) trong src/thưa thớt.c
, kiểm tra từng vùng của tệp** bằng cách sử dụng check_sparse_region
chức năng (dòng 607), cũng trong src/thưa thớt.c
.
* Nó làm những việc khác cho các loại dữ liệu lưu trữ khác, chẳng hạn như thư mục
**Nó kiểm tra từng khu vực theo cách tương tự như nó kiểm tra toàn bộ tệp thông thường (không thưa thớt)