Hello! The current GRUB cannot write Stage2 on the "install" command. This happens because stage2_sect is not calculated properly. As usually, the life is not trivial :-) Either we should introduce another debug_fs function for the first sector of Stage2 or the existing debug_fs_blocklist_func() should write the first sector into stage2_sect I prefer the second solution. The attached patch removes the "installsect" and makes debug_fs_blocklist_func() responsible for initialization of stage2_sect ChangeLog: * stage2/builtins.c (install_func): initialize stage2_sect with 0. Remove installsect (debug_fs_blocklist_func): write the current sector into stage2_sect if it is 0. Pavel Roskin
--- stage2/builtins.c Tue Sep 21 10:41:55 1999 +++ stage2/builtins.c Wed Sep 22 02:45:32 1999 @@ -727,7 +727,7 @@ int write_stage2_sect = 0; int stage2_sect; char *ptr; - int installaddr, installlist, installsect; + int installaddr, installlist; /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and INSTALLSECT. */ @@ -752,7 +752,8 @@ } *((unsigned short *) installlist) += 1; - installsect = sector; + if (!stage2_sect) + stage2_sect = sector; installaddr += 512; } @@ -921,8 +922,6 @@ *((unsigned short *) (BOOTSEC_LOCATION + STAGE1_INSTALLADDR)) = installaddr; - stage2_sect = installsect; - if (*ptr == 'p') { write_stage2_sect = 1; @@ -946,6 +945,7 @@ /* Read the whole of Stage 2. */ filepos = 0; debug_fs = debug_fs_blocklist_func; + stage2_sect = 0; if (! grub_read ((char *) RAW_ADDR (0x100000), -1)) { debug_fs = 0;