gifts2017

Склеивание двух 1CD-файлов в один

Опубликовал Сергей Зеленовский (zels) в раздел Администрирование - Сервисные утилиты

Склеивание двух 1CD файлов в один, когда "свежий" файл физически не читается, но есть старый читаемый файл.

Столкнулся с ситуацией, когда при чтении 1CD-файла (БП 2.0) возникают CRC-ошибки, т.е. файл физически не читается. Лечение и тестирование не помогают, увы. Оказалось, даже просто скопировать поврежденный файл - проблемаFrown. Выяснил, что физически поврежденные блоки находятся в районе 10Мб (а файл больше гигабайта), поэтому я предположил, что это не данные, а какая-то из конфигураций. Еще есть архив трехмесячной давности и конфигурация с тех пор точно не менялась. Как перенести правильные куски конфигурации из старого файла в новый? 

Пришлось написать маленькую консольную утилиту, которая читает битый файл порциями по 4096 байт (8 блоков по 512, стандартный размер кластера в NTFS) и пишет эту порцию в новый файл. Если возникает ошибка чтения, то выдается сообщение ERR "номер ошибки" "позиция от начала файла". Для CRC-ошибки номер 32 (а других я не видел) и в выходной файл пишется блок "*ERROR* нулевые байты...".  Однако можно указать старый файл и в этом случае порция будет считана из него (с той же позиции, как и в битом файле). В процессе копирования выводится начальный адрес читаемой порции (один раз на 1000 порций).

Можно изменить размер  считываемой порции, указав ключ -n (n=1..8, количество 512-байтовых блоков в порции), но для NTFS это приводит только к замедлению работы, а толку - никакого. Однако этот ключ может помочь, когда размер кластера  меньше 8 блоков (при чтении с флешки или маленького FAT/FAT32 раздела).

Скачать файлы

Наименование Файл Версия Размер
Bad1CD.rar 46
.rar 5,02Kb
16.04.14
46
.rar 5,02Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Александр Лыткин (TrinitronOTV) 16.04.14 12:06
интересная методика восстановления файла базы, спасибо, что поделились своей идеей
2. Wooster 16.04.14 13:05
Нормальный ход. А быстрый обмен БП и УТ таким макаром можно запилить ?
3. Сергей Зеленовский (zels) 16.04.14 13:09
Я бы не рискнул так обмениваться.
4. script Мальчинко (script) 16.04.14 22:01
Оказывается и среди 1С-ников встречаются программисты
shalimski; nbq; iov; FullMoon; LexSeIch; Solovyeff; Aleksey.Bochkov; Andry.Boris; John_d; ilov_boris; makas; +11 2 Ответить 2
5. Сергей Зеленовский (zels) 17.04.14 11:12
(4) script, и программисты и физики и математики и экономисты...
Интересно, есть представители гуманитарных профессий?

Если кому интересно, то выходной файл (формирование которого на картинке к статье) получился полностью рабочим.

Не думаю, что следует торопиться скачивать саму програмку (так просто ее не протестировать, нужны реальные сбои) - достаточно знать, что она есть и помнить, где ее взять. Не знаю почему, но поиск ее по характерным словам не находит...
6. Василий Зайцев (vasiliy_b) 17.04.14 13:39
Что только народу не приходится делать, и только потому что не хотят делать ежедневные копии. Но вещь полезная, не спорю в хозяйстве сгодится. Хотя ее полезность относится только к тому случаю когда поврежден диск в области конфигурации, а в остальных случаях, вы получите не рабочую базу.
7. Михаил Усков (MMF) 17.04.14 14:45
ИМХО, или я не оценил идеи или идея идиотская. 1CD файл с произвольным доступом и модификацией. Допустим, супер утилита не может прочитать кусок с неким смещением и в итоге она заменяет его взятым из архива с тем же смещением. Это маразм и бред. Итог такого склеивания нужно сразу же Shift+Del.
Ёпрст; +1 1 Ответить 1
8. Сергей Зеленовский (zels) 17.04.14 17:16
(7) MMF, не только люди отбирают идеи, но и наоборот.
Базу я восстановил, она работает. Если еще кому-то пригодится - буду рад. А те, кто не понял, пусть используют другие способы (я их не отвергаю, просто у меня на один способ больше)...

Кстати, когда файл не читается, стандартные средства тестирования/лечения нередко просто "валятся"...
9. Антон Стеклов (asved.ru) 18.04.14 04:48
Я бы предложил читать постранично структуру 1CD, и копировать поврежденные страницы.
Светлый ум; chinser; +2 Ответить 1
10. Сергей Зеленовский (zels) 18.04.14 08:12
(9) asved.ru, когда появится конкретная необходимость, буду смотреть.
Сейчас програмка универсальная и простая, ей все равно какие файлы склеивать - от 8-ки, от 7-ки или какие-то еще...
11. Анянов Михаил (insurgut) 18.04.14 08:34
(10) zels, т.е. если конфигурация не изменяется - данные всегда в конец в файловой базе дописываются?
12. Сергей Зеленовский (zels) 18.04.14 09:05
(11) insurgut, не знаю как платформа ведет себя "вообще", но в моем случае это было так.
Гарантий нет, но надеяться можно, имхо. Я полдня убил на тестирование винчестера, попытки восстановить файл.
Потом написал програмку, которая за 5 мин все восстановила и последующее тестирование ошибок не нашло.

Имхо, потратить 5 мин+тестирование - небольшие временные затраты для такого экстраординарного случая (базы физически портятся довольно редко). Получится - замечательно, а не получится - надо пробовать другие способы.

