Реестр windows под linux

Редактирование реестра Windows из Ubuntu

Тем, кто занимается администрированием Windows, Ubuntu тоже может послужить хорошую службу в качестве «спасательной» рабочей среды, которую можно запустить с диска или USB-флэшки, например, на зараженном вирусом компьютере, чтобы провести «оперативное лечение».

Тут можно и проверить файловые системы на ошибки, и отредактировать разделы жесткого диска, и внести правки в файлы, и даже сбросить пароль Windows! А сегодня хочу рассказать еще об одной интересной возможности — редактировании реестра Windows из Ubuntu.

Для чего может понадобиться редактировать реестр из Ubuntu? Элементарный пример: вирус заблокировал Windows — в систему войти невозможно.

Необходимо найти и удалить блокиратор из автозагрузки Windows, но сделать это в самой Windows — невозможно. Что же остается делать?

Загружаемся с диска Ubuntu, USB-флэшки Ubuntu или устанавливаем Ubuntu второй системой.

Открываем терминал (CTRL+ALT+T). Устанавливаем пакет chntpw:

Теперь нам необходимо подключить диск с Windows к системе. Для начала, определимся где он и как называется:

ищем раздел NTFS с нужным размеров (вы ведь знаете, какого размера у вас диск C: ?). Смотрим как он называется (будет что-то вроде: /dev/sda2) и далее выполняем:

sudo mount /dev/sda2 /media/windows

где заменяем /dev/sda2 на свой вариант.

Запускаем утилиту для редактирования реестра Windows:

chntpw -l /media/windows/Windows/system32/config/software

Редактирование осуществляется перемещением по веткам реестра, по аналогии с папками — командой cd, например:

cd MicrosoftWindows NTCurrentVersionWinlogon

просмотр ключей в текущей ветке — команда dir. ключи редактируются командой ed, например:

RegEdit под Linux

Собираю для себя на основе Slax «спасательный» liveUSB, чтобы которым можно было бы ковырять не только рухнувшие линуксы, но и венды. Для этого неплохо бы иметь в состеве прочих программ редактор реестра для альтернативной ОС.

Не встречал ли кто-нибудь такой?

Re: RegEdit под Linux

Встречал. Не помню.

Re: RegEdit под Linux

может под wine заработает, если конечно найдёшь такой, которому можно другую директорию винды указывать

Re: RegEdit под Linux

В wine есть собственный редактор реестра

Re: RegEdit под Linux

ЕМНИП можно запустить под вайном regedit.exe из родной папки windows.

Re: RegEdit под Linux

>ЕМНИП можно запустить под вайном regedit.exe из родной папки windows.

а он не реестр вайна случаем подредактирует?

Re: RegEdit под Linux

> а он не реестр вайна случаем подредактирует?

Стандартным вендовым редактором реестра можно открывать файлы реестра дургой операционки, так что все ок.

Не хотелось бы тащить wine в liveUSB.

Re: RegEdit под Linux

chntpw умеет редактировать реестр. А вообще для восстановления разных ОС есть SystemRescueCD. Там есть и chntpw.

Re: RegEdit под Linux

> Стандартным вендовым редактором реестра можно открывать файлы реестра дургой операционки, так что все ок.

Разве? Я всегда считал что он реестр редактирует только с помощью стандартных функций WinAPI и сам по себе ничего не умеет.

Re: RegEdit под Linux

> Разве? Я всегда считал что он реестр редактирует только с помощью стандартных функций WinAPI и сам по себе ничего не умеет.

Читайте также:  Windows start exe file

Файл -> Загрузить куст.
Выбираем файл, в котором хранится та или иная ветвь реестра (%windir%\System32\config) и радуемся жизни.

Re: RegEdit под Linux

> Файл -> Загрузить куст.
> Выбираем файл, в котором хранится та или иная ветвь реестра (%windir%\System32\config) и радуемся жизни.

Наличие этой возможности WinAPI не отменяет, кагбе.

Перенос ОС Windows на другой компьютер средствами ОС Linux

После прочтения статьи «Фривольное клонирование ОС MS Windows XP / Server 2003 своими руками, средствами GNU/Linux» возникло естественное желание дополнить ее в соответствии с реалиями конца 2014 года.

В общем, проблема разворачивания той или иной версии Windows состоит из двух частей — во-первых, нужно скопировать данные разделов с эталонного ПК на новый, и, во-вторых, надо обеспечить загрузку Windows на изменившемся оборудовании.

MBR, таблица разделов и сигнатура диска

Начнем с копирования данных. Какие же данные нам нужно скопировать? Для Windows XP это MBR (446 байт в начале диска, основная таблица разделов и завершающая сигнатура 55AAh), данные о расширенных разделах и собственно данные системного раздела Windows. Для Vista и Windows 7 добавляется еще и 100-мегабайтный системный раздел (GPT не рассматриваем). При этом нужно помнить, что первый раздел в Windows XP по-умолчанию начинается с сектора 63, а в Windows Vista/7 — с сектора 2048. Естественно, все операции мы будем проводить на незапущенной Windows, загрузившись с System Resque CD.

