Преамбула
Принесли мне тут в починку компьютер с наглухо залитыми эпоксидкой USB портами (безопасность же) и поставили задачу переустановить винды, в связи с заменой сгоревшего HDD на новый. По счастью сетевой порт был, так что единственным доступным способом доставить туда винды, был PXE. Но, в данном случае, речь пойдет не о PXE.
Зная клиента, который, несмотря на солидность, периодически «придет, и молча уронит все», я подумал, что так дело не пойдет. Надо предусмотреть возможность восстановить если что, ОС прямо с компьютера. Чтоб клиент не бегал вокруг меня, если уронит винду из-за кривого ПО/рук.
Всем хорош образ загрузочного диска Acronis True Image, и копию ОС сделать может, и восстановить может, и Зону Безопасности (скрытый раздел для хранения бэкапов) создать может. Не может лишь одного — установить свой загрузчик, чтобы можно было сделать «Восстановление при загрузке».
В десктопной платной версии такая функция есть, а в Recovery CD буржуи ее вырезали. Но мы не дворяне, справимся.
Внимание! Все нижеследующее работает для компьютеров с BIOS (или в Legacy-режиме) с MBR-дисками.
Необходимые инструменты
— Загрузчик syslinux
. Можно взять здесь. Я пользовался версией 4.02, которая мне уже была знакома по настройке PXE-сервера. Из архива нам понадобятся только некоторые файлы, но я уже собрал готовый пакет, ссылка на который будет в конце заметки. Вместо syslinux
можно использовать какой-нибудь другой загрузчик, который умеет грузить ISO-образы (например grub2
или grub4dos
), но далее все будет про syslinux
.
Примечание: Вообще syslinux
, это набор загрузчиков на разные случаи жизни. Он включает в себя pxelinux
(для загрузки из сети), isolinux
(для создания загрузочных ISO) и extlinux
, для установки загрузчика на жесткий диск. Но, с 4 версии постановили extlinux
и syslinux
считать одним и тем же [1], так чтоб никого не путать, далее буду называть все syslinux
‘ом
— Какой-нибудь маленький live-дистрибьютив Linux. Я использовал уже довольно пожилой Puppy Slacko 5.5 Rus, немного модифицированный когда-то давно под работу с tcplay
— Собственно сам образ Acronis True Image Recovery CD. Использовал старый, от Acronis True Image 2011, потому что он довольно небольшой (122 Мб против 522 от Acronis True Image 2015, например). Поскольку это софтина проприетарная, пользуйтесь гуглем и торрентами.
Делим диск и ставим Windows
Я все делал на чистом диске, так что мне было просто.
В начале диска создаем основной раздел EXT2 или EXT3, в котором будет установлен загрузчик, лежать образ Acronis True Image, а у меня еще и дистрибьютив Puppy Slacko, чтоб чуть что можно было загрузиться в обход основной ОС. Делаем с помощью любимого менеджера дисков (я пользовался Acronis Disk Director).
Структура разделов должна выглядеть как-то так:
Желательно сделать раздел для нашего будущего загрузчика в начале диска, чтоб потом не было эксцессов. Когда экспериментировал с этим делом первый раз, Acronis, при создании Зоны безопасности, нагло передвинул раздел, и все пошло прахом.
Syslinux, на самом деле, можно ставить и в логические разделы, только это сопряжено с большими телодвижениями (см. в источниках в конце заметки).
Установим Windows на свободное место. Установщик Windows 7 и выше сам создаст необходимые разделы под свой загрузчик (bootmgr
и настройки) и основной раздел с ОС. После установки Windows структура диска должна выглядеть так:
Сборка пакета для установки загрузчика
Просьба линуксоидам камнями не кидаться, «пакет», в данном случае, не совсем то, что подразумевается под пакетом в терминах Linux-систем. В данном случае, это набор файлов, который необходим для установки syslinux
на целевой машине. Я делал это на «большом» Линуксе, но можно делать это и на том же самом Puppy (и даже в Windows, хотя на практике я не проверял). Ленивые могут пропустить этот шаг, готовый пакет будет в конце заметки.
1. Создаем в удобном месте подкаталог, например slinstall
, там будет готовый набор файлов для целевой машины.
2. В другой подкаталог распаковываем архив с syslinux
(например, syslinux-4.02.tar.gz
), в нашем примере подкаталог будет называться sysl-distr
3. Копируем в каталог slinstall
файл extlinux
из каталога sysl-distr/extlinux
— это установщик загрузчика.
4. Создаем в каталоге slinstall
подкаталог mbr
и копируем туда файлы sysl-distr/mbr/mbr.bin
и distr/mbr/altmbr.bin
5. Создаем в каталоге slinstall
подкаталог modules
и копируем туда модули загрузчика.
Syslinux, на самом деле, не просто загрузчик, а, можно сказать, целая маленькая операционная система. Функции загрузчика расширяются модулями — файлами специального формата, которые загрузчик может выполнять, примерно как ОС исполняемые файлы. Файлы эти имеют расширение c32
(*.c32
). Минимальный набор модулей для нашей задачи — модуль отображения меню menu.c32
и модуль chain.c32
— он передает загрузку другим (не-Linux) операционным системам, загрузчикам, или просто в нужный раздел диска. Но можно скопировать и другие модули, если захочется расширить функционал начальной загрузки. Необходимо найти нужные файлы (через поиск mc
в Linux или любым удобным способом) в каталоге sysl-distr
и скопировать их в slinstall/modules
В Линукс это можно сделать из командной строки так (находясь в каталоге sysl-distr
):
find ./ -name "*.c32"|xargs -I {} cp '{}' /home/user/slinstall/modules
где /home/user/slinstall/modules
— полный путь к подкаталогу slinstall/modules
6. В slinstall/modules
необходимо также скопировать специальный модуль memdisk
, предназначенный для загрузки ISO-образов. Обычно расположен по пути memdisk/memdisk
в каталоге с распакованным syslinux
(тут sysl-distr
).
7. Пакет готов, теперь можно запаковать его в архив, и приступать к установке загрузчика.
В Linux можно выполнить (выйдя из каталога slinstall
на уровень выше)
tar -czvf syslinux-install.tar.gz ./slinstall
Копирование необходимых файлов на раздел EXT2/EXT3 целевого компьютера.
Предположим, у нас есть загрузочная флешка с Puppy Linux (или другим Linux на ваш вкус), копируем на нее образ Acronis True Image, выше созданный пакет с загрузчиком, и архив с дистрибутивом самого Puppy (см. ниже, в разделе «Скачать»).
В графическом интерфейсе все можно делать мышью, я приведу ниже консольные команды. В данном примере флешка — sdb1
, а созданный ранее раздел — sda1
Внимание! Не ошибитесь в том, как именованы разделов на конкретной машине!
1. Создаем точки монтирования (пропустить шаг, если запущен графический интерфейс Puppy. Просто щелкнуть мышью по нужной иконке диска на desktop’е)
mkdir /mnt/sda1
mkdir /mnt/sdb1
2. Монтируем диски (пропускается из графического интерфейса):
mount -t ext3 /dev/sda1 /mnt/sda1
mount -t vfat /dev/sdb1 /mnt/sdb1
Может быть нужным заменить ext3
на ext2
и/или vfat
на ntfs
в зависимости от используемых файловых систем.
3. Создаем директорию для образа Acronis True Image Recovery CD на разделе sda1
и копируем образ.
mkdir /mnt/sda1/acronis
cp /mnt/sdb1/loader.iso /mnt/sda1/acronis/
4. Копируем и распаковываем дистрибутив Puppy (если он нужен)
cp /mnt/sdb1/puppy-slacko-rus-5.5-hexmod.tar.gz /mnt/sda1/
cd /mnt/sda1
tar -xvf puppy-slacko-rus-5.5-hexmod.tar.gz
rm puppy-slacko-rus-5.5-hexmod.tar.gz
5. Копируем и распаковываем пакет установки syslinux
:
cp /mnt/sdb1/ syslinux-install.tar.gz /mnt/sda1/
cd /mnt/sda1
tar -xvf syslinux-install.tar.gz
rm syslinux-install.tar.gz
Устанавливаем загрузчик syslinux
Внимание! Установка
syslinux
производится не на устройство, а на заранее смонтированный раздел. Загрузчик нельзя устанавливать в корень диска, необходимо создать для него каталог, например
/boot/syslinux
. Не перепутайте разделы диска, куда устанавливаете загрузчик! Раздел с загрузчиком должен иметь файловую систему FAT, ext2, ext3, ext4 или Btrfs
1. В любимом менеджере дисков делаем раздел EXT2/EXT3 активным.
2. Загружаемся, если еще не, в live-дистрибьютив Linux.
3. Создаем точку монтирования и монтируем раздел (если еще не сделано)
mkdir /mnt/sda1
mount -t ext3 /dev/sda1 /mnt/sda1
4. Создаем каталог для загрузчика:
mkdir -p /mnt/sda1/boot/syslinux
ключ -p
указывает команде mkdir
, что нужно создавать путь со всеми подкаталогами.
5. Создаем каталог для модулей и копируем их:
mkdir -p /mnt/sda1/boot/syslinux/modules
cp /mnt/sda1/slinstall/modules/* /mnt/sda1/boot/syslinux/modules
6. Переходим в каталог slinstall
и устанавливаем загрузчик:
cd /mnt/sda1/slinstall
./extlinux --install /mnt/sda1/boot/syslinux
Если все сделано верно, последняя команда выдаст сообщение:
/mnt/sda1/boot/syslinux is device /dev/sda1
В каталоге /mnt/sda1/boot/syslinux
должен находиться файл ldlinux.sys
, кстати, неудаляемый. В [1] написано, как его, если что, удалить.
Настройка MBR
Syslinux, внезапно, сам не умеет прописываться в MBR диска, да и в загрузочный сектор раздела. Так что если перезагрузиться сейчас, то получим при загрузке сообщение Boot error
и глухое зависание. MBR, к сожалению, придется править вручную, с помощью команды dd
.
Внимание! Команду dd
не зря называют Disk Destroyer, будьте с ней очень осторожны! При ошибке легко можно похерить не только MBR, но и таблицу разделов, и данные на диске!
MBR находится в первых 440 байтах на диске.
1. Переходим в каталог slinstall
:
cd /mnt/sda1/slinstall
(естественно, точка монтирования должна быть создана, а раздел примонтирован).
1. Создаем копию текущей MBR:
dd if=/dev/sda of=old.mbr bs=440 count=1
В текущем каталоге должен появиться файл old.mbr
размером 440 байт. Можно, и даже желательно, указать и какой-нибудь другой путь к файлу old.mbr
, сохранив его, например, на флешке:
dd if=/dev/sda of=/mnt/sdb1/old.mbr bs=440 count=1
2. Устанавливаем MBR syslinux
:
dd bs=440 count=1 conv=notrunc if=mbr/mbr.bin of=/dev/sda
Примечания:
Краткое пояснение по команде dd
:
bs=<число>
— сколько байт необходимо прочитать.
count=<число>
— число уазывает на то, сколько раз будет прочитано количество байт, указанное в параметре bs=
if=<путь к устройству или файлу>
— откуда будут прочитаны данные
of=<путь к устройству или файлу>
— куда будут записаны данные
Осталось сделать загрузочное меню.
Загрузочное меню
Вот пример загрузочного меню, главное, правильно установить раздел с загрузчиком винды — в syslinux отсчет разделов ведется с единицы (0 — MBR жесткого диска), отсчет дисков с ноля, и надо помнить, что единица таймера загрузки syslinux равна 0.1 секунде.
ui modules/menu.c32
PROMPT 0
menu title Local boot
LABEL windows
menu label Microsoft Windows 7
kernel modules/chain.c32
append hd0 2
timeout 1000
TEXT HELP
Loading Windows 7
ENDTEXT
LABEL recovery
menu label System recovery
kernel modules/memdisk
initrd ../../acronis/loader.iso
append iso raw
LABEL slacko
menu label Puppy Linux Slacko 5.5
kernel ../../slacko/vmlinuz
initrd ../../slacko/initrd.gz
На PasteBin
Осталось загрузиться с жесткого диска, создать зону безопасности Acronis и сделать бэкап первых трех разделов в нее
Вот финальная структура диска.
Источники
1.Syslinux (Русский)
2. Comboot/chain.c32
3. Syslinux wiki
Архивы
puppy-slacko-rus-5.5-hexmod.tar.gz
syslinux-install.tar.gz
syslinux-mini.tar.gz