Sponsored Content
Top Forums UNIX for Beginners Questions & Answers Answers to Frequently Asked Questions Tips and Tutorials Octave --- My octuple boot laptop Post 302092241 by Perderabo on Saturday 7th of October 2006 02:15:15 PM
Old 10-07-2006
One of the secrets of success in a complex installation like this is to completely understand exactly where everything is on disk. Acronis disk director could list some of the info, but I needed more. I wrote a tool to take the info that Acronis displayed and produce a table for my notes...

Code:
   ===== Device Name ====                                     ========== Start ========== ========== End ============== ====== Length ========
P#   Grub   Linux FreeBSD      Description    Partition Type     LBA     Cyl--Head--Sectr    LBA     Cyl--Head--Sector   Sectors    MB    Cyls
-- -------- ----- ------- ------------------- --------------- ---------- ---------------- ---------- ------------------ --------- ------ -----
   (hd0)    hda           the whole disk                               0 (0---0---1)       195371568 (12161---81---1)     5371569   2622   334
                          first full cylinder                          0 (0---0---1)           16064 (0---254---63)         16065      7     1
                          usable space                                 0 (0---0---1)       195366464 (12160---254---63)   5366465   2620   334
                          unusable space                       195366465 (12161---0---1)   195371568 (12161---81---1)        5104      2
                          MBR                                          0 (0---0---1)               0 (0---0---1)                1
                          the hidden sectors                           1 (0---0---2)              62 (0---0---63)              62
1  (hd0,0)  hda1  ad0s1   XP                  NTFS       0x07         63 (0---1---1)        31519529 (1961---254---63)    1519467    741    94
                          EBR                                   31519530 (1962---0---1)     31519592 (1962---0---63)           63
5  (hd0,4)  hda5  ad0s4   driveE              FAT32      0x0B   31519593 (1962---1---1)     52500419 (3267---254---63)    0980827    478    61
                          EBR                                   52500420 (3268---0---1)     52500482 (3268---0---63)           63
6  (hd0,5)  hda6  ad0s5   /userdata           EXT3       0x83   52500483 (3268---1---1)     62990864 (3920---254---63)    0490382    239    30
                          EBR                                   62990865 (3921---0---1)     62990934 (3921---1---7)            70
7  (hd0,6)  hda7  ad0s7   /mastergrub         EXT3       0x83   62990935 (3921---1---8)     63263969 (3937---254---63)     273035    133    16
                          EBR                                   63263970 (3938---0---1)     63264032 (3938---0---63)           63
8  (hd0,7)  hda8  ad0s8                       Linux swap 0x82   63264033 (3938---1---1)     67472999 (4199---254---63)    4208967   2055   262
                          EBR                                   67473000 (4200---0---1)     67473062 (4200---0---63)           63
9  (hd0,8)  hda9  ad0s9   /tmp                EXT3       0x8E   67473063 (4200---1---1)     69577514 (4330---254---63)    2104452   1027   131
                          EBR                                   69577515 (4331---0---1)     69577577 (4331---0---63)           63
10 (hd0,9)  hda10 ad0s10  Redhat00            Linux LVM  0x8E   69577578 (4331---1---1)     77979509 (4853---254---63)    8401932   4102   523
                          EBR                                   77979510 (4854---0---1)     77979572 (4854---0---63)           63
11 (hd0,10) hda11 ad0s11  Fedora00            Linux LVM  0x8E   77979573 (4854---1---1)     88469954 (5506---254---63)    0490382    239    30
                          EBR                                   88469955 (5507---0---1)     88470017 (5507---0---63)           63
12 (hd0,11) hda12 ad0s12  SuSE00              Linux LVM  0x8E   88470018 (5507---1---1)    101064914 (6290---254---63)    2594897   1267   161
                          EBR                                  101064915 (6291---0---1)    101064977 (6291---0---63)           63
13 (hd0,12) hda13 ad0s13  Debian00            Linux LVM  0x8E  101064978 (6291---1---1)    117852839 (7335---254---63)    6787862   3314   422
                          EBR                                  117852840 (7336---0---1)    117852902 (7336---0---63)           63
14 (hd0,13) hda14 ad0s14  Scientific00        Linux LVM  0x8E  117852903 (7336---1---1)    130447799 (8119---254---63)    2594897   1267   161
                          EBR                                  130447800 (8120---0---1)    130447862 (8120---0---63)           63
