Cyril Brulebois <kibi@debian.org> (24/12/2012): > I've just tried the following, instead of using some mini.iso (or any > official iso) in a CD-Rom drive: > - convert it to a VDI image: > VBoxManage convertfromraw dest/netboot/gtk/mini.iso dest/netboot/gtk/mini.vdi > - attach the resulting VDI image to SATA port 0 in virtualbox. > - use guided partitioning, everything in a single partition, into > /dev/sdb (SATA port 1) > - enjoy the attempted “grub-install /dev/sda” call. > > I'll be trying to fix that before rc1. Here's what happens in grub-installer, with comments inline: | # Try to avoid using (hd0) as a boot device name. Something which can be | # turned into a stable by-id name is better. | default_bootdev_os="$($chroot $ROOT grub-mkdevicemap --no-floppy -m - | head -n1 | cut -f2)" Notice the head -n1 here. If you're booting from /dev/sda, that's what you get, no matter what. For reference, here's what it looks like for two disks: (hd0) /dev/disk/by-id/ata-VBOX_HARDDISK_id1-id2 (hd1) /dev/disk/by-id/ata-VBOX_HARDDISK_id3-id4 | if [ "$default_bootdev_os" ]; then | default_bootdev="$($chroot $ROOT readlink -f "$default_bootdev_os")" That one turns the former top line into: /dev/sda | else | default_bootdev="(hd0)" | fi | | # Set a sensible default boot device, so that we aren't installing GRUB to | # installation media which may be removed later. The disk containing /cdrom | # is very unlikely to be a sensible default. If we had to fall back to | # (hd0), then we can't tell exactly which disk that is, but if /cdrom seems | # to be a USB stick then (hd0) may not be safe. If we hit either of those | # checks, then try the disk containing /boot instead. | # The same goes for /hd-media, so avoid installing there as well. | cdsrc=$(mount | grep "on /cdrom " | cut -d' ' -f1) | cdfs=$(mount | grep "on /cdrom " | cut -d' ' -f5) | hdsrc=$(mount | grep "on /hd-media " | cut -d' ' -f1) Unfortunately, that kind of filtering can't really work for the boot from USB case, since no /dev/sda shows up in mount's output (or in /proc/mounts). All we have about it is presumably: rootfs / rw 0 0 which isn't exactly sufficient. Otherwise, we could just insert some “grep -v $foo” before the head/cut pair in the first line I quoted. Another way I see would be: 1. use /etc/fstab in /target to see whether there's a /boot there, and fall back to / if needed. 2. use readlink on /dev/disk/by-uuid/$UUID to get the appropriate partition (say /dev/sdb1 for a full disk installation in my case), and get back to the actual disk (/dev/sdb). 3. use that as the default. Let's see whether a big red man pops up tonight with a clever(er) idea. Mraw, KiBi.
Attachment:
signature.asc
Description: Digital signature