Всем привет.
Подскажите как быть - в идеале хочу получить голый (text mode) CentOS 5.2 на флешке.
Для того чтобы получить такую ось на винте, обычно гружусь с netinstall образа и пишу "linux text" и далее в таком режиме устанавливаю минимум пакетов через интет. В итоге получаю голую ось, готовую для различных задач - доустанови что надо и в продакшн )
После чтения разных мануалов и советов, вот что у меня получилось:- Поставил минимальную систему на винт.
- Подключил флешку, создал на ней раздел, примонтировал, зашел в примотированную директорию и с помощью команды
dump -0 -f - / |restore -r -f -скопировал все с винта на флешку.
Потом подредактировал файлы fstab и mtab, установил GRUB на флешку и поправил menu.lst
Выглядит это все так:# cat /mnt/sda1/boot/grub/device.map
# this device map was generated by anaconda
(hd0) /dev/sda
# cat /mnt/sda1/boot/grub/menu.lst
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title USB CentOS (2.6.18-92.1.22.el5)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-92.1.22.el5 ro root=/dev/sda1
initrd /boot/initrd-2.6.18-92.1.22.el5.img
# cat /mnt/sda1/etc/fstab
/dev/sda1 / ext3 defaults 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
# cat /mnt/sda1/etc/mtab
/dev/sda1 / ext3 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
Отключил винт и попытался загрузиться с флешки.
Загрузка началась, только вот до конца система не загружается.
пишет вот что:
usb 1-4: configuration #1 chosen from 1 choice
ata2.00: ATAPI: Optiarc DVD RW AD-7200S, 1.01, max UDMA/100
ata2.00: configured for UDMA/100
Vendor: Optiarc Model: DVD RW AD-7200S Rev: 1.01
Type: CD-ROM ANSI SCSI revision: 05
Waiting for driver initialization.
Scanning and configuring dmraid supported devices
Trying to resume from LABEL=SWAP-hda2
Unable to access resume device (LABEL=SWAP-hda2)
Creating root device.
Mounting root filesystem.
mount: could not find filesystem '/dev/root'
Setting up other filesystems.
Setting up new root fs
setuproot: moving /dev failed: No such file or directory
no fstab.sys, mounting internal defaults
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
Switching to new root and running init.
unmounting old /dev
unmounting old /proc
unmounting old /sys
switchroot: mount failed: No such file or directory
Kernel panic - not syncing: Attempted to kill init!
не понятно, почему из-за чего ошибка, ведь GRUB увидел раздел на флешке, считал оттуда ядро, загрузил его, дальше уже идет работа ядра, правильно ? Значит чтото в нем не так, раз оно не видит файловую систему..
Я просто не понимаю на каком этапе ошибка появляется..
Так же неясно откуда береться этот LABEL=SWAP-hda2. это свап раздел на винте с которого я копировал систему на флешку. я же удалил с fstab и mtab упоминания об свап-разделе.
на флешке ОДИН раздел. свапа не стал делать, считаю это ненужным.Подскажите, как разобраться..
Вот нашел инфу что возможно нужно создавать другой initrd для загрузки с флешки.
Что нужно туда добавить usb-storage.ko чтобы ядро увидело USB устройство на этапе загрузки.
Правильно это или нет ?
Я не понимаю зачем это добавлять в "тот linux" который я скопировал с винта - ведь он нормально "видит" USB флешку ....
Или "флешку видит" уже загруженная система, а не тот initrd что загружает её..
По моему логично и тогда нужно переделывать initrd.
Объясните пожалуйста. Видимо не совсем понимаю что происходит при загрузке linux.
Перегенерировать initrd придется, причем не только из-за добавления usb-storage.ko, а еще и потому, что сейчас скрипты в initrd шибко "умные" пошли, /etc/fstab и root= им зачастую не указ, они типа сами у себя хранят эту инфу. Как следствие при переносе такого initrd ничего хорошего не получается.
>Перегенерировать initrd придется, причем не только из-за добавления usb-storage.ko, а еще и
>потому, что сейчас скрипты в initrd шибко "умные" пошли, /etc/fstab и
>root= им зачастую не указ, они типа сами у себя хранят
>эту инфу. Как следствие при переносе такого initrd ничего хорошего не
>получается.а не могли бы вы рассказать что для этого надо сделать ?
я так понимаю - загрузиться с винта и с помощью команды mkinitrd сгенерировать новый initrd и потом его скопировать на флешку. Но вот какие ключи использовать для mkinitrd.. как туда добавить модуль usb-storage и еще вродебы нужно в какомто конфиге установить задержку в несколько секунд, чтобы ядро успело определить usb устройство..
>[оверквотинг удален]
>Что нужно туда добавить usb-storage.ko чтобы ядро увидело USB устройство на этапе
>загрузки.
>Правильно это или нет ?
>Я не понимаю зачем это добавлять в "тот linux" который я скопировал
>с винта - ведь он нормально "видит" USB флешку ....
>
>Или "флешку видит" уже загруженная система, а не тот initrd что загружает
>её..
>По моему логично и тогда нужно переделывать initrd.
>Объясните пожалуйста. Видимо не совсем понимаю что происходит при загрузке linux.Вероятнее всего, что initrd не подгружает модуль usb флэшки, либо (менее вероятно) модуль файловой системы флэшки, поэтому и не находит, куда монтировать корень. Обычно в initrd включают большинство модулей, которые могут пригодиться, и udev загружает нужные, но вы не попали в счастливое большинство.
Я бы посоветовал распакавать initrd, добавить нужные модули (а заодно убрать resume со старого свопа) и собрать обратно. В настоящее время чаще всего initrd - cpio архив, сжатый gzip.
Другое решение - поменять флэшку на более распространенную, но, как вам уже сказали - пересобирать initrd, скорее всего, все равно придется.
>Вероятнее всего, что initrd не подгружает модуль usb флэшки, либо (менее вероятно)
>модуль файловой системы флэшки, поэтому и не находит, куда монтировать корень.я думаю скорее первое, ибо ФС на флешке родной - ext3, как его можно не распознать..
>Обычно в initrd включают большинство модулей, которые могут пригодиться, и udev
>загружает нужные, но вы не попали в счастливое большинство.что вобще такое этот initrd человескими словами ? и почему именно он должен иметь эти модули ? GRUB увидел ФС на флешке и начал с нее загрузку, Видимо дальше он передает управление этому initrd, который в свою очередь тоде комуто передаст управление ?
что такое udev ?>Я бы посоветовал распакавать initrd, добавить нужные модули (а заодно убрать resume
>со старого свопа) и собрать обратно. В настоящее время чаще всего
>initrd - cpio архив, сжатый gzip.да я не против пересобрать его, только не знаю как. (
>Другое решение - поменять флэшку на более распространенную, но, как вам уже
>сказали - пересобирать initrd, скорее всего, все равно придется.вот этого тоже не понял. зачем менять флешку ? что от этого измениться ? ведь она будет для initrd точно таким же неизвестным устройством..
>что вобще такое этот initrd человескими словами ? и почему именно он
>должен иметь эти модули ? GRUB увидел ФС на флешке и
>начал с нее загрузку, Видимо дальше он передает управление этому initrd,
>который в свою очередь тоде комуто передаст управление ?
>что такое udev ?
>grub -это загрузчик ядра. Он должен знать фс, на которой находится ядро и инитрд.
initrd - (опциональная) сжатая маленькая фс линух - должна уметь смонтировать корень основной системы. При отсутствии initrd ядро само монтирует корень.
udev - динамическая система управления устройствами. Определяет, какие конкретно модули нужно грузить и создает нужные устройства в /devА вообще, man рулит.
>>Я бы посоветовал распакавать initrd, добавить нужные модули (а заодно убрать resume
>>со старого свопа) и собрать обратно. В настоящее время чаще всего
>>initrd - cpio архив, сжатый gzip.
>
>да я не против пересобрать его, только не знаю как. (
>man cpio
man gzip>>Другое решение - поменять флэшку на более распространенную, но, как вам уже
>>сказали - пересобирать initrd, скорее всего, все равно придется.
>
>вот этого тоже не понял. зачем менять флешку ? что от этого
>измениться ? ведь она будет для initrd точно таким же
>неизвестным устройством..Я уже писал, что в initrd включены модули устройств, в том числе флэшек (но не всех).
Похоже на то, что ядро не понимает откуда ему грузить систему - попробуй задать какуюнить уникальную метку этому разделу, и в грубе указать грузиться по этой метке.
>Похоже на то, что ядро не понимает откуда ему грузить систему -
>попробуй задать какуюнить уникальную метку этому разделу, и в грубе указать
>грузиться по этой метке.я думаю что нужно пересобрать initrd, только не знаю какой модуль добавлять..
Может уже пора перестать страдать херней и воспользоваться давно написанными хелперами под RHEL/CentOS/Fedora?
>Может уже пора перестать страдать херней и воспользоваться давно написанными хелперами под
>RHEL/CentOS/Fedora?да вроде разобрался уже..
mkinitrd --fstab=путь_к_fstab_на_флешке ........
заработало..
более того - вообще получилось установить centos 5.2 сразу на флешку..но я был бы признателен, если бы мне объяснили что такое "хелперы", разберусь и сразу перестану страдать )
Под helper подразумевается скрипт, автоматизирующий рутинную часть создания сложных объектов. Чем-то похоже на wizard в винде. Для usb хелпер согласно конфигу создает образ, в котором уже правильный initrd, загрузчик(не обязательно grub), ramdisk, unionfs(для того, чтобы флешка была в ro, а изменения писались на ramdisk), squashfs(для сжатия образа), возможность записывать отдельные изменения назад на флешку или винт. Все это конечно можно сделать руками, но зачем? Если хочется понять как это работает, то все-равно начинать стоит с изучения созданных хелперами образов.
Открываем google и ищем по словам centos live usb-stick live-usb. Получаем массу ссылок на how-to и хелперы для создания live-usb из CentOS.
спасибо за подсказку..
с почти этого и начинал - сначала поставил livecd на флешку.
но там загрузчик LILO, а мне захотелось сделать загрузчик GRUB, вот и начал заниматься.