15 (hd0,14) hda15 ad0s15  /backupgrub         EXT3       0x83  130447863 (8120---1---1)    130720904 (8136---254---63)     273042    133    17
                          EBR                                  130720905 (8137---0---1)    130720967 (8137---0---63)           63
16 (hd0,15) hda16 ad0s16  /testgrub           EXT3       0x83  130720968 (8137---1---1)    130994009 (8153---254---63)     273042    133    17
                          Free Space                           130994010 (8154---0---1)    158256314 (9850---254---63)    7262305   3546   452
2  (hd0,2)  hda2  ad0s2                       FreeBSD    0xA5  158256315 (9851---0---1)    172939724 (10764---254---63)   4683410   2286   291
3  (hd0,3)  hda3  ad0s3                       Solaris    0xBF  172939725 (10765---0---1)   195366464 (12160---254---63)   2426740   1184   151

Some notes on this...

MBR, the hidden sectors, and the EBR's
The Master Boot Record (MBR) is the first sector of the disk. It has the boot code and the partition table in it. The rest of the first track is called "the hidden sectors". In my case, Grub stage 1.5 is in the hidden sectors. The structure of this first track is duplicated for each logical partition. Each logical partition has a structure like a MBR as it first sector. Then the rest of the first track is ignored. This first track immediately precedes the logical partition that it describes. Microsoft uses the term "logical drive" which almost means the same thing as "logical partition". But looking carefully at the definitions it seems to me that "logical drive" = EBR + "wasted sectors" + "logical partition". In any case, you need the MBR and the EBR's to define the partition layout of a drive. I see programs to backup the MBR but they always ignore the EBR's. I will fix that by writing a utility to backup the MBR plus the EBR's. Strickly speaking the EBR is one sector and it is followed by some wasted sectors. In my chart I have cheated a little bit and redefined the EBR to be all overhead sectors between partitions. I feel that the chart is "busy enough" and would be even harder to read with two lines between each partition.


Cylinder Alignment
Notice how the partitions are generally aligned on cylinder boundaries. The exception is /mastergrub and this is due to a bug in Acronis Disk Director. I originally had /mastergrub at .5 MB which is too big. I shrunk it, but I made the free space appear before the partition rather then after it. (This let me shuffle the free space down and add it to my XP partition.) When I produced this chart, I noted that /mastergrub was not aligned properly. This wastes a few more cylinders, but it seems to have few consequences. The only potential problems that I can think of... Some programs try to guess the disk geometry....with amazing success. They might do this by looking at the alignment of the partitions. Some programs (like Acronis itself) can locate and restore deleted partitions. This might fail if the partition was misaligned to begin with. I notice that Acronis has a "fast" and "slow" search for deleted partitions (with the "slow" option being more robust) and this might push you into the "slow" option.

This encouraged me to experiment with partitions that were truly logical but also had an entry in the fourth MBR slot as a primary partition. My idea was to switch one of several logicals into the primary slot, install an OS, destroy the primary entry, and boot from the logical partition. This did not work very well. A smart bootloader could switch a partition from logical to primary and then boot it, but I did not want to write a bootloader.

I notice that each logical partition is wasting most of a full track. I am considering misaligning all of the partitions to recover that space. There is not a lot of space to be recovered and this may not be worth the effort. Also Acronis does not have enough control to allow me to try. I believe that qtparted can do this though.

Solaris Changed Types
Solaris 10 is using BF as its partition type and the Solasis 10 installer does not recognize partition with a type of 82 anymore.

I did not want to enter the starting and ending LBA's for the EBR's. The script should be able to calculate them from the preceding and following entries. This increased the complexity of the script but in the long run it saved effort. And here is the source code...
Code:
#! /usr/bin/ksh

typeset -L3 opartn
typeset -L9 ogrubdev
typeset -L6 olinuxdev
typeset -L8 ofbsddev
typeset -L20 odesc
typeset -L11 otype
typeset -L5 ohextype
typeset -R9 ofirst
typeset -L17 ofirstchs
typeset -R9 olast
typeset -L20 olastchs
typeset -R7 olong
typeset -R6 omegs
typeset -R5 ocyls
function chs
{
        ((s=$1%63))
        ((rest=$1/63))
        ((h=rest%255))
        ((c=rest/255))
        ((c=rest/255))
        ((s=s+1))
        echo "(${c}---${h}---${s})"
        return 0
}
some_data_left=1
saved_record=0

echo '   ===== Device Name ====                                     ========== Start ========== ========== End ============== ====== Length ========'
echo 'P#   Grub   Linux FreeBSD      Description    Partition Type     LBA     Cyl--Head--Sectr    LBA     Cyl--Head--Sector   Sectors    MB    Cyls'
echo '-- -------- ----- ------- ------------------- --------------- ---------- ---------------- ---------- ------------------ --------- ------ -----'

echo ';(hd0)   ;hda       ;            ;the whole disk     ;          ;    ;        0;195371568
      ;        ;          ;            ;first full cylinder;          ;    ;        0;    16064
      ;        ;          ;            ;usable space       ;          ;    ;        0;195366464
      ;        ;          ;            ;unusable space     ;          ;    ;195366465;195371568
      ;        ;          ;            ;MBR                ;          ;    ;        0;        0
      ;        ;          ;            ;the hidden sectors ;          ;    ;        1;       62
     1;(hd0,0) ;hda1      ;ad0s1       ;XP                 ;NTFS      ;0x07;       63; 31519529
      ;        ;          ;            ;EBR                ;          ;    ;         ;
     5;(hd0,4) ;hda5      ;ad0s4       ;driveE             ;FAT32     ;0x0B; 31519593; 52500419
      ;        ;          ;            ;EBR                ;          ;    ;         ;
     6;(hd0,5) ;hda6      ;ad0s5       ;/userdata          ;EXT3      ;0x83; 52500483; 62990864
      ;        ;          ;            ;EBR                ;          ;    ;         ;
     7;(hd0,6) ;hda7      ;ad0s7       ;/mastergrub        ;EXT3      ;0x83; 62990935; 63263969
      ;        ;          ;            ;EBR                ;          ;    ;         ;
     8;(hd0,7) ;hda8      ;ad0s8       ;                   ;Linux swap;0x82; 63264033; 67472999
      ;        ;          ;            ;EBR                ;          ;    ;         ;
     9;(hd0,8) ;hda9      ;ad0s9       ;/tmp               ;EXT3      ;0x8E; 67473063; 69577514
      ;        ;          ;            ;EBR                ;          ;    ;         ;
    10;(hd0,9) ;hda10     ;ad0s10      ;Redhat00           ;Linux LVM ;0x8E; 69577578; 77979509
      ;        ;          ;            ;EBR                ;          ;    ;         ;
    11;(hd0,10);hda11     ;ad0s11      ;Fedora00           ;Linux LVM ;0x8E; 77979573; 88469954
      ;        ;          ;            ;EBR                ;          ;    ;         ;
    12;(hd0,11);hda12     ;ad0s12      ;SuSE00             ;Linux LVM ;0x8E; 88470018;101064914
      ;        ;          ;            ;EBR                ;          ;    ;         ;
    13;(hd0,12);hda13     ;ad0s13      ;Debian00           ;Linux LVM ;0x8E;101064978;117852839
      ;        ;          ;            ;EBR                ;          ;    ;         ;
    14;(hd0,13);hda14     ;ad0s14      ;Scientific00       ;Linux LVM ;0x8E;117852903;130447799
      ;        ;          ;            ;EBR                ;          ;    ;         ;
    15;(hd0,14);hda15     ;ad0s15      ;/backupgrub        ;EXT3      ;0x83;130447863;130720904
      ;        ;          ;            ;EBR                ;          ;    ;         ;
    16;(hd0,15);hda16     ;ad0s16      ;/testgrub          ;EXT3      ;0x83;130720968;130994009
      ;        ;          ;            ;Free Space         ;          ;    ;130994010;158256314
     2;(hd0,2) ;hda2      ;ad0s2       ;                   ;FreeBSD   ;0xA5;158256315;172939724
     3;(hd0,3) ;hda3      ;ad0s3       ;                   ;Solaris   ;0xBF;172939725;195366464'|\
while ((some_data_left)) ; do
        if ((saved_record)) ; then
                saved_record=0
                partn=$saved_partn
                grubdev=$saved_grubdev
                linuxdev=$saved_linuxdev
                fbsddev=$saved_fbsddev
                desc=$saved_desc
                type=$saved_type
                hextype=$saved_hextype
                first=$saved_first
                last=$saved_last
        else
                if IFS=";" read partn grubdev linuxdev fbsddev desc type hextype first last ; then
                        if [[ "$desc" = EBR* ]] ; then
                                if IFS=";" read partn grubdev linuxdev fbsddev desc type hextype fir
                                        saved_record=1
                                        saved_partn=$partn
                                        saved_grubdev=$grubdev
                                        saved_linuxdev=$linuxdev
                                        saved_fbsddev=$fbsddev
                                        saved_desc=$desc
                                        saved_type=$type
                                        saved_hextype=$hextype
                                        saved_first=$first
                                        saved_last=$last
                                        partn=""
                                        grubdev=""
                                        linuxdev=""
                                        fbsddev=""
                                        type=""
                                        hextype=""
                                        desc="EBR"
                                        ((first=old_last+1))
                                        ((last=saved_first-1))
                                else
                                        echo error EBR is last record >&2
                                        exit 1
                                fi
                        fi
                else
                        some_data_left=0
                fi
        fi

        if ((some_data_left)) ; then
                opartn=$partn
                ogrubdev=$grubdev
                olinuxdev=$linuxdev
                ofbsddev=$fbsddev
                odesc=$desc
                otype=$type
                ohextype=$hextype
                ofirst=$first
                ofirstchs=$(chs $first)
                olast=$last
                olastchs=$(chs $last)
                ((olong=last-first+1))
                if ((olong>2048)) ; then
                        ((omegs=olong/2048))
                else
                        omegs=""
                fi
                if ((olong>16064)) ; then
                        ((ocyls=(olong+64)/16065))
                else
                        ocyls=""
                fi
                echo "${opartn}${ogrubdev}${olinuxdev}${ofbsddev}${odesc}${otype}${ohextype}" \
                        "${ofirst} ${ofirstchs} ${olast} ${olastchs} ${olong} ${omegs} ${ocyls}"

                old_partn=$partn
                old_grubdev=$grubdev
                old_linuxdev=$linuxdev
                old_fbsddev=$fbsddev
                old_desc=$desc
                old_type=$type
                old_hextype=$hextype
                old_first=$first
                old_last=$last
        fi