Так вот, не стоит копировать MBR «в лоб», для этого в Linux существует утилита ms-sys, которая записывает загрузчик любой версии Windows от Win95 до Win7 в MBR. Для сохранения и восстановления структуры разделов есть утилита sfdisk.

Добавлено:
Для того, чтобы WIndows загрузилась, необходимо также сформировать подпись диска (disk signature). Для этого нужно прочитать содержимое ключа реестра HKLM\SYSTEM\MountedDevices\ , и выделить первые 8 байт (в шестнадцатеричной записи), например: 4F BE 4F BE. Сделать это на смонтированном в Linux NTFS-томе можно с помощью описанной ниже утилиты reged. Следует учесть, что в reged имя ключа, содержащее слеш, нужно указывать через двойной слеш, например: \\DosDevices\\C:. Затем указанные 8 байт следует записать на диск начиная со смещения 0x01B8 утилитой hexedit. После этого диск готов к загрузке.

Данные разделов NTFS

После копирования MBR и структуры разделов можно копировать собственно данные разделов с помощью partclone. Инструмент partclone позволяет создавать образы разделов ext2/3/4, fat, ntfs, xfs, btrfs, reiserfs и т. д., анализируя внутреннюю структуры ФС и включая в образ только используемые сектора. Создадим на эталонном ПК образ раздела с помощью partclone, размер образа будет равен размеру используемого на томе места.

а на целевом компьютере развернем его

или
К сожалению, внутреннее сжатие в образе не поддерживается.

Возможно также прямое копирование данных с одного устройства на другое с помощью ключа -b:

Теперь рассмотрим вопрос восстановления данных на раздел размера, меньшего, чем эталонный. Для этого нужно смонтировать partclone-образ и либо скопировать с него файлы на целевой том с сохранением атрибутов, разрешений, hardlink-ов и прочих свойств NTFS, либо уменьшить размер раздела NTFS внутри образа partclone, а уже затем скопировать этот уменьшенный раздел на целевой том командой partclone.ntfs с ключом -b.

Мне не известны инструменты, которыми можно было бы в Linux скопировать файлы и hardlink-и с одного тома NTFS на другой со всеми атрибутами и потоками (если кому-нибудь они известны, прошу в комментарии), так что у нас остается только вариант с уменьшением размера тома. К счастью, существует инструмент imagemount, который экспортирует partclone-образ как блочное устройство nbd и поддерживает монтирование образа в том числе и на запись, при этом изменения сохраняются в отдельном файле (ключ -с). Экспортируем том на запись

Читайте также:  Как убрать временные файлы windows

Теперь изменим размер ФС на томе NTFS. Сначала будет сделан тестовый прогон (ключ -n)

а затем — реальный:

К сожалению, partclone не поддерживает сжатие образов, но эту проблему можно обойти с помощью так любимых в Linux костылей и подпорок. Создадим пустой образ формата qcow2 с виртуальным размером, заведомо превышающим наши потребности (например, 1 Tb). Его реальный объем будет увеличиваться в зависимости от количества данных, которые мы туда запишем.

Смонтируем его как блочное устройство

Теперь скопируем на виртуальное устройство файловую систему

размонтируем устройство и в результате получим файл qcow2 с размером чуть больше, чем размер исходного NTFS-тома. Теперь к файлу можно применить внутреннее сжатие:

Легко заметить, что этот способ требует удвоенного места на диске для хранения исходного и сжатого образов, а также дополнительное время на сжатие. Если мы применим еще один костыль, то избавимся и от этих недостатков. После монтирования образа qcow2 (командой qcow-nbd -c /dev/nbd0 ) отформатируем его в файловую систему btrfs

а теперь смонтируем со сжатием:

и создадим образ файловой системы NTFS

После этого размонтируем все.

В результате мы получим файл образ со сжатием, в который включены только используемые сектора и который можно смонтировать через imagemount как файловую систему и прочитать его содержимое.

Мне, например, удалось уменьшить размер образа со свежеустановленной Windows XP c 2,7 Gb до 587 Mb. При этом можно смонтировать образ без распаковки и просмотреть файлы внутри.

Гораздо лучше, чем набившие оскомину dd | gzip, не так ли?

Запуск Windows на новом оборудовании

