пятница, 1 ноября 2013 г.

Windows 7. Восстанавливаем работоспособность системы...

... с помощью убунты и нескольких непечатных слов.

В общем, принесли мне неделю назад ноутбук с такой проблемой. При загрузке Windows 7 starter запускается программа восстановления загрузки, некоторое время крутится, потом выдает ошибку, что восстановление системы невозможно, и предлагает отправить куда-то в майкрософт примерно такое сообщение:
Problem Event Name: StartupRepairOffline
Problem Sig 1: 6.1.7600.16385
Problem Sig 2: 6.1.7600.16385
Problem Sig 3: unknown
Ptrobel Sig 4: 21201028 (тут я не помню, какие на самом деле цифры)
Problem Sig 5: AutoFailover
Problem Sig 6: 11
Problem Sig 7: Corrupt File
Не очень информативно, честно говоря. После этого ноутбук перезагружается, и картина повторяется.

Первым делом захотелось сделать образ диска - с моими кривыми руками весьма своевременное желание. Но вот чем? Полез гуглить. После некоторого поиска набрёл на вот такую табличку. В представленном списке заинтересовали две программы: Clonezilla и Redo Backup and Recovery. Обе под лицензией GPL, обе устанавливаются на флэшку (на ноутбуке CD-привода нет), в общем, то, что нужно.

Сначала, конечно, попытался использовать Clonezilla (в названии прослеживаются аллюзии с мозиллой, значит, решил, солидный софт). Поставил эту ботву на подвернувшуюся под руку флэшку, попытался с нее загрузиться и... Ну, в общем, ясно - загрузиться мне с неё не удалось. Покопался fdisk-ом в разделах и решил, что дело вот в чём. По инструкции первый, загрузочный раздел начинается с 1 сектора, а у меня почему-то с 2048. Победить эту печаль удалось запустив команду fdisk следующим образом:
fdisk -c=dos /dev/sdb
Переразметил диск, распаковал на него архив этой Clonezillы, сделал его загрузочным, прицепил к свободному USB-порту внешний диск для образов, загрузился. Clonezilla пошуршала, и сообщила, что ей потребуется больше сорока часов для создания образа диска объемом 250Gb. Это немножко насторожило, но я согласился. На третьи сутки работы эта чудесная софтина вывалилась по эксепшену, не добежав до финиша примерно 20%.

Второй раз я решил не геройствовать и воспользовался Redo Backup and Recovery. Несмотря на её приятный графический интерфейс обнаружилась интересная особенность: для того, чтобы создать загрузочную флэшку, предлагается загрузиться с CD. Этакий pkunzip.zip в современном исполнении. Свой домашний компьютер перезагружать лень, поэтому воспользовался VirtualBox-ом - примонтировал образ диска, прицепил флэшку, загрузился и закинул на флэшку образ при помощи встроенной утилиты.

Но не тут-то было. Свежезаписанная флэшка грузиться отказалась. Опять. Стал выяснять, чем всё-таки этот чертов загрузочный диск можно на флэшку поместить. Оказалось, что под убунтой есть специальная утилита, usb-creator-gtk, которая подозрительно напомнила то, чем пытался сделать загрузочную флэшку оригинальный Redo B&R. И, как и следовало ожидать, результат получился тот же.

В конце концов обратился к варианту, который не рекомендуют авторы обеих этих утилит, а именно к UNetbootin. И - о, чудо - наконец-то удалось загрузиться почти без проблем. После этого Redo Backup and Recovery бодро проработал 7 часов, и у меня на руках оказался, наконец, вожделенный образ ноутбучного диска. Тогда я еще не знал, что это за образ...

После этого приступил к доламыванию Windows 7. С помощью ноутбучных утилит забрался в Recovery Console и попытался воспользоваться вот этой инструкцией. Безуспешно: в папке c:\windows\system32\config\RegBack файлы DEFAULT, SAM, SECURITY, SOFTWARE и SYSTEM оказались нулевого размера.

Гуглю дальше. Согласно очередной инструкции попытался выполнить вот такой набор команд:
bootrec.exe  /fixmbr
bootrec.exe  /fixboot
bootrec.exe  /RebuildBcd
Последняя команда отрапортовала, что Total identified Windows installations: 0, и, соответственно, ничего она менять не будет. На этот счет обнаружилась другая инструкция, по совету которой выполнил еще несколько команд:
bcdedit /export c:\bcdbackup
attrib c:\boot\bcd -h -r -s
ren c:\boot\bcd bcd.old
bootrec.exe  /RebuildBcd
Ура, ура, на этот раз всё получилось.

