Site Mascot
 

Не удивляйтесь, сайт переехал: был http://smacker.fatal.ru, стал http://smacker.heliohost.org.

QEMU, CF и установка ОС

05.12.2008 8:13

Как установить ОС на внешний носитель с минимумом телодвижений

 
Причин написать этот небольшой текст у меня было две. Во-первых, я заимел переходник для подключения карт памяти CF к IDE интерфейсу, обзаведясь таким образом дешёвым SSD для разных поделок. Во-вторых, на днях я обнаружил на хабрахабре статью, в которой всё то же самое предлагалось делать исключительно извращенным образом (нет, я не кармадрочер, только читаю иногда). Таким образом я решил, что стоит и мне написать про то, как я решил похожую проблему с помощью исключительно свободных инструментов, а не проприетарной поделки vmware.
Для начала — упомянутые агрегаты. На снимке кардридер, карта памяти и собственно адаптер. Для работы с qemu, впрочем, адаптер не очень нужен.

 

Девайсы

 

Наша задача состоит в следующем: имея машину с установленной ОС Linux поставить на карту памяти ОС таким образом, чтобы, будучи подключенной через переходник к целевой машине, она стала нормальным загрузочным диском. Установка — самым общим образом, без заранее заготовленных и готовых к развёртыванию файловых систем и прочего. То есть, грубо говоря, есть карточка, кардридер, диск (образ) дистрибутива и qemu.
Надеюсь, что вместе с qemu установлен и модуль ядра kqemu, который существенно ускорит работу виртуальной машины при эмуляции PC на x86 хосте (если карте памяти суждено работать где-нибудь на ARMе то, стало быть, не судьба).
Если он не подгружен, от рута:
 modprobe kqemu
 
Далее есть два варианта развития событий — запуск qemu от суперпользователя, что избавит от необходимости вводить аж две лишние команды, или изменение прав доступа к /dev/kqemu и /dev/XXX, где XXX — блочное устройство, соответствующее вставленной в кардридер карте. Далее я буду называть его для определённости sda. Итак,
 chmod a+rw /dev/kqemu
 chmod a+rw /dev/sda
 
После этого можно спокойно запускать вирутальную машину от простого пользователя. На всякий пожарный, когда дело будет сделано, можно откатить изменения:
 chmod g-w,o-rw /dev/sda
 
Собственно, после этого можно спокойно запускать виртуальную машину, подсунув ей в качестве жесткого диска наше блочное устройство:
 qemu -hda /dev/sda -cdrom puppy-4.00-k2.6.21.7-seamonkey.iso -boot d
 
По желанию можно включить полную виртуализацию, добавив -kernel-kqemu. Остальные опции, вроде размера памяти — по вкусу.
Как несложно заметить, я проводил эти манипуляции с puppy 4.0. Вот как видится карточка памяти из виртуальной системы:

 

Карта памяти неотличима от винчестера (на ней уже стоит система)

 

Возможно, именно puppy тут не самый показательный пример, так как в его инсталляторе есть специальные пункты для установки системы на карту в кардридере с последующим подключением к IDE и для установки на уже находящуюся в переходнике карту (а вот это имеет смысл использовать). Насколько я понимаю, эти пункты проведут установку системы таким образом, чтобы минимизировать обращение к карте для записи, продлевая её ресурс. А вот DSL будет ставиться именно как на жёсткий диск, без видимых различий. Но тогда продление жизни карты будет заботой пользователя (см. noatime и т.д.).
Разумеется, что CF карта — не единственное применение для этой методики. С таким же успехом можно поставить систему и на подключенный через USB внешний винчестер, а потом его установить в нужную машину — при этом установка пройдет прозрачно, не мешая нормальной работе.

 

Тут мне хотелось бы упомянуть один феномен, с которым мне пришлось столкнуться поначалу. А именно, начать я решил с установки системы прямо на целевой машине, воткнув в адаптер свежераспечатанную карточку. В результате диск из CF карты был увиден, и с ним можно было работать, но попытка поставить на него систему (DSL, кстати) кончилась неудачно — с диска было невозможно загрузиться. Восстановить загрузчик не удалось, попытки переразбить на разделы также оказались неудачными, даже после уничтожения с помощью dd информации в начале диска. Диск не получилось нормально переразбить даже gparted-ом, и форматирование заканчивалось с ошибками. Мне в этой ситуации помог live-cd с FreeDOS, а точнее — fdisk оттуда. После того, как я с его помощью создал заново раздел на карточке, проблемы исчезли. Мне это напомнило один мой старый винчестер на примерно на 900 мегабайт (точно уже не помню), который упорно виделся как 540, и ничем его было не привести в чувство. Но стоило мне поставить на него QNX Momentics 6.2.1, как — о чудо! — он снова стал видеться на номинальную емкость.
Можеть быть, что в данном случае я сам себе подложил собаку, пропустив по недосмотру что-то важное в начале, или у меня просто не хватает умения адекватно работать с накопителями. Может быть, свежекупленные карты надо как-то «подготавливать». Пока что я не могу сказать наверняка, в чём была загвоздка — так что если кто-то попадёт в ту же ситуацию, может ему будет полезно узнать, что мне помог FreeDOS.
  1. Я буду рад, если вы оставите свой отзыв об этой заметке:

    Никнейм

    Email

    URL

    Заголовок комментария

    Проверка на человечность
    - Введите буквы:
    The CAPTCHA image