Журнал LinuxFormat - перейти на главную

LXF134:par2

Материал из Linuxformat
Перейти к: навигация, поиск
par2 Ус­та­но­ви­те сте­пень по­вре­ж­де­ния – и вос­кре­шай­те дан­ные

Содержание

par2: Про­верь и по­чи­ни фай­лы

Бен Мар­тин рас­ска­жет, как с по­мо­щью par2 со­брать ма­лень­кую ар­мию вос­ста­но­ви­тель­ных фай­лов, ко­то­рая не даст про­пасть ва­шим дан­ным.

Мно­гим из­вест­но, что кон­троль­ные сум­мы CRC32, SHA-1 и MD5 по­зво­ля­ют с вы­со­кой сте­пе­нью ве­ро­ят­но­сти су­дить о со­хран­но­сти круп­ных фай­лов. С по­мо­щью par2 мож­но оп­ре­де­лить ко­ли­че­ство ко­да для кор­рек­ции оши­бок, а при необ­хо­ди­мо­сти пой­ти даль­ше и реаними­ро­вать слег­ка под­пор­чен­ные фай­лы. Кто зна­ет: мо­жет быть, ви­зит par2 на ста­рый флэш-на­ко­пи­тель или вто­рой DVD с ре­зерв­ной ко­пи­ей дис­сер­та­ции од­на­ж­ды спа­сёт ва­ши тру­ды за 10 лет!

Эле­гант­ность про­грам­мы в том, что мож­но за­ранее соз­дать для ар­хи­ва «де­ре­во» кор­рек­ти­рую­щих фай­лов, и в слу­чае пор­чи ар­хи­ва доста­точ­но бу­дет толь­ко за­гру­зить та­кое ко­ли­че­ство «ре­монт­ных» дан­ных, ко­то­рое со­от­вет­ству­ет уров­ню по­вре­ж­дения, что­бы ар­хив был по­чинен. То есть, ес­ли в 5‑ги­га­байт­ный Live-DVD за­те­са­лась па­роч­ка оши­бок, мож­но за­гру­зить все­го один, очень ма­лень­кий файл для восста­нов­ления ис­прав­ной вер­сии.

Су­ще­ству­ет три основ­ных ре­жи­ма ра­бо­ты par2: соз­дание, про­вер­ка и восста­нов­ление. Па­кет par2 на ма­шине Fedora Linux на­зы­ва­ет­ся par2cmdline и со­сто­ит из коман­ды par2 и трёх команд-псев­донимов: par2create, par2verify и par2repair. Вы­зов лю­бой коман­ды оформ­ля­ет­ся оди­на­ко­во, тут не за­пу­та­ешь­ся: par2create par2‑file file1 file2 и т. д., где file1 file2 и им по­доб­ные – име­на фай­лов для соз­дания, про­вер­ки или восста­нов­ления.

За де­ло...

Од­ной коман­дой par2create мож­но сгенери­ро­вать восста­но­ви­тель­ные фай­лы аж для 32 000 фай­лов. Про­грам­ма стро­ит пи­ра­ми­ду сво­их фай­лов, при­сваи­вая им име­на с пре­фик­сом par2‑file. Фай­лы в со­ста­ве пи­ра­ми­ды про­грес­сив­но уве­ли­чи­ва­ют­ся в объ­ё­ме. Ес­ли по­вре­ж­дение незна­чи­тель­но, то неболь­шо­го фай­ла ока­жет­ся доста­точ­но, что­бы спа­сти по­ло­жение. Ка­та­ст­ро­фи­че­скую по­те­рю дан­ных мо­жет за­ле­чить толь­ко круп­ный восста­но­ви­тель­ный файл.

Для де­мон­ст­ра­ции я взял файл Fedora-12‑x86_64 DVD.iso. Его объ­ём око­ло 3,3 ГБ, а кон­троль­ная сум­ма md5sum вы­гля­дит как 6dd31e292cc2eb1140544e9b1ba61c56. Тести­ро­вание вы­пол­ня­лось на ма­шине с про­цес­со­ром 2,4 ГГц Intel Q6600 и мас­си­вом RAID. Что­бы соз­дать MD5, по­на­до­би­лось 39 се­кунд, а par2 со стан­дарт­ны­ми па­ра­мет­ра­ми ра­бо­та­ла око­ло вось­ми ми­нут. Для соз­дания восста­но­ви­тель­ных фай­лов ISO-об­раза я ис­поль­зо­вал коман­ду par2create в сле­дую­щей фор­ме:

par2create Fedora12Par2 Fedora-12-x86_64-DVD.iso

Основ­ной па­ра­метр команд­ной стро­ки, ин­те­ре­сую­щий нас при соз­дании фай­лов par2 – это -r. По умол­чанию вы­став­ля­ет­ся -r5, для соз­дания из­бы­точ­но­сти в 5 %. Этот па­ра­метр оп­ре­де­ля­ет раз­мер восста­но­ви­тель­ных фай­лов и ко­ли­че­ство оши­бок, ко­то­рые с их по­мо­щью мож­но ис­пра­вить.

Вре­мя, за­тра­чи­вае­мое на соз­дание фай­лов, за­ви­сит от ко­ли­че­ства генери­руе­мых дан­ных. На­при­мер, ес­ли вы хо­ти­те по­лу­чить из­бы­точ­ность 10 %, то вре­мени на это уй­дёт вдвое боль­ше, чем на фай­лы с 5 %‑й до­бав­кой.

Восста­но­ви­тель­ные фай­лы занима­ют ме­сто и тре­бу­ют вре­мени для генера­ции, по­это­му непло­хо бы вы­яснить оп­ти­маль­ный объ­ём из­бы­точ­но­сти. Весь­ма по­лез­ная функ­ция par2 – вы­ра­ба­ты­вать до­полнитель­ный код для восста­нов­ления, ко­то­рый мож­но ис­поль­зо­вать в со­че­тании с го­то­вы­ми фай­ла­ми par2.

На­при­мер, из­на­чаль­но вы сгенери­ро­ва­ли фай­лы par2 с из­бы­точ­но­стью 5 %, но вам со­об­щи­ли о 7 %‑м по­вре­ж­дении. В этом слу­чае с па­ра­мет­ром -r5 -fNNN мож­но сгенери­ро­вать 5 %‑ю до­бав­ку, на­чи­ная с бло­ка NNN. Блок NNN дол­жен быть сле­дую­щим за имею­щи­ми­ся бло­ка­ми. Что­бы най­ти NNN, най­ди­те наи­боль­ший файл par2 – ска­жем, F12.vol063+37.par2. В нем со­дер­жит­ся 37 бло­ков, на­чи­ная с бло­ка 63. То есть из­на­чаль­но бы­ло соз­да­но 100 бло­ков, и мож­но соз­дать до­полнитель­ный 5 %‑й код для вос-ста­нов­ления, на­чи­ная со сле­дую­ще­го бло­ка с па­ра­мет­ра­ми -r5 -f101 при за­пуске par2create.

Най­ти и по­чинить

Что­бы уз­нать, не из­менил­ся ли DVD-об­раз со вре­мени генера­ции фай­лов par2, скоман­дуй­те:

par2verify Fedora12Par2.par2 Fedora-12-x86_64-DVD.iso

Ес­ли всё в по­ряд­ке, вы­ве­дет­ся стро­ка ‘All files are correct, repair is not required [Фай­лы в по­ряд­ке, ис­прав­лений не тре­бу­ет­ся]’. За­да­ча par2 – восста­нов­ление по­вре­ж­дён­ных файлов, по­это­му я наме­рен­но на­ру­шил часть ISO-об­раза и восста­но­вил ори­ги­нал. Для встав­ки пря­мо в файл слу­чай­но­го на­бо­ра бай­тов, с за­дан­ным сме­щением от на­ча­ла фай­ла, мож­но ис­поль­зо­вать коман­ду dd. А что­бы dd не об­ре­за­ла файл до ну­ля байт, необ­хо­ди­мо до­ба­вить клю­чи seek и conv=notrunc. Коман­ды bs (раз­мер бло­ка) и count уста­нав­ли­ва­ют на­чаль­ную по­зи­цию и объ­ём ко­пи­ро­вания. Сле­дую­щим на­бо­ром команд мы вве­дем 4 КБ слу­чай­ных дан­ных в ISO-об­раз, на­чи­ная со сме­щения 16 КБ от на­ча­ла фай­ла.

dd \
if=/dev/urandom \
of=Fedora-12-x86_64-DVD.iso \
bs=1 count=4096 seek=16384 \
conv=notrunc

По­сле раз­ру­ше­ния 4 КБ дан­ных ко­ман­да par2verify долж­на со­об­щить о по­вре­ж­де­нии и ко­ли­че­ст­ве бло­ков, не­об­хо­ди­мом для его уст­ра­не­ния.