Теперь перед нами стоит вторая задача — сделать так, чтобы установленная на том NTFS Windows смогла запуститься. В случае Windows 7 копируем еще и загрузочный раздел, для Windows Vista — дополнительно делаем (с Windows Vista Live CD) перезапись BCD, чтобы данные в этой области соответствовали серийному номеру жесткого диска, проверяем, чтобы у загрузочного раздела стояла соответствующий флаг boot (можно сделать через parted) и перезагружаемся. После чего с некоторой вероятностью получаем синий экран с надписью 0x0000007B Inaccesseble boot device. В этом случае для Windows XP рекомендуется выставить правильный HAL, но вот незадача, я уже давно не встречал одноядерные ПК без APIC и тем более ACPI, так что наш эталонный образ скорее всего уже содержит правильный многопроцессорный HAL. Поэтому не стоит надеяться, что замена HAL сразу исправит нашу проблему. Скорее всего, причина в том, что Windows не распознала контроллер жесткого диска, и, соответственно, не смогла продолжить с него загрузку.

Допустим, мы не пользовались sysprep при создании эталона (а то получиться неспортивно, потому что sysprep сделает всю работу за нас). Попробуем разобраться, почему ОС Windows не находит контроллер диска на новом оборудовании, несмотря на то, что в случае «чистой» установки она этот контроллер видит. Дело в том, что на завершающем этапе установки Windows отключает (якобы для ускорения загрузки) все драйверы контроллеров дисков, на которых не расположено системных разделов. Получается как с сусликом в фильме «ДМБ»: система его не видит, но он есть.

Читайте также:  Восстановление рабочего стола windows 10 через командную строку
Включаем IDE-контроллеры: патч MergeIDE

Для Windows XP существует известный патч MergeIDE, который, собственно, и включает в реестре драйверы IDE-устройств обратно, попутно копируя файлы драйверов из driver.cab в \system32\drivers. Проблема в том, что этот патч предназначен для запуска из-под Windows. Попробуем наложить его под Linux вручную. Пусть раздел с Windows XP смонтирован у нас в /mnt, тогда:

Для того, чтобы наложить патч MergeIDE.reg на реестр, нужно его отредактировать, убрав переводы строк с помощью символа «\» в последних строках файла, а затем воспользоваться утилитой reged с ключом -I

Быть может, придется так же исправить ключ CurrentControlSet, который бывает не доступен на незапущенной Windows, на ControlSet001/002.

После этого можно перезагружаться. Надо сказать, в моей практике было несколько случаев, когда запустить образ на другом оборудовании не удавалось ни указанным выше способом, ни с помощью платных инструментов вроде Acronis Universal Restore.

Посмотрев содержимое файла MergeIDE.reg можно увидеть, что вся магия запуска загрузочного драйвера состоит в добавлении записей в две ветви реестра — HKLM\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase и HKLM\SYSTEM\CurrentControlSet\Services.
Ветвь CriticalDeviceDatabase содержит список устройств, необходимых для успешной загрузки системы и задает соответствие между классом устройства и той службой (драйвером), который за нее отвечает, а ветвь Services содержит параметры работы конкретных драйверов. Особенно интересен параметр Start — уровень запуска:
0 — загрузка до старта ядра загрузчиком ОС
1 — загрузка в момент инициализации ядра
2 — загрузка в процессе запуска ОС
3 — загрузка по требованию
4 — не загружать
очевидно, если у нашего драйвера уровень запуска будет отличаться от 0, то соответствующего контроллера в момент загрузки мы не увидим.

MergeIDE.reg оперирует идентификатором класса 4d36e96a-e325-11ce-bfc1-08002be10318 — дисковые контроллеры ATA/ATAPI. Идентификаторы ClassGUID для различных классов устройств известны, их можно найти, например, здесь.
Таким образом можно заставить систему запускать в момент загрузки ядра в память любой драйвер, например, для сетевой карты, если вы загружаетесь через AoE или iSCSI.

Для Windows Vista/7 можно просто пройтись по ветви Services в поисках драйверов, содержащих в названии слово IDE, а потом изменить тип запуска (ключ Start) с «3-отложенный запуск» на «0-загружать в момент загрузки ядра». Для этих ОС есть еще один способ — находим в ветви Services записи msachi и iaStorV (универсальный драйвер AHCI и драйвер AHCI для устройств Intel) и так же изменяем тип запуска с «3» на «0», а потом идем в BIOS и меняем там тип контроллера дисков на AHCI. С Windows XP такой фокус, к сожалению, не прокатит, по причине отсутствия встроенного универсального драйвера AHCI.

Загружаемся с любого IDE или SATA-контроллера: драйвер UniATA

Поэтому обратим внимание на совершенно волшебный драйвер контроллера дисков UniATA от Александра Телятникова aka Alter. Этот драйвер инициализирует любой контроллер, считающий себя IDE- или AHCI-совместимым, а поэтому отлично подходит для наших целей. Порядок установки точно такой же — скопировать файл драйвера, прописаться в CriticalDeviceDatabase и в Services.

Теперь интегрируем в образ файл my_uniata_inst.reg следующего содержания

Здесь ven_8086&dev_2922 — идентификатор установленного SATA-контроллера. Мы также считаем, что CurrentControlSet у нас нет и используем активную ветвь — ControlSet001, номер которой указан в HKLM\SYSTEM\Select\Current.

Оцените статью