On Fri, Sep 10, 2010 at 07:29:01AM -0400, David Relson wrote:
> On Fri, 10 Sep 2010 11:05:12 +0200
> J. Roeleveld wrote:
> 
> > On Friday 10 September 2010 10:43:30 Jake Moe wrote:
> > >   On 10/09/2010 5:27 PM, Maciej Grela wrote:
> > > > 2010/9/10 Jake Moe<jakesaddr...@gmail.com>:
> > > >>   Hello all,
> > > >> 
> > > >> I've been thinking about creating a Gentoo USB stick for install
> > > >> and rescue purposes (and, of course, just to see if I could).
> > > >> I've mostly followed the Gentoo handbook (I used a single 4GB
> > > >> partition for the whole system, and no swap).  I've used
> > > >> genkernel for the kernel (so I can have a multi-system capable
> > > >> kernel).  I've gotten GRUB installed and working.  My problem
> > > >> comes in after what I believe is the init process:
> > > >> 
> > > >> 
> > > >> Gentoo Linux; http://www.gentoo.org
> > > >> 
> > > >>   Copyright 1999-2009 Gentoo Foundation; Distributed under the
> > > >> GPLv2
> > > >> 
> > > >> Press I to enter interactive boot mode
> > > >> 
> > > >>   * Mounting proc
> > > >> at /proc ... [
> > > >> 
> > > >> ok ]
> > > >> 
> > > >>   * Mounting sysfs
> > > >> at /sys ... [
> > > >> 
> > > >> ok ]
> > > >> 
> > > >>   *
> > > >> Mounting /dev ... [
> > > >> 
> > > >> ok ]
> > > >> 
> > > >>   * Starting
> > > >> udevd ... [
> > > >> 
> > > >> ok ]
> > > >> 
> > > >>   * Populating /dev with existing devices through
> > > >> uevents ... [
> > > >> 
> > > >> ok ]
> > > >> 
> > > >>   * Waiting for uevents to be
> > > >> processed ... [
> > > >> 
> > > >> ok ]
> > > >> 
> > > >>   * Mounting devpts
> > > >> at /dev/pts ... [
> > > >> 
> > > >> ok ]
> > > >> 
> > > >>   * Checking root filesystem ...
> > > >> 
> > > >> fsck.ext2: No such file or directory while trying to
> > > >> open /dev/sda1 /dev/sda1:
> > > >> The superblock could not be read or does not describe a correct
> > > >> ext2 filesystem.  If the device is valid and it really contains
> > > >> an ext2 filesystem (and not swap or ufs or something else), then
> > > >> the superblock
> > > >> 
> > > >> is corrupt, and you might try running e2fsck with an alternate 
> > superblock:
> > > >>     e2fsck -b 8193<device>
> > > >>   
> > > >>   * Filesystem couldn't be
> > > >> fixed :( [
> > > >> 
> > > >> !! ]
> > > >> Give root password for maintenance
> > > >> (or type Control-D to continue):
> > > >> 
> > > >> 
> > > >> If I give the root password, I can find no /dev/sda1.  However,
> > > >> mount shows /dev/sda1 on /, and there *is* a /sys/block/sda
> > > >> folders, with a sda1 folder in that as well.  It's almost like
> > > >> it had /dev/sda1, but then lost it somehow.
> > > >> 
> > > >> Does anyone have any idea what's going on here?  Any help would
> > > >> be appreciated.
> > > > 
> > > > Have you seen http://www.sysresccd.org/Main_Page ? It's based on
> > > > Gentoo, you could check what they did to boot from a usb stick.
> > > > 
> > > > Br,
> > > > Maciej Grela
> > > 
> > > Excellent, thanks for that, I hadn't found it in my previous
> > > searches. I'll have a look there.
> > > 
> > > Jake Moe
> > 
> > Had a similar issue a while ago when I was playing around with this
> > myself.
> > 
> > Take a look at the linux boot parameters.
> > 
> > The 'theoretical' part is: You need to let the kernel initialize the
> > USB-stick before trying to access it. (This can take some time)
> > 
> > There is a delay-option, just can't remember the proper name off-hand.
> > 
> > --
> > Joost
> 
> I've got USB booting working in a syslinux environment.  A delay of 12
> seconds is working for me.  The syslinux.cfg stanza I use is:
> 
> LABEL usb
> KERNEL linux
> APPEND rootdelay=12 root=/dev/sda2

The usual way for linux on removable usb sticks / disks is to use LABEL
or UUID to identify the disks and not the device names, because they
will be different in different computers ;) The downside is that you
need an initrd to mount the root partition... I think that the usual
initrd generated by genkernel works...

If you created the rootfs with:
mkfs.ext2 -j -LUSBGentoo  /dev/sdXY

then you can change the kernel parameter to 
root=LABEL=USBGentoo

and your fstab to:
LABEL=USBGentoo         /               ext3 ...

You can also use the uuid of the filesystem, find it out with
dumpe2fs -h  /dev/sdb2 | grep UUID
and then use UUID=XXX instead of LABEL=XXX

I never really played around with grub and  USB booting, so I use
syslinux. I create a small FAT partition with syslinux, kernel and
initrd image  (it gets also pretty handy when you sometimes need to copy
something from a windows machine ;) and a second "regular" ext3
partition for the rootfs.

Basically you would do:
- partition the stick, mark the FAT partition as bootable/active
- format the partitions:
  - mkfs.vfat -nUSBData /dev/sdX1
  - mkfs.ext2 -j -LUSBGentoo /dev/sdX2
- install syslinux (on the FAT partition):
  - syslinux /dev/sdX1
- mount /dev/sdX2, install gentoo in the usual way
- compile the kernel and initrd, make sure required USB stuff is in the kernel
   (theoretically it could be as modules in initrd... but in-kernel is safer :)
  if you are in a hurry, or don't know how to create them, get them from
  a gentoo livecd ;) don't forget to also copy the modules
  (/lib/modules-XXX/...) from the livecd to the rootfs.
- put the kernel and initrd on the FAT partition (I name them  vmlinuz.img
  and initrd.img)
- edit syslinux.cfg (on the FAT partition), see
  
http://syslinux.zytor.com/wiki/index.php/SYSLINUX#How_do_I_Configure_SYSLINUX.3F
  a very simple one from my USB disk:

DEFAULT linux
LABEL linux
SAY Now booting USBGentoo
KERNEL vmlinuz.img
APPEND root=LABEL=USBGentoo initrd=initrd.img

you might also add rootdelay=10 to the options if the usb stick/disk isn't
detected quick enough

umount, reboot, set the computer to boot from usb, enjoy... ;)
Xorg without a config seems to work pretty well on most computers these
days, IIRC the alsa modules for soundcards are also autoloaded, so you
don't need any fancy hw detection to have a desktop running from USB
stick ;)


yoyo



BTW there is also a "manual" way to boot even without an initrd: use
LABEL=XXX in your fstab, on the kernel command line use root=/dev/sda2
(or whatever you think will be more probable on you machines ;)
then try to boot it, if it is wrong, you can enter  the corrent
"root=/dev/sdX2" param in the syslinux prompt (you can either look up the
correct device in the boot messages, or just try sda, sdb, sdc, ... ;)
You could also create menu options for the usual cases... (sda...sdf
shoud be more than enough... ;)
You can however accidentally mount a rootfs from one of the disks on the
computer and thus booting the system on the computer, just with your
kernel... 




Reply via email to