par2repair Fedora12Par2.par2 Fedora-12-x86_64-DVD.iso
...
Repair is required.[Не­об­хо­ди­мо ис­прав­ле­ние]
1 file(s) exist but are damaged. [1 файл(ы) су­ще­ст­ву­ет, но по­вре­ж­ден]
You have 1999 out of 2000 data blocks available.[Вам дос­туп­но 1999 из 2000 бло­ков]
You have 100 recovery blocks available.[У вас есть 100 вос­ста­но­ви­тель­ных бло­ков]
Repair is possible.[Вос­ста­нов­ле­ние воз­мож­но]
You have an excess of 99 recovery blocks.[У вас 99 из­бы­точ­ных вос­ста­но­ви­тель­ных бло­ков]
1 recovery blocks will be used to repair.[1 вос­ста­но­ви­тель­ный блок бу­дет ис­поль­зо­ван для ис­прав­ле­ния]

Итак, для восста­нов­ления по­на­до­бит­ся все­го один блок.

Как мы уже зна­ем, наи­боль­ший восста­но­ви­тель­ный файл мо­жет иметь на­звание F12.vol063+37.par2; он со­дер­жит 37 бло­ков, на­чи­ная с 63‑го. Нет ну­ж­ды стар­то­вать все бло­ки с пер­во­го – в слу­чае ка­та­ст­ро­фи­че­ско­го по­вре­ж­дения, тре­бую­ще­го 30 бло­ков для восста­нов­ления, доста­точ­но за­гру­зить толь­ко этот, са­мый боль­шой файл F12.vol063+37.par2. Ес­ли уда­лось по крайней ме­ре вы­яснить ко­ли­че­ство восста­но­ви­тель­ных бло­ков, ис­пра­вить по­вре­ж­дение ско­рее все­го уда­ст­ся.

Коман­да на ис­прав­ление поч­ти не от­ли­ча­ет­ся от про­ве­роч­но­го ва­ри­ан­та: доста­точ­но вме­сто par2verify на­брать par2repair. Про­вер­ка дли­лась ми­ну­ту, а на восста­нов­ление по­на­до­би­лось око­ло че­ты­рёх ми­нут. По за­вер­шении ра­бо­ты вы об­на­ру­жи­те ста­рый файл, пе­ре­име­но­ван­ный в Fedora-12‑x86_64‑DVD.iso.1, и восста­нов­лен­ный Fedora-12‑x86_64‑DVD.iso. Это немно­го сби­ва­ет с тол­ку: ло­гич­но пред­по­ло­жить, что до­бав­ку «1» по­лу­чит но­вый, восста­нов­лен­ный файл. В ито­ге кон­троль­ная сум­ма MD5 спа­сён­но­го фай­ла со­от­вет­ству­ет ис­ход­ной, а это здо­ро­во.

Недаль­но­вид­но­му поль­зо­ва­те­лю par2, конеч­но, не по­мо­жет. Од­на­ко неболь­шие за­тра­ты сил и вре­мени на по­строй­ку пи­ра­ми­ды вос­ста­но­ви­тель­ных фай­лов мно­го­крат­но оку­пят­ся, ко­гда на­ста­нет час спа­сать свои тру­ды.

Ин­тер­нет-стра­те­гия

Вос­ста­нав­ли­вая файл, по­лу­чен­ный из Ин­тер­не­та, луч­ше на­чать с за­груз­ки фай­ла par2 и наи­мень­ше­го по объ­ё­му volXX.YY.par2. Ес­ли оши­бок не­мно­го, то par2repair тут же ис­пра­вит их; в про­тив­ном слу­чае вы уз­нае­те, сколь­ко до­пол­ни­тель­ных бло­ков не­об­хо­ди­мо для вос­ста­нов­ле­ния. Воо­ру­жив­шись этим зна­ни­ем, за­гру­жай­те столь­ко до­пол­ни­тель­ных фай­лов vol.par2, сколь­ко нуж­но для вос­ста­нов­ле­ния дан­ных.

Как по­вы­сить ско­рость

Ко­ли­че­ст­во ис­поль­зуе­мой па­мя­ти оп­ре­де­ля­ет­ся па­ра­мет­ром -m. Стан­дарт­ное зна­че­ние -m16 по­зво­ля­ет ис­поль­зо­вать толь­ко 16 МБ ОЗУ, что для со­вре­мен­ных ма­шин не­ак­ту­аль­но. На­при­мер, имея 8 ГБ ОЗУ, я ис­поль­зую зна­че­ние -m512, и вме­сто вось­ми ми­нут нуж­ное ко­ли­че­ст­во вос­ста­но­ви­тель­ных фай­лов ге­не­ри­ру­ет­ся за семь.

Персональные инструменты
купить
подписаться
Яндекс.Метрика