Làm thế nào có thể WinRAR có thể sửa chữa bất kỳ khối lượng nào với một tệp .rev?


31

Tôi vừa tìm hiểu về .revcác tệp với WinRAR - ví dụ: nếu bạn có âm lượng RAR 10 phần, ví dụ, cộng với một .revâm lượng (phục hồi) - .revâm lượng sẽ có thể "sửa" bất kỳ một.rar âm lượng bị hỏng nào .

Sao có thể như thế được? Tôi không hiểu làm thế nào một tập có thể có tất cả dữ liệu để sửa bất kỳ / tất cả các tập bị hỏng riêng lẻ.

Tôi đoán rằng có lẽ có thể thay cho các tập không bị phá vỡ "tuyến tính", như tôi đang tưởng tượng, trong đó mỗi tập RAR chứa các tệp riêng biệt của toàn bộ được đóng gói bên trong; nhưng đúng hơn, có lẽ .revviệc sửa chữa là có thể khi các khối RAR được xem như một tệp bit và byte liên tục, có thể nói, và có lẽ có một số phép thuật CRC'ish (ah hem, "công việc sửa chữa") liên quan để sửa các byte bị hỏng.

Nhưng tôi không hiểu làm thế nào bạn có thể có 9 khối lượng làm việc với 1 khối bị hỏng, nhưng có một khối lượng phục hồi có thể sửa chữa bất kỳ một trong các khối lượng. Làm thế nào một tập có thể chứa dữ liệu của "tất cả" các tập?


3
Mã sửa chữa xóa. So sánh với en.wikipedia.org/wiki/Parchive
Dan D.

Câu trả lời:


55

Hãy thực hiện một trường hợp thực sự đơn giản.

Bạn có bốn tập và một tập khôi phục, mỗi tập có 1 bit thông tin trong đó:

         ========================================================
Volumes: = Volume 1 = Volume 2 = Volume 3 = Volume 4 = Recovery =
         =----------=----------=----------=----------=----------=
   Bits: =    1     =    0     =    1     =    1     =     1    =
         ========================================================

Khối lượng phục hồi sẽ chứa kết quả của từng bit XOR d cùng nhau:

1 XOR 0 XOR 1 XOR 1 = 1

Vì vậy, khối lượng phục hồi của chúng tôi chứa bit đơn 1.


Bây giờ, giả sử tập 1 thất bại.

Nếu chúng tôi XOR các tập 2, 3 và 4 còn lại với bit khôi phục thay cho âm lượng không thành công, chúng tôi nhận được:

1 XOR 0 XOR 1 XOR 1 = 1
^

Vì vậy, điều này cho chúng ta biết rằng tập 1 chứa 1, vì nó là kết quả của phương trình.

Thay vào đó, chúng ta hãy giả vờ tập 2 đã chết, vì vậy chúng ta thay thế giá trị của nó trong phương trình bằng bit khôi phục:

1 XOR 1 XOR 1 XOR 1 = 0
      ^

Vì vậy, chúng ta biết rằng tập 2 chứa 0, vì nó là kết quả của phương trình.

Nếu tập 3 hoặc 4 không thành công, cả hai sẽ tạo ra 1phương trình này.


Vì vậy, nếu bất kỳ khối lượng nào thất bại, khối lượng phục hồi có thể được sử dụng để xây dựng lại dữ liệu dựa trên các khối lượng còn lại. Đây có lẽ là hình thức sửa lỗi đơn giản nhất bạn có thể có. Nếu hai tập không thành công, bạn không thể phục hồi bất cứ điều gì.


4
Để rõ ràng, có các chương trình cho phép bạn phục hồi từ nhiều lỗi âm lượng.
Dietrich Epp

Điều này chỉ hoạt động nếu bạn biết thiết bị nào bị lỗi, phải không?
heinrich5991

1
@ heinrich5991 bạn biết bởi CRC nội bộ của tập
ratchet freak

21

Đối với một cách thực sự đơn giản để hiểu làm thế nào điều này có thể, hãy tưởng tượng nếu khối lượng phục hồi có chứa tổng của các khối lượng khác. Với một danh sách các số, thiếu một trong số chúng và tổng của chúng, bạn luôn có thể xây dựng lại số bị thiếu.

Ví dụ, hãy xem xét hai số có hai chữ số này là 13, 88, 17, 43. Nếu bạn biết rằng có một số bị thiếu và hai chữ số cuối của tổng của tất cả các số là 81, bạn có thể tìm thấy số bị thiếu. 13 + 88 + 17 + 43 = 161. Số có hai chữ số duy nhất bạn có thể thêm vào đó để tạo số kết thúc bằng 81 là 20.

Giả sử bạn có 20 và bị thiếu 43. 13 + 88 + 17 + 20 = 138. Số có hai chữ số duy nhất bạn có thể thêm vào đó để tạo một số kết thúc bằng 81 là 43.

Do đó, số phục hồi cho phép bạn tìm thấy bất kỳ một số thiếu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.