done
exit 0

 

7 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

How-to boot server with no CDROM via serial connection to laptop

I have an x86 Sun server, with no CDROM drive and no OS currently loaded on it. I need to install CentOS on it... trying to figure out how to do that. I've heard there are ways to connect to the serial management port, and mount a laptop's CDROM drive as a drive the server will recognize to... (0 Replies)
Discussion started by: Mariognarly
0 Replies

2. Ubuntu

Connect 2 laptops with RJ45 cable (Ubuntu 10.10 laptop with Windows 7 laptop)

Hi to all, I have the problem that a laptops with windows XP cannot startup even in safe mode nor using last good known configuration. I have a Ubuntu 10.10 Live CD and booting from it I can read the Hard Drive. I need to do a backup the Hard Drive from XP laptop and I want to connect this... (5 Replies)
Discussion started by: cgkmal
5 Replies

3. UNIX and Linux Applications

Where Octave stores it's variables

Hej guys, I'm doing some simple matrix operations with octave and don't know where and how it stores it's variables. Is there any file somewhere that could be accessed? I was using MATLAB before and now Octave is new for me. Or maybe I should use some commands to save and load it. but... (0 Replies)
Discussion started by: Johanni
0 Replies

4. Shell Programming and Scripting

using Octave and bash command together

Hej all, I have an script which I run it with Octave command in Linux, I want to know how could I put bash commands like grep and sed and use them together with octave? My Octave script: Script.sh: m = load ("file", "-ascii") for i=1:10 g(i)= sin(m) end and then I use this... (2 Replies)
Discussion started by: Johanni
2 Replies

5. Red Hat

After installing redhat, my laptop boot straight to Windows 7

Hi all, Good day. I just installed RHEL6.3 into my laptop to learn RH. There is an existing Windows 7 in there. After installing the RHEL, the laptop will just boot to Windows 7. I tried to use this BCDedit to add Linux entry to the boot menu, BUT each time i pick the redhat selection,... (5 Replies)
Discussion started by: wingcross
5 Replies

6. Programming

How to install Octave?

This is probably something really simple, but I don't get it. I downloaded a copy of Octave and extracted it to octave-2.1.73-sol10-sparc-local. Now what do I do with it? I chmod'ed it to 777 and tried running it which just gave me an endless stream of errors. Here's the beginning of the file... (4 Replies)
Discussion started by: Michele31416
4 Replies

7. Ubuntu

Laptop to laptop transfer files

Dear all, I would like to transfer my old laptop documents/files etc to the new laptop without using any external hard disk. Please let me know if its possible via any way. Thank in advance, emily (3 Replies)
Discussion started by: emily
3 Replies
All times are GMT -4. The time now is 04:31 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy