Portál AbcLinuxu, 26. dubna 2024 16:50


Dotaz: initrd: no such device or address

1.9.2009 00:06 Jiří J. | skóre: 34 | blog: Poutník | Brno
initrd: no such device or address
Přečteno: 417×
Odpovědět | Admin

Zdravím,
stavím si takové malé liveCD na slackwaru, plánuji použít doupravené linux-live skripty ("upstream" verze je skutečně už hodně tlustá), nikdy jsem nepřišel na chuť initial ramdiskům, tak se to pokouším napravit teď.

Nakonfiguroval jsem si vlastní minimální kernel (1.1MB + 16MB moduly), filesystem drivery hodil (spolu s ATA/SATA/etc) jako moduly s tím, že je budu načítat v initrd (což je ta pointa, pokud jsem to dobře pochopil). Na samotné liveCD to asi potřeba nebude, ale rád bych byl schopen bootovat třeba z USB.

Tudíž jsem se pustil do - alespoň pro začátek - zkoušení initrd za pomoci qemu emulace. Velkou škodou je, že qemu neumí tak snadno "copy & paste", takže většinu z toho zde musím přepsat ručně (vím, jde to přes txt soubor a loop mount, ale z napůl funkčního busyboxu stěží).

lspci mi jako IDE vyhodil

00:01.1 IDE interface: Intal Corporation 82371SB PIIX3 IDE [Natoma/Triton II]

a po rychlém findu v /lib/modules/ jsem usoudil, že piix.ko modul bude ten pravý. Samotný filesystém je ext2, logicky jsem proto zkusil něco jako

mkinitrd -c -m ext2:piix -k 2.6.29.6 -o /boot/custom/initrd.gz

moduly byly přidány, lilo proběhlo úspěšně a já restartoval.

Po rebootu na nový kernel na mě čekal můj milý ash shell a busybox:

mount: mounting /dev/hda1 on /mnt failed: No such device or address

Tento error nevidím poprvé, měl jsem s ním problémy na debianu, když jsem se pokoušel udělat raid1 dualboot přes lilo (automatické nabootování z 2. disku, pokud je první kaput, bez diskety), nepamatuji si, jak jsem to tehdy vyřešil, ale příčina nalezena nebyla.

Trochu jsem se rozhlížel a vypadá to, že tenhle initrd používá mdev -s na vytvoření blokových zařízení v /dev/. Ten pravděpodobně prohledává /sys/block/ a vytváří zařízení podle toho, což je pěkná věc, dala by se použít jako odlehčená verze udevu na ostrém systému (/proc/sys/kernel/hotplug), nejprve jsem myslel, že /dev/hda (3,0) a /dev/hda1 (3,1) má na svědomí on, ale vypadá to, že tyto zařízení tam nacpal už slackwarácký mkinitrd ("init" - který je použit místo linuxrc - je nevytváří a mdev také ne).

Příčina toho všeho je asi v neexistujícím hda/hda1 v /sys/block/, resp. /sys/devices/virtual/block/, v /sys/bus/ide/devices/ však obě zařízení jsou, po modprobe piix při startu vypsal kernel dvě daná IDE zařízení (podle /sys/bus/ide/devices/*/model jde o QEMU HARDDISK a QEMU CD-ROM, drivername sedí - hda a hdc, modalias je ide:m-disk.

Nicméně ať se snažím sebevíc, kernel je prostě nedetekuje jako bloková zařízení (asi) a symlinky v /sys/block/ nevytvoří.

Stejnou chybovou hlášku (no such device or address) hází na předvytvořené /dev/hda samozřejmě i jiné nástroje, jako hdparm, cat, apod. Zkusil jsem do initrd přidat další moduly, které by snad něco s IDE/ATA mohly mít společného, ale nic nepomohlo.

Tak se obracím na vás, je možné, že má chorá mysl něco triviálního zkonila, ale hledal jsem tady i na Googlu a o podobném problému se toho moc nepíše. Tutoriály o vytváření initrd jsou, vesměs typu "mkinitramfs -o /boot/initrd.gz 2.6.x.y a je to hotovo", případně popisují tvorbu malého initial ramdisku ručně, bez modulů a mountování "skutečného" filesystému.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.9.2009 00:06 Jiří J. | skóre: 34 | blog: Poutník | Brno
Rozbalit Rozbalit vše Re: initrd: no such device or address
Odpovědět | | Sbalit | Link | Blokovat | Admin

Tak jsem problém snad vyřešil. Byla to celkem nešťastná shoda více okolností - jednak jsem přesně nepochopil podstatu mdev z busyboxu, jednak "mkinitrd" ze Slackware nevytváří initrd, ale initramfs (tedy tmpfs), navíc tam cpe všechno tak nešikovně, ani modules.dep nevygeneruje / nepřekopíruje. To mělo za následek situaci, kdy qemu harddisk potřeboval "ide:m-disk", což je alias pro ide-disk, který je opět aliasem pro skutečný modul ide_gd_mod. To ale mdev díky chybějícímu modules.dep nemohl tušit a tak neudělal nic.

Ono by to až tak nevadilo, kdybych si tyto aliasy vygrepoval sám a přidal ide_gd_mod do initrd spolu s ext2 a piix. Totiž samotný ide_gd_mod toho moc neudělá, v tomto případě je potřeba i modul piix (což byla jedna z těch nepříjemných shod okolností, testoval jsem jednou samotný piix, pak samotný ide-disk, atp.).

Jsem rád, že mám tento případ za sebou, pro liveCD si stejně musím vytvořit initramfs "from scratch", tam by podobná situace neměla nastat.

... snad :-)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.