Перезагрузил ноутбук. Картина радикально поменялась - Windows перестала запускать даже Recovery Console, зато честно сообщила, чего ей не хватает:
PCIIDEX.SYS
Status: 0xc0000098.
Info: Windows failed to load because a required file is missing, or corrupt
Заинтересовался, как же выглядит этот файл на пострадавшей машине. Самым простым способом, подумалось, будет примонтировать ранее созданный образ к своей убунте и там глянуть. И тут выяснилось, что полученный через тернии образ представляет собой набор из шестидесяти двухгигабайтных файлов, который как примонтировать к линуксу, похоже, не знают сами авторы. Попутно выяснилось, что Redo Backup and Recovery - всего лишь фронтенд для другой утилиты, partclone. Но образ partclone - вроде как один файл, и его убунта монтировать умеет:
sudo dpkg -i partclone-utils_0.1-1_i386.deb
sudo sudo apt-get install nbd-client
sudo imagemount -d /dev/nbd0 -f sda1-partclone.img
sudo mount /dev/nbd0 /media/temp
А тут вместо одного файла что-то хитрое. Решил не мучиться дальше и восстановить образ в виртуалке - благо, дисковое пространство позволяет. Развернул (потребовалось раза в три больше времени, чем на снятие образа), примонтировал командой:
sudo mount -t ntfs /dev/sdb2 /media/notebook-image
и обнаружил, что pciidex.sys, расположенный в папке \windows\system32\drivers, имеет нулевой размер.

Дальше уже дело техники - нашел живую машину с windows 7, сдернул с неё этот файл (он оказался размером 42560 байт), и с помощью всё той же загрузочной флэшки с Redo Backup and Recovery положил этот файл на место нулевого.

И - надо же - всё загрузилось 8-)

воскресенье, 22 сентября 2013 г.

HASP HL - просмотр ключей

Для того, чтобы просмотреть информацию о ключах HASP HL, можно воспользоваться обычным браузером, перейдя по ссылке: http://localhost:1947/accrus/devices.html

UPD 2013-11-05: набрёл на faq

суббота, 21 сентября 2013 г.

Ubuntu: работа с mkvtoolnix

Понадобилось тут достать субтитры из файла mkv. Оказывается, есть набор утилит для работы с этим форматом, называется он mkvtoolnix. Состоит как минимум из трех: mkvmerge, mkvinfo и mkvextract.

Посмотреть содержимое файла:
mkvinfo myFile.mkv

Извлечь нужный раздел в отдельный файл:
mkvextract tracks myFile.mkv (идентификатор раздела):newFile
Например: mkvextract tracks myFile.mkv 2:subtitles.ass.

воскресенье, 21 июля 2013 г.

Android: настраиваем IPTV

В общем, ситуация следующая: есть Android-планшет (DNS AirTab M100), который через WiFi подцеплен к роутеру D-Link DIR-300. Этот роутер, в свою очередь, общается с инетом через провайдера (Новотелеком, если кому интересно). У провайдера есть услуга IPTV. Возникает естественный вопрос - как это богатство завести на планшет?

Алгоритм такой:

1. Настраиваем роутер. В админке, в меню Advanced - Advanced network, устанавливаем галочки напротив пунктов Enable Multicast Streams и Wireless Enhance Mode.

2. Настраиваем планшет. Из Google Play Маркета устанавливаем MX Player - он вроде как нужен для проигрывания видео.

3. Из всё того же Google Play Маркета устанавливаем IPTV-плеер, в котором прописываем URL-адрес плей-листа (в формате m3u).

4. Этот IPTV-плеер что-то спрашивает про настройку UDP-прокси, я соответствующую галочку (использовать прокси) снял, ничего плохого от этого не случилось.

5. Вроде как всё.

воскресенье, 30 июня 2013 г.

Slackware: зависла мышь

С какого-то перепугу стала зависать мышь. Компьютер вроде бы работает, но курсор не двигается, и на нажатия кнопок/прокрутку колеса реакции ноль.
Помогли вот эти две команды в консоли:
sudo rmmod psmouse
sudo modprobe psmouse

воскресенье, 16 июня 2013 г.

Нормальный алгоритм Маркова

В общем, помыкавшись по интернету, обнаружил поразительную вещь: нечасто встречаются реализации нормального алгоритма Маркова, у которых корректно отрабатывает правило:
$0->0$$$$$$$$$$

Не знаю уж, почему так. Точнее, выяснилось, что как-то хитро себя ведет джаваскриптовская функция string.replace(), но дальше разбираться лень. Поэтому накидал свой собственный велосипед.

Введите начальную последовательность символов:



Нормальный алгоритм Маркова (например, a->b):

четверг, 6 июня 2013 г.