DELLPZ
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору В справку неплохо было бы добавить восстановление архивов: Как восстановить испорченный архив 7z Попробуйте последнюю версию 7-Zip Вполне возможно, что новая версия 7-Zip может решить ваши проблемы с архивами 7z. Так что скачайте последнюю версию 7-Zip и попробуйте использовать эту новую версию. Вы также можете попробовать последнюю альфа или бета версию. Если новая версия также не помогает, прочитайте это руководство. Требуемое программное обеспечение:  7-Zip (последняя версия, которая может быть стабильной, альфа или бета версия).  Некоторая программа с шестнадцатеричной программой просмотра или редактором, например, FAR Manager . Структура архива 7z Архив 7z состоит из 4 основных блоков данных: 1. Начальный заголовок (32 байта): содержит подпись и ссылку на конечный заголовок 2. Сжатые данные файлов 3. Блок сжатых метаданных для файлов: он содержит ссылки на сжатые данные, информацию о методах сжатия, CRC, именах файлов, размерах, временных отметках и так далее. 4. Конечный заголовок: содержит ссылку на блок сжатых метаданных. Примечание. Если архив 7z содержит только один файл без шифрования, 7-Zip хранит метаданные для этого файла в конечном заголовке в несжатом виде, и в этом случае имеется только 3 основных блока. Архивный пример Пример архива: a.7z (3740 байт), который содержит 5 файлов, сжатых методом LZMA. Начало архива: 0000000000: 37 7A до н.э. AF 27 1C 00 04 5B 38 BE F9 59 0E 00 00 0000000010: 00 00 00 00 23 00 00 00 00 00 00 00 7A 63 68 FD 0000000020: 00 21 16 89 6C 71 3D AB 7D 89 E6 3C 2E BE 60 24 00: 6 байт: 37 7A до н.э. AF 27 1C - подпись 06: 2 байта: 00 04 - версия формата 08: 4 байта: 5B 38 BE F9 - CRC следующих 20 байтов 0C: 8 байтов: 59 0E 00 00 00 00 00 00 - относительное смещение конечного заголовка 14: 8 байтов: 23 00 00 00 00 00 00 00 - длина конечного заголовка 1C: 4 байта: 7A 63 68 FD - CRC конечного заголовка Относительное смещение конца заголовка относительно конца начального заголовка, это по смещению 0x20 (32 в десятичном виде). Реальное смещение заголовка конца в примере архива = 0x20 + 0x0E59 = 0x0E79 20: 00 21 16 89 ... - запуск сжатых данных. Примечание: если файл был сжат методом LZMA, первый байт всегда 00. Если первый байт не 00, то архив использует другой метод (это может быть LZMA2 или зашифрованные данные с помощью AES). Конец архива: Конечный заголовок (смещение = 0x0E59, длина = 0x23): 0000000E70: 17 06 8D AD 01 09 80 0000000E80: AC 00 07 0B 01 00 01 23 03 01 01 05 5D 00 10 00 0000000E90: 00 0C 81 1A 0A 01 3C 70 52 F7 00 00 Возможные значения для первого байта в конце заголовка: 17 - Конечный заголовок содержит ссылку на блок метаданных. 01 - Блок метаданных сохраняется в конце заголовка. Типы коррупции Возможны случаи, когда архив поврежден:  Вы можете открыть архив и просмотреть список файлов, но при нажатии команды «Извлечь» или «Тест» возникают некоторые ошибки: Ошибка данных или Ошибка CRC.  При открытии архива вы получаете сообщение «Не удается открыть файл« a.7z »как архив» Случай коррупции: ошибки данных или ошибки CRC для файлов внутри архива Здесь мы описываем случай, когда вы можете открыть архив и увидеть список файлов, но когда вы нажимаете команду Извлечь или Тестировать, возникают некоторые ошибки: Ошибка данных или Ошибка CRC. Довольно сложно восстановить данные для этого случая. Если архив был сжат в режиме «Solid», и у вас есть точные копии некоторых файлов из архива, вы можете создать аналогичный архив с хорошими копиями файлов с такими же настройками и в том же порядке, и заменить «плохие» части bad.7z на «хорошие» запчасти от другого good.7z. Вы должны посмотреть списки файлов в плохих и хороших архивах, журналы команды «test» и подумать о способах замены плохих частей. Здесь больше нет инструкций для этого случая коррупции. Повреждение: невозможно открыть файл 'a.7z' как архив Если вы пытаетесь открыть или извлечь архив и видите сообщение «Не удается открыть файл« a.7z »как архив», это означает, что 7-Zip не может открыть какой-либо заголовок с начала или с конца архива. В этом случае вы должны открыть архив в шестнадцатеричном редакторе и посмотреть «Начальный заголовок» и «Конечный заголовок». Возможные случаи:  Случай: если начало архива повреждено, то ссылка на конечный заголовок отсутствует. Но если Конечный Заголовок в порядке, а размер архива также правильный, вы можете заменить данные в Начальном заголовке в шестнадцатеричном редакторе на следующие значения:  0000000000: 37 7A до н.э. AF 27 1C 00 04 00 00 00 00 00 00 00 00  0000000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Затем попробуйте открыть архив, если вы можете открыть, и вы видите список файлов, попробуйте команду Test или Extract. Смотрите также раздел «Ошибки данных или ошибки CRC» на этой странице.  Случай: Начальный заголовок и Конечный заголовок в порядке, но общий размер архива не в порядке. Вы можете рассчитать правильный размер архива из значений в Start Header. Тогда вы должны восстановить правильный размер. Вы можете вставить некоторые данные или удалить некоторые данные где-нибудь в архиве (например, со смещением в несколько МБ до конца архива). Например, если у вас есть многотомный архив: a.7z.001, ..., a.7z.009, но отсутствует одна часть a.7z.008, просто скопируйте a.7z.007 в файл a.7z .008, а 7-Zip увидит правильный размер архива. Или, если какаято часть была уменьшена, посмотрите размер других частей и восстановите исходный (правильный) размер «плохой» части, чтобы общий размер снова был правильным, и 7-zip сможет открывать заголовки.  Случай: конец архива поврежден или отсутствует. Следующий текст описывает этот случай. Не существует правильного заголовка конца в конце архива 7-Zip записывает полный заголовок запуска только в конце операции создания архива. Вы можете посмотреть, чтобы начать заголовок. Если вы видите подпись с версией и нулями в других полях: 0000000000: 37 7A до н.э. AF 27 1C 00 04 00 00 00 00 00 00 00 00 0000000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 тогда операция по созданию архива по какой-то причине была прервана. И в этом случае, вероятно, в конце архива нет блока метаданных и конечного заголовка. Примечание. Если архив является многотомным, также возможен незавершенный начальный заголовок, если первый том был скопирован до того, как был записан конец архива (последний том). В этом случае архив не поврежден. И 7-Zip может распаковать такой архив, если общий размер правильный и если есть правильный Конечный Заголовок. Если заголовок запуска в порядке, вы можете рассчитать правильный размер архива и сравнить с размером имеющегося архива. Если конечный заголовок отсутствует, вы не сможете восстановить имена файлов, временные метки и другие метаданные, но, вероятно, возможно восстановить некоторые данные в виде необработанного файла, а затем можно восстановить данные из необработанного файла с помощью некоторого анализатора. Мы опишем все шаги с примером: 1. Создать хороший архив 7z 2. Коррумпированный архив 3. Восстановить файлы из поврежденного архива Создать хороший архив Мы создаем хороший архив. Мы используем readme.txt (1565 байт) формы 7-Zip 9.20 в качестве файла примера. Создать файлы readme.txt.bz2, readme.zip, readme.txt.gzip и readme.txt.xz из файла readme.txt. Создайте a.7z с методом LZMA, который содержит все файлы: readme.txt.bz2 readme.txt.gz readme.zip readme.txt readme.txt.xz У нас есть a.7z (3740 байт). Вы можете посмотреть этот файл в шестнадцатеричном редакторе. Он должен иметь структуру, аналогичную структуре файла 7z, описанной выше. Коррумпированный архив Теперь мы свернули архив a.7z. Мы хотим разделить архив на две части:  a.7z.001: начальный заголовок, некоторая часть сжатых данных  a.7z.002: некоторая часть сжатых данных, метаданные, конечный заголовок Блок метаданных с конечным заголовком невелик для нашего тестового архива (меньше 300 байт). Мы вызываем команду «Split file ...» в 7-Zip File Manager и набираем «3000 100G» в поле «Split to volume, bytes:» (100G означает, что вторая часть не может быть больше 100 ГБ). У нас есть две части: a.7z.001 (3000 байт) и a.7z.002 (740 байт). Затем мы копируем a.7z.001 в bad.7z и пытаемся открыть bad.7z. И мы получаем сообщение «Не удается открыть файл« bad.7z »как архив», поэтому мы испортили архив. Восстановить архив Открываем bad.7z в шестнадцатеричном редакторе 0000000000: 37 7A до н.э. AF 27 1C 00 04 5B 38 BE F9 59 0E 00 00 0000000010: 00 00 00 00 23 00 00 00 00 00 00 00 7A 63 68 FD 0000000020: 00 21 16 89 6C 71 3D AB 7D 89 E6 3C 2E BE 60 24 Мы видим, что Start Header в порядке. Мы вычисляем правильный размер архива из значений полей Start Header: 0x0E59 + 0x20 + 0x23 = 0x0E9C = 3740 Правильный размер - 3740 байт, но наш "bad.7z" - только 3000 байт. Смотрим в конец архива: 0000000B60: 55 73 EA 87 45 18 FC AD 67 0D 40 EF F4 41 49 63 0000000B70: 6A 87 54 70 32 6C B0 8F 76 2A 63 BF 12 5D 88 CD 0000000B80: 22 76 9F 97 05 3B 37 BE 49 CD F8 0A CC 67 FB FE 0000000B90: 17 2E 16 D5 1F 8C 5A 30 08 7F C6 E9 98 9F 00 F1 0000000BA0: A6 99 F9 ED 01 62 84 48 77 69 C7 65 21 21 42 66 0000000BB0: 48 F1 FE 79 06 08 25 68 И мы не видим Конечный заголовок в конце архива. Вывод: архив, вероятно, был усечен. Теперь мы хотим создать еще один «хороший» архив 7z, содержащий хороший начальный заголовок, конечный заголовок. и мы хотим поместить блок Compressed Data из bad.7z в этот новый «хороший» архив. Сначала мы смотрим начало блока Compressed Data в bad.7z: 0000000020: 00 21 16 89 6C 71 3D AB 7D 89 E6 3C 2E BE 60 24 Если использовался метод LZMA, то первый байт в сжатых данных всегда равен 0, а старший бит второго байта также равен 0. Таким образом, если мы видим 00 в первом байте и от 00 до 7F во втором байте, возможно, использовался метод LZMA (не LZMA2 ). Если первый байт в сжатых данных не равен 0 или если значение второго байта больше, чем 7F, то это не поток LZMA. Это может быть LZMA2 (или зашифрованный поток AES). Мы должны создать новый «хороший» архив 7z тем же методом, что и в bad.7z, а новый архив должен быть намного больше, чем bad.7z Поэтому мы выбрали большой файл для этого нового архива. В некоторых случаях вы можете использовать даже bad.7z в качестве этого большого файла. Но мы используем 7-zip.chm. Мы переименовываем 7-zip.chm (91020 байт) в файл raw.dat и сжимаем raw.dat в raw.7z с помощью метода LZMA с большим значением размера словаря. Размер словаря должен быть равен или больше размера словаря в bad.7z. raw.7z - это (84898 байт), что намного больше, чем bad.7z, как требуется. если raw.7z меньше, чем «bad.7z», вы должны создать еще один raw.7z с другим raw.dat, который больше. Мы вызываем функцию «Split file ...» для bad.7z и набираем «32 100G» в поле «Split to volume, bytes:». Создает 2 части:  bad.7z.001: 32 байта: начальный заголовок  bad.7z.002: 2968 байт: начало сжатых данных Мы вызываем функцию «Split file ...» для raw.7z и набираем «32 2968 100G» в поле «Split to volume, bytes:». Обратите внимание, что значение 2968 равно размеру «bad.7z.002». Когда вы восстанавливаете реальный архив, вы должны использовать точный размер вашего bad.7z.002. Создает 3 части:  raw.7z.001: 32 байта: начальный заголовок  raw.7z.002: 2968 байт: начало сжатых данных  raw.7z.003: 81898 байт: конец сжатых данных, блок метаданных, конечный заголовок Затем мы переименовываем файл bad.7z.002 в raw.7z.002 Теперь многотомный архив raw.7z. * Содержит хорошие заголовки из raw.7z и сжатые данные из bad.7z. Нажимаем «Extact» для файла raw.7z.001. Он извлечет файл raw.dat и, возможно, покажет сообщение «Ошибка данных». Теперь у нас есть файл raw.dat, который содержит восстановленный поток из bad.7z. Большинство архивов 7z являются твердыми. Если архив bad.7z был твердым, то восстановленный поток состоит из объединенных исходных файлов Если архив bad.7z не является твердым, то восстановленный поток содержит данные для одного файла. Он также может содержать некоторые данные мусора в конце. Разбор необработанного потока для восстановленного твердого архива Нет, мы должны использовать некоторые программы синтаксического анализа, которые будут искать raw.dat, искать сигнатуры файлов и извлекать некоторые файлы из этого файла. Вы можете попробовать использовать парсер из 7-Zip. Вам нужна 7-Zip 9.34 alpha или более поздняя версия. Выберите raw.dat и вызовите команду контекстного меню "7-Zip> Открыть архив> #" Это показывает: 1.bz2 2.readme.txt.gz 3.zip 4 5.xz Нажмите Извлечь команду, чтобы извлечь эти файлы. Итак, мы восстановили некоторые оригинальные файлы, но без оригинальных имен. Парсер 7-Zip может находить архивы в сыром файле. Но он не распознает другие файлы, такие как xml, html, jpg, png файлы и так далее. Так что, вероятно, вам понадобится другое программное обеспечение парсера для извлечения файлов из необработанного файла. Восстановление не сплошных архивов и архивов с несколькими сплошными блоками Если в архиве 7z имеется более одного сплошного блока, вы должны определить точный конец сплошного блока и начало следующего сплошного блока. Процедура восстановления для этого случая будет описана в будущем. Кроме того ссылочку для закачки русской справки-всегда свежей. |