Portál AbcLinuxu, 12. května 2025 14:10

Dotaz: Ako vytvoriť iniramfs?

31.7.2008 12:42 Ján Chrastina | skóre: 4 | blog: Pavuk
Ako vytvoriť iniramfs?
Přečteno: 665×
Odpovědět | Admin
Zdravím,

po dlhom uptime a zopár aktualizáciách mi Debian Etch odmieta naštartovať. Root súborový systém mám na LVM2 oddieli. Chyba pri štarte:

Uniform CD-ROM driver Revision: 3.20

Done

Begin: Mounting root file system... ...

Begin: Running /scripts/local-top ...

device-mapper: ioctl: 4.7.0-ioctl (2006-06-24) initialised: dm-devel@redhat.com

vgchange: error while loading shared libraries: libreadline.so.5: cannot open shared object file: No such file or directory

vgchange: error while loading shared libraries: libreadline.so.5: cannot open shared object file: No such file or directory

Done.

Begin: Waiting for root file system... ...

Done.

Check root= bootarg cat /proc/cmdline

or missing modules, devices: cat /proc/modules ls /dev

ALERT! /dev/mapper/hsee--dcn--s444-root does not exist. Dropping to a shell!

BusyBox v1..1.3 (Debian 1:1.1.3-4) Built-in shell (ash)

Enter 'help' for a list of built-in commands.

(initramfs) cat /proc/cmdline

root=/dev/mapper/hsee--dcn--s444-root ro

Pomocou Live CD som zobral súbor /boot/initrd.img-2.6.18-6-686 a rozbalil príkazom zcat initrd.img-2.6.18-6-686 | cpio -i. Výsledný adresár neobsahuje knižnicu lib/libreadline.so.5 . Knižnicu som doplnil do lib adresára a vytvoril nový iniramfs príkazom find . -print | cpio -i > ~/initrd.img-2.6.18-6-686. Výsledný súbor som gzipoval a nahodil do /boot, pridal som záznam do grubu s novým initram obrazom a pokúsil som sa nabootovať. Žiaľ, skončil som na chybe: RAMDISK: Compressed image found at block 0 RAMDISK: incomplete write: (-28 != 32768) 8388608 a potom už len hlášky VFS: cannot open root device a panika jadra.

Vie niekto poradiť ako správne vytvoriť iniramfs obraz z upravenej adresárovej štruktúry?

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

Odpovědi

31.7.2008 13:03 Jirka
Rozbalit Rozbalit vše Re: Ako vytvoriť iniramfs?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nestačilo by použít příkaz mkinitramfs? tuším že je to balík initramfs-tools. ten by si měl sám do initrdu natahat vše co je třeba.
31.7.2008 13:13 Ján Chrastina | skóre: 4 | blog: Pavuk
Rozbalit Rozbalit vše Re: Ako vytvoriť iniramfs?
Odpoviem si sám. Podľa http://www.vas.nu/pipermail/klibc/2005-August/001111.html treba nový initramfs archivovať s prepínačom --format=newc asi takto:

find | cpio --format=newc -o | gzip > /boot/initrd.img-2.6.18-6-686.correct

Želám veľa šťastia pri vytváraní initramfs obrazov.
msk avatar 1.8.2008 15:01 msk | skóre: 27 | blog: msk
Rozbalit Rozbalit vše Re: Ako vytvoriť iniramfs?
Neviem, ci sa uplne orientujem, ale ja som potreboval premigrovat debian z virtualboxu a normalnych oddielov na fyzicky stroj a nad lvm. Spravil som to cez system rescue cd, vytvoril particie, lvm, vg, lv, filesystem, pre-tar-oval som tam filesystem z virtualboxu, chrootol sa do noveho systemu a pustil dpkg-reconfigure linux-image-blablabla. Jeho sucastou bolo pregenerovanie initrd, takze sa tam pridali moduly pre lvm a potom to uz bootovalo.
5.8.2008 23:35 Ján Chrastina | skóre: 4 | blog: Pavuk
Rozbalit Rozbalit vše Re: Ako vytvoriť iniramfs?
Neviem kde je presne chyba. Vytvoril som nový initramfs príkazom dpkg-reconfigure linux-kernel-..., ale boot stále hlásil chýbajúcu knižnicu libreadline pri inicializácii LVM. Vo VitrualBoxe som urobil čistú inštaláciu Debian Etch s root partíciou na LVM a po kontrole funkčnosti som rozbalil initramfs. V adresári lib som mal libreadline a libncurses, ktoré na produčnom stroji neboli. Nuž som ich pridal na produčnom stroji do adresára lib a vytvoril nový initramfs. Teraz nabieha bezproblémov, v Grube som tieto úpravy zaradil mimo automaticky aktualizované veci. Zaujímavé ešte je že mkinitramfs sa snaží odhadnúť knižnice ktoré potrebujú binárky v initramfs a pridáva ich pri vytváraní. Ale systémový vgchange nepotrebuje libreadline:

hsee-dcn-s444:~# ldd `which vgchange`

linux-gate.so.1 => (0xffffe000)

libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e11000)

/lib/ld-linux.so.2 (0xb7f51000)

Naopak, vgchange v initramfs potrebuje viac knižníc:

hsee-dcn-s444:~/initramfs/sbin# ldd vgchange

linux-gate.so.1 => (0xffffe000)

libdevmapper.so.1.02 => /lib/libdevmapper.so.1.02 (0xb7f7d000)

libreadline.so.5 => /usr/local/groundwork/lib/libreadline.so.5 (0xb7f4f000)

libselinux.so.1 => /lib/libselinux.so.1 (0xb7f39000)

libsepol.so.1 => /lib/libsepol.so.1 (0xb7ef8000)

libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7ef4000)

libncurses.so.5 => /usr/local/groundwork/lib/libncurses.so.5 (0xb7eb3000)

libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d82000)

/lib/ld-linux.so.2 (0xb7f9d000)

Tým /usr/local/groundwork knižniciam už vôbec nerozumiem. Inštalácia groundworku nie je jednoduchá a asi poprepisoval knižnice v systéme. Ešte sa na to pozriem.
6.8.2008 00:13 romank | skóre: 10 | blog: romank
Rozbalit Rozbalit vše Re: Ako vytvoriť iniramfs?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Po nabotovani z live-linuxu:
mkinitrd > /boot/initrd.img-2.6.18-6-686_new 2.6.18-6-686
a potom staci zmenit initrd v (lilo,grub) .
RK

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.