最後更新: 2020-09-21
介紹
Parchive = parity archive
+ Par2 specification supports up to 32768 source blocks(equal-sized) and up to 65535 recovery blocks.
3 schemes for allocating recovery blocks to PAR2 files:
- Variable (powers of 2 sizing scheme)(Default)
- Variable (limited to size of largest data file)(-l)
- All the same size(-u)
安裝
apt-get install par2
Windwos: quickpar
SYNOPSIS
par2 c|v|r [options] <PAR2 file> [files]
建立保護
# By defaults 係會用 16 MB RAM 去建立 5 % 的保護機制
# 並會以 block count: 2000 來分割來源
par2 create etch-openvz(clean).img.gz.000
Block size: 62436 Source file count: 1 Source block count: 2000 Redundancy: 5% Recovery block count: 100 <= 2000 x 5% Recovery file count: 7 Opening: etch-openvz(clean).img.gz.000 Computing Reed Solomon matrix. Constructing: done. Wrote 6243600 bytes to disk <= 62436 x 100 Writing recovery packets Writing verification packets Done
# 由以上資料可知, 此機制可以修復 6243600 bytes 的總損壞,
# 而又唔超過 100 個 block 損害的地方, 不過, 每一個 block 都可以幾處受損 ^ ^
目錄內的檔案
-rw------- 1 root root 124847623 2009-01-27 20:53 etch-openvz(clean).img.gz.000 -rw------- 1 root root 40424 2009-01-27 17:32 etch-openvz(clean).img.gz.000.par2 -rw------- 1 root root 102928 2009-01-27 17:32 etch-openvz(clean).img.gz.000.vol000+01.par2 -rw------- 1 root root 205756 2009-01-27 17:32 etch-openvz(clean).img.gz.000.vol001+02.par2 -rw------- 1 root root 371088 2009-01-27 17:32 etch-openvz(clean).img.gz.000.vol003+04.par2 -rw------- 1 root root 661428 2009-01-27 17:32 etch-openvz(clean).img.gz.000.vol007+08.par2 -rw------- 1 root root 1201784 2009-01-27 17:32 etch-openvz(clean).img.gz.000.vol015+16.par2 -rw------- 1 root root 2242172 2009-01-27 17:32 etch-openvz(clean).img.gz.000.vol031+32.par2 -rw------- 1 root root 2554692 2009-01-27 17:32 etch-openvz(clean).img.gz.000.vol063+37.par2
一次過為多個檔案建立保護
cmd:
par2 create etch-openvz(clean).img.gz.000.*
進階設定
par2 create -r10 -s524288 -m64 etch-openvz(clean).img.gz.000
-r n # 建立幾多 % 的沉餘 (可以理解成 recovery 的 data size)
-r n<unit> # Redundancy target size, <c>=g(iga),m(ega),k(ilo) bytes
-n n # 總共多小個 recovery file (可以理解成"最多容納多小個錯處")
-u # Uniform recovery file sizes
-s n # 每個 source block 的大小, Unit: byte
-m n # 要運用系統幾多 RAM, Unit: MB
ram 及 Block-Size 多了, 生成的速度可以大大提升,
而且 Block-Size 的增大, 令生成的檔案更接近應有的大小 ( 以上例子 10% 大 )
其他有用的 parameter
- -b n # Source Block Count (不能與 -s 一齊出現)
- -l n # 限制 recovery files 的 size (不能與 -u / -n 一齊出現)
校檢檔案
par2 會生成出兩種檔案,
第一種叫 index 檔, 它並沒有還原能力, 但勝在細小,
我們可以用它來校檢目標是否正確, 及找出要那幾個 parity volumes 檔
第二種是 parity volumes 檔, 它是俱有還原能力的,
而且每個檔案都俱有不同程度的還原能力,
我們可以視乎檔案的損壞程度而選用某幾個 parity volumes 檔
i.e.
par2 verify etch-openvz(clean).img.gz.000.par2
校檢成功:
Verifying source files: Target: "etch-openvz(clean).img.gz.000" - found. All files are correct, repair is not required.
P.S.
par2 它是不會檢查 metadata 的, 亦即是說, 如果 permission 有變, 佢係唔知架 ~
parity volumes 檔案名的格式
檔案名: 原來的檔案名.volxx+yy
i.e.
filename.par2 filename.vol000+01.PAR2 filename.vol001+02.PAR2 filename.vol003+04.PAR2 filename.vol007+06.PAR2
* Each of the files contains a different number of recovery blocks.
* Each successive PAR2 file has approximately twice as many recovery blocks as the previous one.
xx:
000000 0 # 第0個 recovery block 000001 1 # 第1個及第2個 recover block 000011 3 # 第3個至第6個 recover block 000111 7 001111 15 011111 31 111111 63
block number of the first recovery block in that file. 此格式方法日後追加 recovery block
比如已經有 5% 沉餘, 現在在追加 5%, 令總共有 10% 沉餘
yy:
2^0, 2^1, 2^2, 2^3 ............
1, 2, 4, 8 ......... 它們是指每個 parity volumes 檔內含幾多個 recovery block
修復受損
當 verify 時見到以下內容
Repair is required. 1 file(s) exist but are damaged. You have 1999 out of 2000 data blocks available. You have 100 recovery blocks available. Repair is possible. You have an excess of 99 recovery blocks. 1 recovery blocks will be used to repair.
由以上資料可知, 任何一個 parity volumes 檔都可以幫到你 ^ ^
但如果結果係 "6 recovery blocks will be used to repair."
表示你最少要有
etch-openvz(clean).img.gz.000.vol003+02.par2 etch-openvz(clean).img.gz.000.vol003+04.par2
又或者一個
etch-openvz(clean).img.gz.000.vol007+08.par2
修補所用的 cmd
par2 repair test.mpg.par2
當修補成功後,它會再一次檢查檔案的原整性, 真是相當細心, 所以大可效心 ^ ^