Я не позиционирую этот подход, как универсальный способ с гарантией результата. Просто это:
1. Может сработать сразу.
2. Занимает мало времени.
3. Полученный файл (у которого испорченные блоки забиты нулями) можно попробовать восстановить штатными средствами.

А любителям стрелять из пушек по воробьям никто не мешает...
13. Антон Стеклов (asved.ru) 18.04.14 09:09
Новые страницы данных добавляются в конец, это верно. Но:

1) Первая страница и некоторые другие являются оглавлением
2) Кроме запросов INSERT, существуют еще и запросы UPDATE.
14. Сергей Зеленовский (zels) 18.04.14 09:36
(13) asved.ru, если бы сбой был в начале, я возможно и не стал пробовать.
Но поскольку сбой был на 10Мб, я рассчитывал, что служебная информация и данные не пострадали. И рад, что не ошибся.
15. Василий Зайцев (vasiliy_b) 18.04.14 09:45
Может тогда стоит допилить утилиту для подмены только той части файла где лежит конфигурация, а если повреждения в области данных, то выдавать соответствующее сообщение.
16. Андрей Овсянкин (Evil Beaver) 18.04.14 10:48
(4) script,
Оказывается и среди 1С-ников встречаются программисты


и чаще, чем вы думаете. А если считывание блоков из файла для вас уже признак Программиста(тм), то хм....
wunderland; +1 Ответить
17. mikhail burlakov (burlakov) 18.04.14 10:52
мда. представляю сколько денег можно на таком восстановлении заработать. клиенты порой готовы платить любые суммы (по собственному опыту). сама методика реально интересна!
18. Сергей Сергей (avtospanov) 18.04.14 11:00
интересная методика восстановления файла базы
19. Сергей Зеленовский (zels) 18.04.14 12:39
(17) burlakov, не на таком, но можно.
Как-то у клиента полетел сравнительно новый raid и пришлось почти неделю собирать базу по кусочкам из 4-х баз (2 SQL и 2 файловых). Правда, там пришлось действовать не через чтение 1CD, а через прямые запросы к SQL и специальные обработки XML-загрузки/выгрузки.

А для разборок с логическими проблемами в 1CD есть прекрасные решения здесь, на инфостарте. Вот, к примеру отличная статья: Файловые базы *.1CD. Физическая структура. Восстановление
Зачем с ними конкурировать? Их надо использовать (что и делаю иногда).
asved.ru; +1 Ответить
20. 12345 12345 (12345qwerty) 18.04.14 20:05
Надо развивать идею , может и что стоящее выйдет
TrinitronOTV; +1 Ответить
21. Эмиль Карапетян (amon_ra) 18.05.14 10:38
если мне не изменяет память ошибка CRC это ошибка считывания информации с HDD, т.е. тут проблема с самим хардом, вероятно бэды. Мы в свою очередь часто встречаемся с такими ошибками, конечно ваш вариант интересный с точки зрения дальнейшего развития, однако, мы разрешали ситуацию путем копирования файла с битого сектора утилитой "non-stop copy", затем чекали и если, что то пропадала/убивалось дополняли/правили в хекс редакторе (им реже пользовались, в основном после chdbfl догружали недостающие данные, которые были на битых секторах). К слову, сказать размер БД у нас досттаочно огромен.
А за идею и разработку, конечно, плюс. Развивайте идею, разработка довольно интересная и спрос у нее по-любому появится.
22. Сергей Зеленовский (zels) 19.05.14 08:59
Да, CRC-ошибка означает сбой на HDD. Я пробовал non-stop copy, но прочитать без сбоев не удалось. Поэтому и написал свою утилиту, которая пытается скопировать что можно, а что нельзя - подставить из другого файла. Можно заменить сбойные блоки и вручную, но это займет больше времени. Что касается развития. Тут я сторонник unix-подхода: пусть каждая утилита делает свое дело, но делает его хорошо.
Задачи этой:
- сделать из нечитаемого файла читаемый
- показать, в каких блоках проблемы
- при наличии архива заменить нечитаемые блоки

По ссылке Файловые базы *.1CD. Физическая структура. Восстановление. очень много полезной информации и других ссылок, а также есть описание замечательного инструмента Tool_1CD. Я делал "для себя" 1С обработку, которая читает блоки 1CD-файла и использует для работы компоненту 1CDLib Компонента для прямого чтения/записи данных из файлов баз данных .1CD Прилагаю обработку, каждый может ее использовать и допиливать для "сырого" чтения 1CD-файла (компоненту 1CDLib надо скачать отдельно, если ее нет). Делал для себя, так что она не причесана и строго не судите...

Развивать утилиту в этом направлении пока смысла не вижу, ее можно использовать совместно с 1CDLib и Tool_1CD.
Кроме того, при проблемах с 1CD-файлом его можно отправить в 1С для восстановления (главное, чтобы он был и читался).
Для "глубокого бурения" может понадобиться такой инструмент, как программа чтения логической структуры нескольких 1CD-файлов с копированием и модификацией таблиц (см статьи по ссылкам).

Я думаю, что когда очень нужно восстановить файл, а стандартные средства (включая отправку на техподдержку) не помогают, нужно будет разрабатывать индивидуальную утилиту для исследования и исправления. Заготовка такой утилиты есть, но к сожалению (или к счастью) пока не понадобилась для реального восстановления. По сути это C++ проект, который изменяется под конкретный 1CD-файл. Но это чисто теоретические размышления, слабо подкрепленные практикой (так, потренировался на одном битом файле).
Прикрепленные файлы:
DLL_1CDLib.epf
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа