Package: grub-pc Version: 1.98+20100804-14 Severity: normal Hi,
This bug report applies to the common MBR partition tables, not to the newer and less common GUID Partition Tables (GPT). Here is the usage of grub-install that prompted this bug report, # grub-install /dev/sda7 /usr/sbin/grub-setup: warn: Attempting to install GRUB to a partition instead of the MBR. This is a BAD idea.. /usr/sbin/grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.. /usr/sbin/grub-setup: error: if you really want blocklists, use --force. --> exit status 1 I hold that if grub can be installed to the MBR using embedding, then in addition, grub can also be installed to any logical partition using embedding. In the standard MBR partition table, the first partition that follows the MBR actually starts at some offset from the MBR sector. This offset is usually the number of sectors per track for legacy partition tables, which is commonly 63 sectors, or is 2048 sectors for modern partition tables. This unused space created by the offset from the MBR to the start of the first partition is where grub is embedded to, when grub is installed to the MBR. The beginning of each logical partition is also offset from the pseudo-MBR that is used to define the location and size of each logical partition. This pseudo-MBR is by definition a linked list, beginning with the extended partition that contains the logical partitions, and then repeatedly occuring at the beginning of each successive logical partition, where it defines the size and start of each logical partition in turn. As it currently stands, when grub is installed to a logical partition via blocklists, grub's boot.img file is stored in the partition's boot partition block, which is the first sector of that logical partition. What I am proposing is that grub's core.img can be embedded in the unused space which is part of each logical partition, that is, the unused space from the the end of the pseudo-MBR to just prior to the partition's boot partition block. I will briefly give a concrete example of my proposal by using the following partition table listings of my disk /dev/sda, as generated by fdisk and cfdisk, respectively, -- Fdisk Listing -- Device Boot Start End Blocks Id System /dev/sda1 2048 8482319 4240136 b W95 FAT32 /dev/sda2 * 8482320 16964639 4241160 7 HPFS/NTFS /dev/sda3 16964640 153324359 68179860 7 HPFS/NTFS /dev/sda4 153324360 976768064 411721852+ f W95 Ext'd (LBA) /dev/sda5 153326408 358827839 102750716 7 HPFS/NTFS /dev/sda6 358829888 375663959 8417036 82 Linux swap / Solaris /dev/sda7 375666008 396741239 10537616 83 Linux /dev/sda8 396743288 417818519 10537616 83 Linux /dev/sda9 417820568 438895799 10537616 83 Linux /dev/sda10 438897848 459973079 10537616 83 Linux /dev/sda11 459975128 481050359 10537616 83 Linux /dev/sda12 481052408 502127639 10537616 83 Linux /dev/sda13 502129688 638487359 68178836 83 Linux /dev/sda14 638489408 843990839 102750716 83 Linux -- Cfdisk Listing -- First Last # Type Sector Sector Offset Length Filesystem Type (ID) Flag -- ------- ----------- ----------- ------ ----------- -------------------- ---- None 0 2047* 0# 2048*Unusable None 1 Primary 2048* 8482319 0 8480272*W95 FAT32 (0B) None 2 Primary 8482320 16964639 0 8482320 HPFS/NTFS (07) Boot 3 Primary 16964640 153324359 0 136359720 HPFS/NTFS (07) None 4 Primary 153324360 976768064 0 823443705 W95 Ext'd (LBA) (0F) None 5 Logical 153324360 358827839 2048# 205503480 HPFS/NTFS (07) None 6 Logical 358827840 375663959 2048# 16836120 Linux swap / So (82) None 7 Logical 375663960 396741239 2048# 21077280 Linux (83) None 8 Logical 396741240 417818519 2048# 21077280 Linux (83) None 9 Logical 417818520 438895799 2048# 21077280 Linux (83) None 10 Logical 438895800 459973079 2048# 21077280 Linux (83) None 11 Logical 459973080 481050359 2048# 21077280 Linux (83) None 12 Logical 481050360 502127639 2048# 21077280 Linux (83) None 13 Logical 502127640 638487359 2048# 136359720 Linux (83) None 14 Logical 638487360 843990839 2048# 205503480 Linux (83) None Logical 843990840 976768064 0 132777225 Free Space None I will use /dev/sda7, where the grub-install originally failed, According to cfdisk, the pseudo-MBR is located at sector 375663960, which is 1 sector after the end of partition sda6. According to fdisk, the boot partition block is located at sector 375666008, which is 2048 sectors after sector 375663960. Therefore, grub's core.img can be placed anywhere in the unused space located from sector 375663961 (375663960+1) to sector 375666007 (375666008-1), while grub's boot.img would be placed in its usual location within the boot partition block at sector 375666008. For best efficiency with modern disks with 4k physical sectors, grub's core.img should begin at an LBA (512 byte sector) that is on an 8 (LBA) sector boundary. I close with one additional observation - with grub-legacy it is currently possible to embed grub-legacy within a logical partition as described above, by using /bin/dd and the expert's grub install command. However, I can find no such work-around available to embed grub-pc within a logical partition. Thanks, Jeffrey Sheinberg -- Package-specific info: *********************** WARNING grub-setup left core.img in filesystem *********************** BEGIN /proc/mounts /dev/sda7 / ext3 rw,relatime,grpid,data=ordered,jqfmt=vfsv0,usrjquota=aquota.user 0 0 /dev/sda8 /fs/dc ext3 rw,relatime,grpid,data=ordered,jqfmt=vfsv0,usrjquota=aquota.user 0 0 /dev/sda9 /fs/dh ext3 rw,relatime,grpid,data=ordered,jqfmt=vfsv0,usrjquota=aquota.user 0 0 *********************** END /proc/mounts *********************** BEGIN /boot/grub/device.map (hd0) /dev/disk/by-id/ata-WDC_WD5000AAKS-75V0A0_WD-WCAWF0177971 (hd1) /dev/disk/by-id/ata-WDC_WD5000AAKS-00V1A0_WD-WMAWF1203364 (hd2) /dev/disk/by-id/usb-Kingston_DataTraveler_2.0_899801162008011514259E4E-0:0 *********************** END /boot/grub/device.map *********************** BEGIN /boot/grub/grub.cfg # # DO NOT EDIT THIS FILE # # It is automatically generated by grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### if [ -s $prefix/grubenv ]; then load_env fi set default="0" if [ "${prev_saved_entry}" ]; then set saved_entry="${prev_saved_entry}" save_env saved_entry set prev_saved_entry= save_env prev_saved_entry set boot_once=true fi function savedefault { if [ -z "${boot_once}" ]; then saved_entry="${chosen}" save_env saved_entry fi } function load_video { insmod vbe insmod vga insmod video_bochs insmod video_cirrus } terminal_input console terminal_output console set timeout=29 play 480 440 1 ### END /etc/grub.d/00_header ### ### BEGIN /etc/grub.d/05_debian_theme ### set menu_color_normal=cyan/blue set menu_color_highlight=white/blue ### END /etc/grub.d/05_debian_theme ### ### BEGIN /etc/grub.d/10_linux ### menuentry 'Debian GNU/Linux, with Linux 2.6.38-bpo.2-amd64' --class debian --class gnu-linux --class gnu --class os { insmod part_msdos insmod ext2 set root='(hd0,msdos7)' search --no-floppy --fs-uuid --set d19e208c-a52b-4988-b9d1-faf76e0ae559 echo 'Loading Linux 2.6.38-bpo.2-amd64 ...' linux /boot/vmlinuz-2.6.38-bpo.2-amd64 root=/dev/sda7 ro echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-2.6.38-bpo.2-amd64 } menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os { insmod part_msdos insmod ext2 set root='(hd0,msdos7)' search --no-floppy --fs-uuid --set d19e208c-a52b-4988-b9d1-faf76e0ae559 echo 'Loading Linux 2.6.32-5-amd64 ...' linux /boot/vmlinuz-2.6.32-5-amd64 root=/dev/sda7 ro echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-2.6.32-5-amd64 } ### END /etc/grub.d/10_linux ### ### BEGIN /etc/grub.d/20_linux_xen ### ### END /etc/grub.d/20_linux_xen ### ### BEGIN /etc/grub.d/20_memtest86 ### menuentry "Memory test (memtest86)" { linux16 /boot/memtest86.bin } ### END /etc/grub.d/20_memtest86 ### ### BEGIN /etc/grub.d/20_memtest86+ ### menuentry "Memory test (memtest86+)" { insmod part_msdos insmod ext2 set root='(hd0,msdos7)' search --no-floppy --fs-uuid --set d19e208c-a52b-4988-b9d1-faf76e0ae559 linux16 /boot/memtest86+.bin } menuentry "Memory test (memtest86+, serial console 115200)" { insmod part_msdos insmod ext2 set root='(hd0,msdos7)' search --no-floppy --fs-uuid --set d19e208c-a52b-4988-b9d1-faf76e0ae559 linux16 /boot/memtest86+.bin console=ttyS0,115200n8 } menuentry "Memory test (memtest86+, experimental multiboot)" { insmod part_msdos insmod ext2 set root='(hd0,msdos7)' search --no-floppy --fs-uuid --set d19e208c-a52b-4988-b9d1-faf76e0ae559 multiboot /boot/memtest86+_multiboot.bin } menuentry "Memory test (memtest86+, serial console 115200, experimental multiboot)" { insmod part_msdos insmod ext2 set root='(hd0,msdos7)' search --no-floppy --fs-uuid --set d19e208c-a52b-4988-b9d1-faf76e0ae559 multiboot /boot/memtest86+_multiboot.bin console=ttyS0,115200n8 } ### END /etc/grub.d/20_memtest86+ ### ### BEGIN /etc/grub.d/30_os-prober ### menuentry "Debian GNU/Linux, with Linux 2.6.32-5-amd64 (on /dev/sda10)" { insmod part_msdos insmod ext2 set root='(hd0,msdos10)' search --no-floppy --fs-uuid --set e3fd53ab-0f8c-422c-b99e-cabfcad65068 linux /boot/vmlinuz-2.6.32-5-amd64 root=/dev/sda7 ro initrd /boot/initrd.img-2.6.32-5-amd64 } menuentry "Debian GNU/Linux, with Linux 2.6.32-5-686 (on /dev/sda10)" { insmod part_msdos insmod ext2 set root='(hd0,msdos10)' search --no-floppy --fs-uuid --set e3fd53ab-0f8c-422c-b99e-cabfcad65068 linux /boot/vmlinuz-2.6.32-5-686 root=/dev/sda7 ro initrd /boot/initrd.img-2.6.32-5-686 } menuentry "Windows 7 (loader) (on /dev/sda2)" { insmod part_msdos insmod ntfs set root='(hd0,msdos2)' search --no-floppy --fs-uuid --set 9a0286ed0286cda7 chainloader +1 } menuentry "Debian GNU/Linux, with Linux 2.6.32-5-amd64 (on /dev/sdb10)" { insmod part_msdos insmod ext2 set root='(hd1,msdos10)' search --no-floppy --fs-uuid --set e6730c78-dd18-482c-b693-bd5996d3fe78 linux /boot/vmlinuz-2.6.32-5-amd64 root=/dev/sda7 ro initrd /boot/initrd.img-2.6.32-5-amd64 } menuentry "Debian GNU/Linux, with Linux 2.6.32-5-686 (on /dev/sdb10)" { insmod part_msdos insmod ext2 set root='(hd1,msdos10)' search --no-floppy --fs-uuid --set e6730c78-dd18-482c-b693-bd5996d3fe78 linux /boot/vmlinuz-2.6.32-5-686 root=/dev/sda7 ro initrd /boot/initrd.img-2.6.32-5-686 } menuentry "Windows 7 (loader) (on /dev/sdb2)" { insmod part_msdos insmod ntfs set root='(hd1,msdos2)' search --no-floppy --fs-uuid --set 9a0286ed0286cda7 chainloader +1 } menuentry "Debian GNU/Linux, with Linux 2.6.32-5-amd64 (on /dev/sdb7)" { insmod part_msdos insmod ext2 set root='(hd1,msdos7)' search --no-floppy --fs-uuid --set 0d9545e8-22a8-4cb5-ad88-aadf1785c121 linux /boot/vmlinuz-2.6.32-5-amd64 root=/dev/sda7 ro initrd /boot/initrd.img-2.6.32-5-amd64 } menuentry "Debian GNU/Linux, with Linux 2.6.32-5-686 (on /dev/sdb7)" { insmod part_msdos insmod ext2 set root='(hd1,msdos7)' search --no-floppy --fs-uuid --set 0d9545e8-22a8-4cb5-ad88-aadf1785c121 linux /boot/vmlinuz-2.6.32-5-686 root=/dev/sda7 ro initrd /boot/initrd.img-2.6.32-5-686 } ### END /etc/grub.d/30_os-prober ### ### BEGIN /etc/grub.d/40_custom ### # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. ### END /etc/grub.d/40_custom ### ### BEGIN /etc/grub.d/41_custom ### if [ -f $prefix/custom.cfg ]; then source $prefix/custom.cfg; fi ### END /etc/grub.d/41_custom ### *********************** END /boot/grub/grub.cfg -- System Information: Debian Release: 6.0.2 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'proposed-updates'), (500, 'stable') Architecture: i386 (x86_64) Kernel: Linux 2.6.32-5-amd64 (SMP w/2 CPU cores) Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) Shell: /bin/sh linked to /bin/dash Versions of packages grub-pc depends on: ii debconf [debconf-2.0] 1.5.36.1 Debian configuration management sy ii grub-common 1.98+20100804-14 GRand Unified Bootloader, version ii libc6 2.11.2-10 Embedded GNU C Library: Shared lib ii libdevmapper1.02.1 2:1.02.48-5 The Linux Kernel Device Mapper use ii ucf 3.0025+nmu1 Update Configuration File: preserv grub-pc recommends no packages. Versions of packages grub-pc suggests: pn desktop-base <none> (no description available) -- debconf information: grub2/kfreebsd_cmdline: grub2/device_map_regenerated: * grub2/linux_cmdline: * grub-pc/install_devices_empty: true grub-pc/install_devices_failed: false * grub-pc/chainload_from_menu.lst: true grub-pc/kopt_extracted: true * grub-pc/install_devices: grub-pc/postrm_purge_boot_grub: false grub-pc/install_devices_failed_upgrade: true grub-pc/disk_description: grub2/kfreebsd_cmdline_default: quiet grub-pc/partition_description: grub-pc/install_devices_disks_changed: * grub2/linux_cmdline_default: grub-pc/mixed_legacy_and_grub2: true -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org