Boot live CD a copy to ram

xmms

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Boot live CD a copy to ram
« kdy: 24. 12. 2010, 18:21:02 »
U live cd PC LINUX OS se mi líbí možnost copy to ram, která napřed načte celé CD do paměti a zavede z toho systém. Pak je možné CD vytáhnout a pracovat bez něho. Chtěl bych si takhle udělat LIVE CD suse a dát ho na flešku. Po nabootování flešku vytáhnout. Bohužel moc nerozumím těm mechanismům, jak to tam je udělané. Na CD je nějaký image 600 MB.

Na cd je prázdný adresář /boot/grub
a nějaké help soubory v /isolinux
a pak soubor livecd.sqfs
který nevím jak namountovat


Nějaký návod, jak to vyrobit?

Kód: [Vybrat]
# ls -alh
celkem 681M
drwxr-xr-x  4 root root 2,0K 30. čen  2009 .
drwxr-xr-x 26 root root 4,0K 24. pro 17.05 ..
drwxr-xr-x  3 root root 2,0K 30. čen  2009 boot
drwxr-xr-x  2 root root 6,0K 30. čen  2009 isolinux
-rw-r--r--  1 root root 681M 30. čen  2009 livecd.sqfs

# find .
.
./boot
./boot/grub
./isolinux
./isolinux/back.jpg
./isolinux/bg.hlp
./isolinux/bluecaress.xcf
./isolinux/boot.cat
./isolinux/bootlogo
./isolinux/cs.hlp
./isolinux/da.hlp
./isolinux/de.hlp
./isolinux/el.hlp
./isolinux/en.hlp
./isolinux/es.hlp
./isolinux/fi.hlp
./isolinux/fr.hlp
./isolinux/gfxboot.com
./isolinux/hu.hlp
./isolinux/initrd.gz
./isolinux/isolinux.bin
./isolinux/isolinux.cfg
./isolinux/it.hlp
./isolinux/ja.hlp
./isolinux/lang
./isolinux/langs
./isolinux/mediacheck
./isolinux/memtest
./isolinux/nb.hlp
./isolinux/nl.hlp
./isolinux/pl.hlp
./isolinux/pt.hlp
./isolinux/pt_BR.hlp
./isolinux/ru.hlp
./isolinux/sl.hlp
./isolinux/star.dat
./isolinux/sv.hlp
./isolinux/timer_a.jpg
./isolinux/uk.hlp
./isolinux/vmlinuz
./isolinux/welcome.jpg
./isolinux/zh_CN.hlp
./isolinux/zh_TW.hlp
./livecd.sqfs

isolinux.cfg obsahuje mimo jiné:

Kód: [Vybrat]
default livecd
prompt  1
timeout 150
UI gfxboot bootlogo
label LiveCD
    kernel vmlinuz
    append livecd=livecd initrd=initrd.gz root=/dev/rd/3 acpi=on vga=788 keyb=us splash=silent fstab=rw,noauto noscsi
label Copy_to_ram
    kernel vmlinuz
    append livecd=livecd copy2ram initrd=initrd.gz root=/dev/rd/3 acpi=on vga=788 keyb=us splash=silent fstab=rw,noauto splash=verbose
label Media_Check
    kernel vmlinuz
    append livecd=livecd md5sum initrd=initrd.gz root=/dev/rd/3 acpi=on vga=788 keyb=us splash=silent fstab=rw,noauto splash=verbose
« Poslední změna: 26. 12. 2010, 17:23:23 od Petr Krčmář »


cl1d3

Re: Jak udělat při bootu LIVE CD copy to ram
« Odpověď #1 kdy: 25. 12. 2010, 12:01:52 »
Citace
...
a pak soubor livecd.sqfs
který nevím jak namountovat
...
livecd.sqfs súbor je predpokladám squashfs, zatiaľ som ho nikdy neskúšal namontovať ale nevidel by som v tom žiadny problém - vyskúšam.

Predpokladám že tento súbor by mal obsahovať obsah CD disku ktorý by sa mal celý nakopírovať do disku vytvoreného v RAM.

