The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Полноценный linux сервер с загрузкой с USB flash (linux boot usb hardware redhat lilo initrd)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: linux, boot, usb, hardware, redhat, lilo, initrd,  (найти похожие документы)
From: Сергей Тараненко <setar@trinity.spb.ru> Newsgroups: email Date: Mon, 30 Oct 2003 14:31:37 +0000 (UTC) Subject: Полноценный linux сервер с загрузкой с USB flash Идея разместить полноценную операционку на USB flash карте не нова, особенно актуальной она стала с тех пор как многие материнские платы стали поддерживать загрузку с USB ... В основном этот документ относится к ОС linux, причем желательно использовать дистрибутив не менее RedHat 7.3 (там хорошо реализована работа USB). Желательно уметь пересобирать ядро системы, хотя это не обязательно. Чтобы успешно решить поставленную задачу, необходимо чётко представлять процесс загрузки системы: - стартует загрузчик прописаный в MBR flash - далее грузится ядро системы - загрузчик, исходя из геометрии диска находит и загружает образ корневой файловой системы (initrd). Образ размещается в /dev/ram1, это устройство прописывается как корень и управление передаётся в файл /linuxrc. Именно из этого файла осуществляется подгрузка необходимых драйверов scsi или raid. Сами драйверы в виде модулей так же распологаются в initrd. По структуре initrd это запакованный образ дискеты ёмкостью 2.8 MB, файловая система fat12 или ext2. - файл загрузки linuxrc после подгрузки модулей передают в систему параметры реальной файловой системы и меняет на неё корень посредством команды pivoot_root. - Дальнейшая загрузка продолжается стандартным образом с вашей реальной файловой системы. Теперь немного о том какие команды вам потребуются в процессе работы: #mkinitrd <файл назначения> <версия ядра> Эта команда создаст для вас стандартный загрузочный образ. Обычно он расположен в /boot/initrd-<версия ядра>.img . Образ содержит минимальную root FS (file system), модули прописанные в /etc/modules.conf , а так же стартовый скрипт загрузки /linuxrc . Модули берутся из каталога /lib/modules/<версия ядра>. #lilo -v[/color] Установка загрузчика LILO согласно его конфиг файлу /lilo.conf вот пример моего lilo.conf: nowarn lock verbose=0 timeout=0 default=snap disk=/dev/sda bios=0x80 sectors=63 heads=255 cylinders=16 boot=/dev/sda install=/boot/boot.b message=/boot/message map=/boot/map linear image=/boot/bzImage label=snap initrd=/boot/initrd read-only root=/dev/ram0 Обратите внимание на то, что скорее всего необходимо жестко задать геометрию вашего flash диска (можно получить из fdisk) , иначе загрузка остановится после старта ядра с надписью "Unable to mount root FS" и пару скриптов для облегчения процесса создания и модификации файла initrd: распаковываем содержимое образа /boot/initrd.img в каталог /initrd cd / umount /initrd zcat /boot/initrd.img > /dev/ram1 mount -t ext2 /dev/ram1 /initrd после внесёных изменений необходимо его вновь запаковать: cd / umount /initrd mv /boot/initrd.img /boot/initrd.old dd if=/dev/ram1 bs=1k count=2880 | gzip -9 > /boot/initrd.img Далее задача выглядит следующим образом: - проверяем наличие поддержки модулей в ядре - проверяем наличие необходимых модулей поддержки USB, RAID, SCSI в /lib/modules/<версия_ядра> и их подключение из /etc/modules.conf - создаём новый файл initrd - распаковываем и контролируем скрипт загрузки, наличие модулей в initrd, вносим поправки по своему разумению. Мне потребовалось внести в загрузку паузу в 1 сек для нормальной инициализации USB flash. Для контроля посреди загрузки как точку останова можно поставить shell (/bin/sh). При добавлении команд в linuxrc не забудте проверить наличие соответствующих библиотек в том же образе (проверяется как #ldd <имя_файла>). - пакуем подкорректированный initrd Собственно загрузочная часть готова, о оптимизации системы - другая тема. По ней рекомендую почитать http://www.linuxfromscratch.org/ http://www.damnsmalllinux.org/ P.S. Постоянный адрес статьи в интернете http://www.3nity.ru/viewtopic.htm?t=651

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, Anonymous (?), 14:54, 25/11/2005 [ответить]  
  • +/
    И правда работает при такой схеме?
    У меня вот lilo просто пишет букву L и все, иногда 01 01 01 пишет. Как лечить?
     
  • 2, mixel (?), 12:12, 20/03/2006 [ответить]  
  • +/
    default=asteroid

    disk=/dev/sda
    sectors=32
    heads=16
    cylinders=1000

    boot=/dev/sda
    install=menu
    prompt
    timeout=200
    map=/media/usbdisk/boot/map


    image=/media/usbdisk/boot/vmlinuz-2.6.8-2-686
        label=asteroid
        initrd=/media/usbdisk/boot/image_aster.mix
        root=/dev/ram0
        append="devfs=nomount root=/dev/ram0 ro init=/bin/bash"

    У меня так работает, правда только на одном из двух компов :)... Если оставлять bios=0x80 то работает только когда нет другого устройства (hda как правило), которому bios этот код назначает. Директории указываю в lilo.conf как они примонтированы, кладу туда ядро и образ инитрд руками, файл map lilo сам создаёт.
    Если интересно, то плата у меня GA-8IG1000MK

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру