Bug 804172

Summary: grub1: hangs when XFS is used as root device
Product: [openSUSE] openSUSE 12.3 Reporter: Jan Engelhardt <jengelh>
Component: BasesystemAssignee: Torsten Duwe <duwe>
Status: RESOLVED NORESPONSE QA Contact: E-mail List <qa-bugs>
Severity: Minor    
Priority: P5 - None CC: mchang
Version: RC 1   
Target Milestone: ---   
Hardware: x86-64   
OS: Linux   
Whiteboard:
Found By: Beta-Customer Services Priority:
Business Priority: Blocker: ---
Marketing QA Status: --- IT Deployment: ---
Attachments: strace last lines

Description Jan Engelhardt 2013-02-17 08:41:28 UTC
Created attachment 525003 [details]
strace last lines

This occurs first and foremost when doing a clean install. In the partitioner, pick

sda: 1 partition
sda1: mountpoint /, XFS
No other partitions
(I also had sdb in my test, which I don't touch)

Bootloader: GRUB1, boot from MBR=enabled, boot from partition=disabled
(because XFS does not support PBR)

Yast then installs and prepares the final system (/mnt) in such a way that:

# chroot /mnt
# cat /etc/grub.conf
setup --stage2=/boot/grub/stage2 --force-lba (hd0) (hd0,0)
quit
# cat /boot/grub/device.map
(hd0) /dev/sda
(hd1) /dev/sdb
# strace /usr/sbin/grub --device-map=/boot/grub/device.map --batch </etc/grub.conf

See the screenshot for the last lines of strace output. After that, grub goes into what looks very much like an infinite loop.
Comment 1 Jan Engelhardt 2013-02-17 08:48:52 UTC
This only seems to happen in the initial install.

I can go to tty2, kill the hanging grub process, after which yast2 notifies me of the abnormal termination of grub (which is ok), then proceeds on to reboot the system. On reboot, I boot the installation system with manual=1 so as to choose linuxrc's menu entry "Boot installed system" - since there is no bootloader on sda yet.

In the so-started system, executing grub-install and/or grub --batch </etc/grub.conf succeeds:

grub> setup --stage2=/boot/grub/stage2 --force-lba (hd0) (hd0,0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/xfs_stage1_5" exists... yes
 Running "embed /boot/grub/xfs_stage1_5 (hd0)"...  19 sectors are embedded.
succeeded
 Running "install --force-lba --stage2=/boot/grub/stage2 /boot/grub/stage1 (hd0) (hd0)1+19 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
grub> quit

rpm -q grub => 0.97-188.1.1
Comment 2 Michael Chang 2013-02-18 03:37:42 UTC
I can see the difference is whether xfs stage1.5 used or not. If embedding stage 1.5 then it's no need to figure out physical offset to stage2 during the install process, which grub seemed to have problem.
Comment 3 Torsten Duwe 2013-02-18 10:36:56 UTC
So, would it help to copy xfs_stage1_5 to /mnt/boot/grub during the installation, isn't this done already?
Comment 4 Torsten Duwe 2013-02-18 10:37:58 UTC
BTW, did this work in 12.21 or 12.2?
Comment 5 Torsten Duwe 2013-09-03 10:37:05 UTC
Guess so.