---
K samotnému riešeniu, ja by som navrhoval aby ste sa pozorne pozrel na súbor initrd. Ten obsahuje príkazy a aj zoznam modulov ktoré sa majú vykonať pri zavedení systému z CD. Tam by sa mu dalo prikázať aby sa vytvoril ramdisk o veľkosti obsahu CD, skopíroval doňho obsah a neskôr ho nahradil namiesto CD mechaniky. V balíčku by mal byť skript "init" ktorý by vás mal zaujímať.
« Poslední změna: 25. 12. 2010, 12:05:24 od cl1d3 »

xmms

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re: Boot live CD a copy to ram
« Odpověď #2 kdy: 04. 01. 2011, 08:00:57 »
Tohle bude větší problém, než se dalo čekat. PClinux a suse jsou dělané jinak a ani po několika dnech zkoumání syslinuxu se v tom nevyznám.

Kód: [Vybrat]
# mount livecd.sqfs /sss -o loop
mount: wrong fs type, bad option, bad superblock on /dev/loop2,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

SQUASHFS error: Can't find a SQUASHFS superblock on loop2

# file livecd.sqfs
livecd.sqfs: data
# blkid livecd.sqfs
livecd.sqfs: TYPE="squashfs"

# mount -o loop openSUSE-kde-11.2-livecd-kde-read-only.i686-2.8.0 /sss
mount: you must specify the filesystem type

# mount -o loop -t squashfs openSUSE-kde-11.2-livecd-kde-read-only.i686-2.8.0 /sss
mount: wrong fs type, bad option, bad superblock on /dev/loop2,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so


Opensuse tam má soubor openSUSE-kde-11.2-livecd-kde-read-only.i686-2.8.0
jehož typ je neznámý. Vyrobit takové cédéčko asi nebude v mých silách.

Jak to namountuju?

Navíc jsem prohledal soubory na cédéčku a žádný neobsahuje odkaz na název toho squash souboru. Jak tedy loader pozná, že má z tohoto souboru načíst systém?
« Poslední změna: 04. 01. 2011, 08:37:45 od xmms »

D.A. Tiger

  • ****
  • 465
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re: Boot live CD a copy to ram
« Odpověď #3 kdy: 04. 01. 2011, 11:10:47 »
Citace
Opensuse tam má soubor openSUSE-kde-11.2-livecd-kde-read-only.i686-2.8.0
jehož typ je neznámý.

Myslím že na CD-ROM se používá ISO-9660 fs...

cl1d3

Re: Boot live CD a copy to ram
« Odpověď #4 kdy: 04. 01. 2011, 22:08:10 »
-- pripojil som si iso cd disku, mam mandrivu nechcelo sa mi robit reboot
Citace
mkdir -p /opensuse/cdrom
mount -o loop /home/ladislav/Stiahnuté/openSUSE-11.3-KDE4-LiveCD-i686.iso /opensuse/cdrom

-- vytvoril som si priecinok, v ktorom som rozbalil initrd subor aby som sa pozrel ako livecd bootuje, zaujimal ma subor /opensuse/initrd/init, jeho preskumanim som prisiel nato ako sa system z livecd zavadza do pamate
Citace
mkdir -p /opensuse/initrd
cd /opensuse/initrd
gunzip < /opensuse/cdrom/boot/i386/loader/initrd | cpio -i --make-directories
less init

-- nasledne som dosiel k zisteniu ze vyuziva clicfs suborovy system ktory ale ja v mandrive nemam :-)
-- ak sa mi zajtra bude chciet, ja to opensuse nabootujem a dam podrobnejsie instrukcie ako ten suborovy system pripojit a modifikovat

 
-- Trochu som googlil, tu je akysi navod ako modifikovat livecd s clicfs.
http://www.linuxforums.org/forum/821383-post4.html

« Poslední změna: 04. 01. 2011, 22:43:21 od cl1d3 »


xmms

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re: Boot live CD a copy to ram
« Odpověď #5 kdy: 04. 01. 2011, 23:03:26 »
Další problém je v tom, jak vyrobit tohle live cd, aby to bootovalo z flešky. Na to existuje program SUSE Studio Imagewriter. Imagewriter umí udělat flešku jen z originálních suse live CD. Když si udělám live CD pomocí isolinux s použitím původního obsahu, CD sice funguje a bootuje, ale Imagewriter z něho flešku odmítne udělat s hlášením Sorry, I can't write this ISO. Při pokusech udělat to ručně přes syslinux pomocí návodu na stránkách http://www.debian.org/releases/stable/amd64/ch04s03.html.cs mi to nikdy nefungovalo.

Je nějaký snadný způsob, jak přinutit zavaděč, aby natáhnul libovolné bootovací ISO, ať už je na něm cokoliv? Hodilo by se mi mít na flešce hromadu ISO - windows, linux, dos nebo cokoliv jiného a jen si vybrat.
« Poslední změna: 04. 01. 2011, 23:06:25 od xmms »

Re: Boot live CD a copy to ram
« Odpověď #6 kdy: 04. 01. 2011, 23:14:16 »
V Ubuntu existuje usb-creator-gtk, tam si pokiaľ viem vyberám ľubovoľné iso, alebo skúste urobiť .img a zapísať ho klasicky dd (z takto urobeného kľúča inštalujem PC-BSD)

xmms

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re: Boot live CD a copy to ram
« Odpověď #7 kdy: 04. 01. 2011, 23:56:37 »
To už jsem všechno zkoušel, výsledkem bylo obvykle operating system not found.

Snažil jsem se vyrobit bootovací flešku ručně. Udělal jsem fat32 fdiskem, označil jako boot, mkfs.vfat /dev/sdb1

to jsem namountoval a překopíroval tam obsah z live CD a vrazil tam syslinux /dev/sdb1.

Po restartu to hlásilo, že nemůže najít gfxboot. To znamená, že syslinux se spustil, ale nemohl najít ten gfxboot. Nevím proč. Nefunguje to ani jako fat16 a mkdosfs.

xmms

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re: Boot live CD a copy to ram
« Odpověď #8 kdy: 05. 01. 2011, 01:03:03 »
cl1d3: díky za nakopnutí. Ten initrd se mi nedařilo rozbalit, zkoušel jsem to gunzipem a hlásilo to chyby. Nevěděl jsem o cpio. Koukal jsem na linuxrc u pclinux, který umí načíst CD do paměti a dělá to takhle:

Kód: [Vybrat]
                                                RAMDIR="/initrd/livecd.ram"
                                                mkdir -p $RAMDIR
                                                # make sure we have enough room for the image
                                                IMAGESIZE=`ls -l $MNTCDROM/livecd.sqfs | awk '{print $5+1000000}'`
                                                mount -t tmpfs -o "size=$IMAGESIZE" tmpfs $RAMDIR
                                                if [ "$?" -eq 0 ]; then
                                                        # copy the livecd.sqfs image to a tmpfs directory to be used as the new MNTCDROM
                                                        echo -n
                                                        echo -n " Copying to memory, please stand by..."
                                                        cp -R $MNTCDROM/livecd.sqfs $RAMDIR
                                                        if [ "$?" -eq 0 ]; then
                                                                printok
                                                                # free the boot device
                                                                umount $MNTLIVECD
                                                                umount $MNTCDROM
                                                                # and use our new directory as the new MNTLIVECD
                                                                `losetup -d $DEVLOOP 2>&1 >/dev/null`
                                                                losetup $DEVLOOP $RAMDIR/livecd.sqfs
                                                                mount -r -t squashfs $DEVLOOP $MNTLIVECD
                                                                rm -rf /initrd/sbin/halt.local
                                                        else
                                                                `umount $RAMDIR 2>&1 >/dev/null`
                                                                echo -n "copy 2 ram was unsuccesfull"
                                                                printfail
                                                        fi
                                                else
                                                        `umount $RAMDIR 2>&1 >/dev/null`
                                                        echo -n "the iso is larger than the available ram"
                                                        printfail
                                                fi
                                        fi

Možná by to šlo vrazit do opensuse a udělat to podobně.