Сегодня я расскажу, как подружить загрузчик от программы шифрования Truecrypt и никсовский загрузчик Grub 2. Такая необходимость может возникнуть (и неотвратимо возникает) при попытке установить рядом на одном жёстком диске ОС Windows, зашифрованную бесплатной программой Truecrypt, и unix-образную операционную систему, например Ubuntu.
Основная проблема заключается в том, что Grub не умеет работать с ключами truecrypt и не может расшифровать виндошный раздел, а truecrypt loader не [всегда] умеет загружать другие операционные системы. Существует два основных подхода к решению задачи.
Подход первый. В Master boot record (MBR) находится загрузчик Truecrypt
В принципе, такой вариант должен был бы работать «из коробки» (потому как загрузчик truecrypt умеет передавать загрузу другим загрузчикам на разных разделах жёсткого диска) и не требовать никаких лишних телодвижений от пользователя, но существует несколько подводных камней.
Проблемы, в основном, связаны с тем, что ОС Windows 7 при инсталляции создаёт для себя небольшой загрузочный раздел на 100 мегабайт (он необходим для шифрования с помощью BitLocker), а в такой ситуации трукрипт отказывается установить мультизагрузочный загрузчик «из коробки» при шифровании системного раздела… По крайней мере такое поведение справедливо для Truecrypt версии 7.1a. Таким образом, приходится устанавливать обычный загрузчик трукрипт, который выглядит так:
Как можно заметить, имеется возможность отказаться от ввода пароля, нажав клавишу Esc. В таком случае, нам будет предложен список разделов жёсткого диска, которым можно передать управление для дальнейшей загрузки.
Подводный камень залючается в том, что не всегда /boot раздел Linux присутствует в данном списке. Чтобы он там появился, должно быть выполнено несколько условий. Загрузочный раздел *nix должен быть первичным разделом (primary partiton), а не частью расширенного (не extended patition), должен иметь флаг «загрузочный» («bootable»), а также иметь на себе загрузчик, которому можно передать управление.
Если с первыми двумя условиями всё понятно, и при установке того же Ubuntu можно сразу правильно сконфигурировать жёсткий диск, то с последним условием могут возникнуть затруднения. Дело в том, что Grub версии 2 не любит устанавливаться не в MBR, т.к. при этом используется неотказоустойчивая система и есть вероятность, что загрузчик будет время от времени «слетать». Сообщение об этом вы увидите, когда попытаетесь выполнить команду установки загрузчика на раздел. Для того, чтобы всё получилось необходимо использовать ключ "--force".
sudo grub-install /dev/sda6 --force
где /dev/sda6 — /boot раздел вашего Ubuntu.
Алгоритм
Таким образом, последовательность установки и настройки всего можно описать следующим образом:
- Уснавливаем windows
- Устанавливаем Ubuntu, создав /boot раздел для неё на отдельном первичном разделе, поставив флаг «загрузочный»
- Загружаем Ubuntu и устанавливаем Grub в /boot раздел (как было описано выше)
- Перезагружаемся в windows, устанавливаем Truecrypt, шифруем системный раздел
Теперь у нас в MBR загрузчик Truecrypt.
- Для того, чтобы загрузиться в windows просто вводим правильный пароль от системного раздела
- Для того, чтобы загрузить Ubuntu нажимаем Esc, чтобы отказаться от ввода пароля и выбираем /boot раздел
Траблшутинг
В некоторых случаях Ubuntu может перезаписать загрузчик в MBR на Grub и вы потеряете возможность загружать Windows. Чтобы этого не произошло следует создать резервную копию загрузчика и ключей, необходимых для расшифровки системного диска.
Создаём резервную копию:
dd if=/dev/sda of=~/truecrypt.mbr count=1 bs=512
dd if=/dev/sda of=~/truecrypt.backup count=8 bs=32256
Восстанавливаем из резервной копии (где /dev/sda6 — ваш /boot раздел!) в случае сбоя:
sudo dd if=~/truecrypt.mbr of=/dev/sda count=1 bs=512
sudo dd if=~/truecrypt.backup of=/dev/sda count=8 bs=32256
sudo grub-install /dev/sda6 --force
Подход второй. В Master boot record (MBR) находится загрузчик Grub 2
А как же передать управление загрузчику Truecrypt из Grub 2? Можно было бы сохранить загрузчик и ключи в виде файла и пытаться передать управление ему… Можно было бы использовать iso Truecrypt Recue CD, если бы Grub 2 умел загружать iso образы как делает его младший брат Grub4Dos (а он не умеет! умеет только монтировать файловую систему iso..) Я уже было совсем отчаялся в поисках, но внезапно наткнулся на достаточно простое и элегантное решение.
Благодаря замечательным людям, которые разрабатывают проект "Grub2 loves TrueCrypt" стало возможно сконвертировать загрузочный спасательный iso-образ Truecrypt в формат, с которым умеет работать Grub2.
Итак, устанавливаем git, чтобы склонировать репозиторий с grub2tc, а также ruby для работы самой программы:
sudo -i
apt-get install git ruby
git clone git://gitorious.org/grub2tc/grub2tc.git
После этого копируем в папку с программой образ «TrueCrypt Rescue Disk.iso» и переименовываем его в «tcrescue.iso». Выполняем команду
make
В папке появится файл «tcloader», который нужно скопировать в /boot
Теперь осталось отредактировать меню загрузчика, чтобы в нём появился пункт загрузки Truecrypt. Добавляем в файл /etc/grub.d/40_custom:
menuentry "Windows via TrueCrypt" {
insmod multiboot
multiboot /tcloader
}
Затем выполняем:
update-grub2
grub-install /dev/sda
где /dev/sda — ваш жёсткий диск
Теперь, ещё один важный момет. Последней командой (когда вы переустановили Grub в MBR жёсткого диска) вы скорее всего повредили ключи Truecrypt, необходимые для расшифровки системного раздела. Отныне при попытке ввести пароль, вы будете получать сообщение «Incorrect password». Чтобы это исправить, восстановим ключи из файла-бэкапа, который заботливо создал для нас в своей директории grub2tc volhead:
dd if=volhead of=/dev/sda bs=512 seek=62
где
if=volhead — файл, где хранится бэкап ключей
of=/dev/sda — устройство, куда этот бэкап посекторно следует записать
bs=512 — размер блока
seek=62 — сколько блоков отступить от начала устройства /dev/sda (там загрузчик Grub)
Теперь можно загружаться!
Алгоритм
Таким образом, последовательность установки и настройки всего для этого метода можно описать следующим образом:
- Уснавливаем windows
- Устанавливаем Ubuntu
- Перезагружаемся в windows, устанавливаем Truecrypt, шифруем системный раздел
- Как-нибудь загружаем Ubuntu :) (например с загрузочной флешки/диска) и проделываем вышеописанные манипуляции с помощью программы grub2tc
Теперь у нас в MBR загрузчик Grub2.
- Для того, чтобы загрузиться в Ubuntu просто выбираем такой пункт при загрузке
- Для того, чтобы загрузить Windows выбираем пункт «Windows via TrueCrypt» и вводим правильный пароль
Траблшутинг
Если загрузчик Truecrypt по каким-либо причинам перестал узнавать ваш пароль (повреждены ключи), то их всегда можно восстановить из резервной копии в папке с grub2tc командой:
dd if=volhead of=/dev/sda bs=512 seek=62
P.S.
Оба метода подходят для использования их совместно с шифрованием линукса dm-crypt и LVM, что позволяет иметь обе-две операционные системы полностью зашифрованными :)
Автор: vovansystems