![]() |
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Regler | Links | Albums | FAQ | Members List | Kalender | Søgning | Dagens Stillinger | Mark Forums Read |
| Tips og Tutorials Helpful articles fra vores brugere. |
Mere UNIX og Linux Forum Emner du måske kan finde Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Last Post |
| oktav-db 031008 (Default filial) | iBot | Software Releases - RSS Nyheder | 0 | 03-12-2008 07:00 PM |
| oktav-ann 1,0 (Default filial) | iBot | Software Releases - RSS Nyheder | 0 | 03-10-2008 06:40 PM |
| Oktav-FLTK 0.7.1 (Default filial) | iBot | Software Releases - RSS Nyheder | 0 | 02-05-2008 12:10 AM |
| Oktav 3.0.0 (Default filial) | iBot | Software Releases - RSS Nyheder | 0 | 01-10-2008 06:40 PM |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
|||||
|
Oktav --- Min octuple boot laptop
Som jeg lovede i flere tråde, her er nogle noter om, hvordan jeg installeret flere operativsystemer på min laptap. Jeg vil give links til de værktøjer, som jeg fik fra forskellige tredjeparter. Og jeg vil omfatte kildekoden til et par scripts, som jeg skrev.
Indledning For et par måneder siden den disk på min Inspiron 8.200 stegt ud. Jeg besluttede at tilpasse den med nye eksterne enheder. Jeg fik en 100 GB Seagate drev og en dvd-brænder. At 100 GB drev er monteret i en holder. Det er en stor ting at montere drevet i en transportvirksomhed, men fjerne en skrue og transportøren kan bare kan trækkes ud. Jeg købte et andet luftfartsselskab, og et andet 100 GB drev. Dette giver mig mulighed for at skifte min harddisk, og så jeg kan prøve eksperimenter med lille risiko. Jeg kan fjerne en af mine batterier og installere et andet drev i batteriholderen. Jeg har et diskettedrev til at installere det. Min BIOS understøtter opstart fra en ATA enhed, så jeg kan starte op fra harddisken, CD / DVD-drev eller diskette. Jeg besluttede at installere så mange OS'er som jeg kunne på det nye setup. Problemet er, at med undtagelse af Linux, alt kræver en primær partition og der er kun 4 primære partitioner. Hvis man er brugt som en kæde af logiske partitioner, der efterlader 3 ikke-linux OS'er. Jeg besluttede at leve med. Der er nogle ekstreme løsninger, der vil give flere ikke-linux OS'er, men de er for ekstreme. Jeg ville NetBSD, Desktop BSD og Solaris 8 ud over, hvad jeg har installeret. Men disse 3 OS'er syntes ikke værd meget ekstreme foranstaltninger. Så jeg afsluttede med:
Værktøj Jeg brugte flere software-værktøjer til at hjælpe mig med dette projekt. GRUB For det første, jeg har brug for en virkelig god bootloader, at jeg forstår helt. GRUB er virkelig det eneste spil i byen. Der er nogle meget stærke bootloader produkter, men uden adgang til kildekoden, er der en grænse for, hvor godt jeg kan forstå dem. GRUB er faktisk meget nemt at forstå, men det er blevet dokumenteret dårligt. Indtil jeg forstod GRUB, forskellige katastrofer gjort mit system unbootable. I hvert tilfælde var jeg i stand til med tiden at opspore præcis, hvad der skete. Det er virkelig ikke længere muligt at gøre mit system unbootable. Disk Director / True Image Jeg havde brug for en Partition Manager, og jeg har brugt Partition Magic i fortiden. Men PowerQuest solgt produktet til et andet selskab, og det synes ikke at være godt understøttet i dag. Jeg besluttede at prøve Acronis Disk Director, som er billigere. Det er ikke perfekt, men det fungerede godt nok. Jeg købte også Acronis True Image. Igen ikke perfekt, men det kan helt gendanne systemet på en helt ny bil fra DVD backup. Du kan oprette en brugelig til opstart cd, der har både produkter på det. Dette giver mulighed for backup og gendanner fra fredfyldte disk. Disk Director kommer med en GUI sektor editor, der er nok bedre at dskprobe. Disk guiden / SeaTools Seagate har disse værktøjer kan hentes fra deres hjemmeside. Disse er brugelig til opstart CD's, der kan køre diagnostik og skrive nuller over et helt drev blandt forskellige andre opgaver. Jeg vil gerne nul ud et drev, før jeg lave en re-installere (9 timer for 100 GB!). Og det kan gøre ikke-destruktiv test på drevet. Andre producenter har lignende værker. System Rescue CD Da jeg havde problemer i løbet af projektet, dette er det værktøj, der fik mig ud af skoven. Det er dybest set en "Live CD" med en masse nyttige værktøjer til rådighed. Sektor Inspector Dette er en XP COMAND baseret linje fysiske sektor nytte. Det kan gøre en masse ting, at GUI baseret sektor redaktører ikke kan gøre. Dette er et Microsoft-program, og det er gratis. grub Acronis Disk Director Suite 10,0 Acronis True Image 9,0 Hjem Disk guiden SeaTools SystemRescueCd sektor inspektør Jeg har skiftet fra dskprobe til Acronis Sector Editor. Men dskprobe er gratis, og det kommer i supportværktøjer pakke på XP-installations-cd'en. Eller du kan downloade Support Tools her. dskprobe kommer med en doc-fil kaldet dskprtrb.doc som jeg syntes var meget hjælpsom. Også dskprobe er en stand-alone værktøj, mens Acronis sektor editor er et sub-værktøj Disk Director. Installation Notes Her er nogle noter om, hvad jeg gjorde for at installere os'es. Jeg har ikke bare samle en samling af OS'er og springe lige ind i masse installation. Jeg har teste installationer første til at få erfaring med de enkelte installatør. I hvert fald brugte jeg den "custom" muligheder for at maksimere mit fleksibilitet under installationen. Det betyder, at jeg var nødt til at forstå den enkelte montør ganske godt. Husk, at Master Boot Record har et bord til 4 partitionsposter. Windows XP Jeg har installeret XP først på den første primære partition som jeg formateret med NTFS-filsystem. Jeg har installeret Genoprettelseskonsol, og jeg tilføjet en mulighed for at starte i fejlsikret tilstand. Det betyder, at NT bootloader præsenterer en menu ikke ulig grub menuen. Jeg oprettede en E: partition, der bruges FAT32. Dette er mit første logisk partition. Den anden post i partitionstabellen er nu forbruges til at støtte mit streng af logiske partitioner. Denne partition vil indeholde data, filer og Linux vil montere den som / driveE. Dette giver mig mulighed for at flytte filer mellem Linux og XP. På boot tid, ser NT magasin til en fil kaldet hiberfil.sys. Hvis der findes, det er indlæst i hukommelsen og udførelse genoptages. Dette er, hvordan dvale er gennemført. Efter opvågning fra dvaletilstand, er det afgørende, at intet har ændret sig siden dvale begyndte. Selv docking eller frigør en laptop er nok skabe problemer. Jeg vil være opstart via GRUB, og jeg kan ikke garantere, at et andet OS ikke kan komme i gang. Da jeg deler skillevægge mellem OS'er dette ville være en opskrift på katastrofe. Så jeg har deaktiveret dvale. Hver af de andre OS installation procedurer er parat til at sameksistere med en allerede eksisterende XP instans i den første primære partition. De fleste af dem ville installere en boot-loader, der kunne boot XP eller selv. Se "Fejlsikker boot" artiklen nedenfor for at se, hvorfor dette er ikke et problem. Linux distributioner Jeg brugte LVM for hver Linux-distro. Selv / er under LVM, men Linux kan ikke starte op fra LVM, så jeg oprettet en midlertidig / boot partitionen under installation. Lad os tage RedHat som jeg eksempel ... det var det første distro jeg installeret. Jeg har kopieret / boot til / mastergrub / RedHat. Så flyttede jeg / mastergrub / RedHat / grub til / mastergrub / grub. / mastergrub / RedHat / grub blev et symlink til / mastergrub / grub. Og / boot bliver et symlink til / mastergrub / RedHat. Hver distro får sin egen undermappe under / mastergrub og hvert af disse undermapper får en larve symlink peger på / mastergrub / grub. Så alle distros vinden op ved hjælp af samme grub instans. At / boot partition er så bare kasseres. Jeg brugte en separat / tmp partition og swap-partition putside af LVM. Swap-område er 2 GB og / tmp er 1 GB. Hver Linux-distro bruger samme partitioner. Så i alt bruger jeg 3 GB til / tmp og bytte i stedet for 15 GB. Jeg er i færd med at ændre opstart scripts til at genopbygge / tmp ved opstart. Dette vil betyde, at enhver OS kan bruge swap eller / tmp område til ethvert formål. Det forklarer også, hvorfor / tmp i ext2 snarere end ext3. Der er ingen mening i en log, hvis jeg genopbygge filsystemet ved hver opstart. RedHat er temmelig gamle, og det er ude af trit med de andre distributioner. Men jeg stadig støder på RedHat anvendes af virksomheder, så jeg ville have en version på min laptop. RedHat benytter LVM version 1 og de andre distros bruge LVM version 2. Jeg valgte Fedora, og gjorde en "vgscan - makenodes". Dette gav mig enhedsfiler for alle de andre distros 'logisk mængder. Jeg kan montere de andre distros, når jeg har brug for. Jeg vil bruge dette til at udvikle en fil niveau sikkerhedskopi for Linux-distributioner. Jeg har også brugt denne til at rette et problem med boot oppe scripts. Enhver Linux partition er en logisk partition. Dette omfatter Grub partitioner og LVM partitioner. Jeg har en / userdata partition formateret som ext3 som alle Linux-distributioner mount. Jeg har en lille / home (under LVM) i hver distribution, således at den enkelte kan have sit eget nystartede filer, osv. Men de fleste af mine ting vil gå i / userdata. Så hver distro har sin egen LVM partition. Men så er der swap, / tmp, / userdata, og / mastergrub (hver i en separat logisk partition), der anvendes af alle distros til fælles. Og der er / driveE, som de monterer også. FreeBSD FreeBSD går i primær partition 3. Jeg plejede Acronis til at pre-tildele den partition, før installationen. FreeBSD skærer op partition INTP stykker, at det forvirrende opfordrer også partitioner. I teorien kan Grub FreeBSD direkte, men jeg kunne ikke få det til at arbejde. Så jeg havde FreeBSD installere sin egen bootloader i den partition, hvilket giver de MBR alene. Så jeg ændret grub.conf at chainloader ind i det. Jeg vil gerne få en direkte Grub arbejder, og jeg planlægger at arbejde på dette. For nu er det godt nok. Solaris Jeg har en primær partition venstre og jeg installeret Solaris 10 i det. Meget gerne FreeBSD, Solaris skærer den partition op. Det bruger "skiver", så beskrive stykker. Igen, jeg formålsbestemte den partition, inden man installerer. I sidste øjeblik jeg bemærket, at Sun havde en ny version af Solaris 10 på deres websted. Jeg plejer ikke straks springe til hver ny version, men Sun var gået bort fra deres egen bootloader til at bruge grub. Så jeg downloadet den nyeste Solaris 10. Nå, kan ingen af mine versioner af Grub læs Solaris skiver ... jeg selv hentet den nyeste Grub fra Grub hjemmeside og stadig no go. Solen skal have ændret Grub. Jeg kan skifte til Suns version på et tidspunkt. Men for nu, er mit Grub chainloadering Suns Grub. Min Final Grub Configuration Med hver OS, der anvendes Grub, jeg tog et kig på sin grub.conf. Mange gange jeg så en ny teknik, og hvis jeg kunne lide det, jeg har tilføjet det til min taske med tricks. SuSE stærkt modificerede Grub, og jeg kunne ikke finde meget info om deres mods. Der er advarsler, SuSE's mods indført et sikkerhedsproblem. Så jeg vil ikke bruge SuSE version af Grub. Men selv med SuSE, fandt jeg nogle ting at bruge. Min grub.conf: Code:
# # This configuration file is maintained by a series of scripts that support the concept of this # partition being moved or copied. Statements like " r00t (xxxx) " where there is exactly one # space between the word "root" and the opening parenthesis will be replaced with a grub device # that corresponds to the current partition. Put extra spaces after "root" to protect a root entry # from this automatic replacement. default=1 timeout=60 color red/black black/green title Boot Octave from grub.conf on mastergrub root title 1) Windows XP Pro root (hd0,0) makeactive chainloader +1 title 2) RedHat root (hd0,6) kernel /Redhat/vmlinuz-2.4.18-14 ro root=/dev/RedHat00/LogVol00 hdb=ide-scsi initrd /Redhat/initrd-2.4.18-14.img title 3) Fedora Core root (hd0,6) kernel /Fedora/vmlinuz-2.6.15-1.2054_FC5 ro root=/dev/Fedora00/LogVol00 rhgb quiet initrd /Fedora/initrd-2.6.15-1.2054_FC5.img title 4) SuSE root (hd0,6) kernel /SuSE/vmlinuz root=/dev/SuSE00/lvol0 vga=0x31a resume=/dev/hda8 splash=silent showopts initrd /SuSE/initrd title 5) Debian root (hd0,6) kernel /Debian/vmlinuz-2.4.27-2-386 root=/dev/mapper/Debian00-lvol0 ro initrd /Debian/initrd.img-2.4.27-2-386 title 6) Scientific root (hd0,6) kernel /Scientific/vmlinuz-2.6.9-34.EL ro root=/dev/Scientific00/LogVol00 rhgb quiet initrd /Scientific/initrd-2.6.9-34.EL.img title 7) FreeBSD rootnoverify (hd0,2) makeactive chainloader +1 title 8) Solaris rootnoverify (hd0,3) makeactive chainloader +1 title ----UTILITIES---- root title ______reboot reboot title ______off halt title ______halt halt --no-apm title ______floppy chainloader (fd0)+1 |
|
|||||
|
Fejlsikker Opstart
Den / mastergrub partition har grub software og kernerne for hvert installeret Linux-distro. Grub fase 1 er bosat i Master Boot Record (MBR), som er den første sektor på disken. Oftere end ikke, hver OS installere ville omskrive MBR at pege på sin egen kopi af GRUB eller anden bootloader. Nogle gange vil jeg rode rundt grub software / mastergrub og bryde den. Ud over at installere grub fase 1 i MBR, kan fase 1 skal installeres i den første sektor af denne partition. Og så nogle andre bootloader kan chainloader ind i det. Jeg skrev min egen installation scripts. De er:
mbrinstall Dette script blot installerer grub fase 1 i MBR. localinstall Scriptet installerer grub fase 1 i den lokale partition. (/ mastergrub for nu.) Så er bruger dd at få en kopi af den første sektor af den lokale partition. Dette er sat i en fil i / driveE filsystem. Erindre, at / diveE er et FAT32-filsystem, der anvendes til at videregive filer mellem Linux og XP. Windows XP vil indhente sektoren og indarbejde det i XP boot sekvensen. I XP min boot.ini fil er noget i retning af: Code:
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP Pro" /fastdetect /NoExecute=OptIn multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP Pro (Safe Mode)" /fastdetect /NoExecute=OptIn /safeboot:minimal /sos /bootlog C:\bootsector.mastergrub="MasterGrub Menu" C:\CMDCONS\BOOTSECT.DAT="Microsoft Windows Recovery Console" /cmdcons floppyinstall Opstart af XP vil ikke arbejde, hvis jeg har skadet grub software / mastergrub. Jeg har ikke plads på en diskette for disse kerner, men jeg har aldrig brudt mig kerner. Jeg let have plads på en diskette til grub, herunder grub.conf fil. Dette script opretter sådan en diskette. Så jeg kan starte den diskette og starte systemet på den måde. cdinstall Hvad nu, hvis jeg helt mister / mastergrub? cdinstall skaber en cd, som er en komplet backup af / mastergrub. Desuden er det en startbar cd, der kan starte en af de distros uden brug / mastergrub på alle. Dette script brug for et stykke Grub hedder stage2_eltorito som ikke blev leveret med en version af Grub, at jeg havde. Så jeg downloadet og kompileret kildekode fra Grub hjemmeside. /backupgrub og / testgrub Faktisk alle de ovenstående scripts har benn udvidet til at støtte / backupgrub. Dette er blot en anden partition, som er en kopi af / mastergrub. Nu og da, jeg bruger rsync til at kopiere filerne over. Så jeg cd ind / backupgrub og køre localinstall script. Hvis ét af disse scripts kører, er det tal ud af, hvad partition det kører i. grub.conf fil er justeret for at afspejle den aktuelle partition (eller i tilfælde af cdinstall, justeret for at starte op fra cd). Jeg har også skabt en / testgrub partition, så jeg ville stoppe med at køre farlige eksperimenter i en kritisk partition. supermbrbackup Et antal værktøjer findes til backup og gendannelse MBR. Dette omfatter startkode og partitionstabellen. Sagen er imidlertid, at af mine partitioner er beskrevet i Ekstra Boot Records spredt ud over hele min disk. Jeg ønskede et hjælpeprogram, der vil genskabe alle mine partitioner (tom selvfølgelig) på en helt ny disk. Og mens jeg var på det, jeg havde det scanne de uudnyttede sektorer efter MBR, der er, hvor GRUB etape 1,5 bosat. Så dette sikkerhedskopierer alt bortset fra indholdet af partitioner. Sikkerhedskopien er skrevet til en diskette sammen med et script til at genoprette dem. Dette script kan køres efter opstart System Rescue CD. Min hensigt var, at dette ville være det første skridt i en bart metal genoprette. Men det viser sig, at jeg ikke havde brug for det. Bare Metal Restore Dette er, hvad der sker, hvis jeg mister hele harddisken. Dette er det ultimative inden for sikre, at jeg kan starte op. Jeg brugte Acronis True Image at lave en komplet sikkerhedskopi af mine drev. Det understøtter ikke Linux LVM eller FreeBSD og Solaris skiver. Men det kan gøre en sektor for sektor backup af disse partitioner. Efter den backup færdig, jeg erstattet min harddisk og brugt min brugelig SeaTools disk til nul det ud (9 timer med en 100 GB harddisk). Så jeg opstartet min Acronis boot disk, og fodres det backup DVD's. Det genskabte hele mit system. Jeg brugte en Seagate værktøj til at skrive nuller til hele disken, før jeg begyndte. Det betyder, at Linux LVM og FreeBSD / Solaris-partitioner sandsynligvis havde en masse nulstilles sektorer i uudnyttet plads. Dette hjælper kompressionen rutine i Acronis sektor for sektor backup gøre et godt stykke arbejde. Jeg har stadig brug for en fil niveau backup for Linux / FreeBSD / Solaris. Jeg vil arbejde på det. |
|
|||||
|
Her er kildekoden til de scripts, der er nævnt ovenfor.
Code:
#! /bin/bash
#
# mbrinstall --- install grub from this partition on to the MBR of the
# current disk. When the BIOS subsequently boots this disk, it will run
# grub from this partition.
if [[ $(pwd) != */scripts || $0 != ./* ]] ; then
echo error you must cd to the scripts directory and invoke this script with "./name"
exit 1
fi
#
# Extract device file name and mount point from the output of "df" command
set $(df -k . | awk 'NR == 2 { print $0}')
devicefile=$1
mountpoint=$6
name=${mountpoint#/}
#
# Build grub style device name
devicefile=$(df -k . | awk 'NR == 2 { print $1}')
string=${devicefile#/dev/}
partition=${string#???}
drive=${string%$partition}
case "$drive" in
hda) grubdrive="hd0" ;;
hdb) grubdrive="hd1" ;;
hdc) grubdrive="hd2" ;;
hdd) grubdrive="hd3" ;;
*)
echo localinstall cannot handle device $drive
exit 1
;;
esac
((partition=partition-1))
grubdevice="(${grubdrive},${partition})"
echo devicefile=$devicefile
echo mountpoint=$mountpoint
echo name=$name
echo partition = $partition
echo drive = $drive
echo grubdrive = $grubdrive
echo grubdevice = $grubdevice
#
# rewrite grub.conf to reflect the local partition
cp ../grub/grub.conf ../grub/grub.conf.old
sed < ../grub/grub.conf.old > ../grub/grub.conf \
's/.*root (.*/ root '${grubdevice}'/
s/.*title Boot Octave from.*/ title Boot Octave from '${name}'/'
#
# Use grub to install itself on the drive
set -x
${mountpoint}/bin/grub --batch --verbose --device-map=${mountpoint}/grub/device.map << End
root $grubdevice
setup (${grubdrive})
End
set +x
exit 0
Code:
#! /bin/bash
#
# localinstall -- install grub in the first sector of the current partition.
# This will make the current partition bootable.
dir=$(pwd)
if [[ $dir != */scripts || $0 != ./* ]] ; then
echo error you must cd to the scripts directory and invoke this script with "./name"
exit 1
fi
exit 0
#
# Extract device file name and mount point from the output of "df" command
set $(df -k . | awk 'NR == 2 { print $0}')
devicefile=$1
mountpoint=$6
name=${mountpoint#/}
#
# Build grub style device name
string=${devicefile#/dev/}
partition=${string#???}
drive=${string%$partition}
case "$drive" in
hda) grubdrive="hd0" ;;
hdb) grubdrive="hd1" ;;
hdc) grubdrive="hd2" ;;
hdd) grubdrive="hd3" ;;
*)
echo localinstall cannot handle device $drive
exit 1
;;
esac
((partition=partition-1))
grubdevice="(${grubdrive},${partition})"
echo devicefile=$devicefile
echo mountpoint=$mountpoint
echo name=$name
echo partition = $partition
echo drive = $drive
echo grubdrive = $grubdrive
echo grubdevice = $grubdevice
#
# rewrite grub.conf to reflect the local partition
cp ../grub/grub.conf ../grub/grub.conf.old
sed < ../grub/grub.conf.old > ../grub/grub.conf \
's/.*root (.*/ root '${grubdevice}'/
s/.*title Boot Octave from.*/ title Boot Octave from '${name}'/'
set -x
#
# We are going to write on the raw device so
# make sure that the filesystem does not also
# do any writing.
mount -o remount -o ro $mountpoint
sync
#
# Use grub to install itself on the device
${mountpoint}/bin/grub --batch --verbose --device-map=${mountpoint}/grub/device.map << End
root $grubdevice
setup $grubdevice
End
#
# Now we need a new copy of bootsector to give to XP
[[ ! -d /driveE/bootsectors ]] && mkdir /driveE/bootsectors
dd if=${fulldevice} bs=512 count=1 of=/driveE/bootsectors/bootsector.$name
set +x
#
# Restore read-write access to mountpoint
mount -o remount -o rw $mountpoint
exit 0
Code:
#! /bin/bash
#
# floppyinstall -- install the grub software including the configuration file
# from this partition on to a floppy. This will create a bootable floppy that
# will boot the kernels from this partition.
#
if [[ $(pwd) != */scripts || $0 != ./* ]] ; then
echo error you must cd to the scripts directory and invoke this script with "./name"
exit 1
fi
#
# Extract device file name and mount point from the output of "df" command
set $(df -k . | awk 'NR == 2 { print $0}')
devicefile=$1
mountpoint=$6
name=${mountpoint#/}
#
# Build grub style device name
string=${devicefile#/dev/}
partition=${string#???}
drive=${string%$partition}
case "$drive" in
hda) grubdrive="hd0" ;;
hdb) grubdrive="hd1" ;;
hdc) grubdrive="hd2" ;;
hdd) grubdrive="hd3" ;;
*)
echo localinstall cannot handle device $drive
exit 1
;;
esac
((partition=partition-1))
grubdevice="(${grubdrive},${partition})"
echo devicefile=$devicefile
echo mountpoint=$mountpoint
echo name=$name
echo partition = $partition
echo drive = $drive
echo grubdrive = $grubdrive
echo grubdevice = $grubdevice
#
# set up the floppy
set -x
mkdosfs -F 32 -c /dev/fd0
[[ ! -d /media/floppy ]] && mkdir -p /media/floppy
mount -t vfat -o shortname=winnt /dev/fd0 /media/floppy
mkdir -p /media/floppy/boot/grub
cd /media/floppy/boot/grub
cp ${mountpoint}/grub/stage1 .
cp ${mountpoint}/grub/stage2 .
cd ${mountpoint}
#
# rewrite grub.conf to reflect the local partition
sed < ${mountpoint}/grub/grub.conf > /media/floppy/boot/grub/grub.conf \
's/.*root (.*/ root '${grubdevice}'/
s/.*title Boot Octave from.*/ title Boot Octave from '${name}' via floppy built '"$(date +'%B %e, %Y')"'/'
umount /dev/fd0
#
# Use grub to install itself on floppy
set -x
${mountpoint}/bin/grub --batch --verbose --device-map=${mountpoint}/grub/device.map << End
root (fd0)
setup (fd0)
End
exit 0
Code:
#! /bin/bash
#
# cdinstall -- install the grub software including the configuration file
# from this partition on to a cd. This will create a bootable cd that
# can boot the kernels from the cd itself.
#
if [[ $(pwd) != */scripts || $0 != ./* ]] ; then
echo error you must cd to the scripts directory and invoke this script with "./name"
exit 1
fi
#
# Extract device file name and mount point from the output of "df" command
set $(df -k . | awk 'NR == 2 { print $0}')
devicefile=$1
mountpoint=$6
name=${mountpoint#/}
#
# Build grub style device name
string=${devicefile#/dev/}
partition=${string#???}
drive=${string%$partition}
case "$drive" in
hda) grubdrive="hd0" ;;
hdb) grubdrive="hd1" ;;
hdc) grubdrive="hd2" ;;
hdd) grubdrive="hd3" ;;
*)
echo localinstall cannot handle device $drive
exit 1
;;
esac
((partition=partition-1))
grubdevice="(${grubdrive},${partition})"
grubdevice="(cd)"
echo devicefile=$devicefile
echo mountpoint=$mountpoint
echo name=$name
echo partition = $partition
echo drive = $drive
echo grubdrive = $grubdrive
echo grubdevice = $grubdevice
set -x
mkdir /tmp/iso
mkdir /tmp/iso/backup
cp -R $mountpoint /tmp/iso/backup
mkdir -p /tmp/iso/boot/grub
cp /mastergrub/src/grub-0.97/stage2/stage2_eltorito /tmp/iso/boot/grub
#cp /mastergrub/grub/grub.conf /tmp/iso/boot/grub
# rewrite grub.conf to reflect the local partition
sed < ${mountpoint}/grub/grub.conf > /tmp/iso/boot/grub/menu.lst \
's/.*root (.*/ root '${grubdevice}'/
s/.*title Boot Octave from.*/ title Boot Octave from cd built '"$(date +'%B %e, %Y')"'/'
#cp /mastergrub/grub/grub.conf /tmp/iso/boot/grub/menu.lst
cp -R /mastergrub/Redhat /tmp/iso
cp -R /mastergrub/Fedora /tmp/iso
cp -R /mastergrub/SuSE /tmp/iso
cp -R /mastergrub/Debian /tmp/iso
cp -R /mastergrub/Scientific /tmp/iso
mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o /driveE/grub.iso /tmp/iso
exit 0
Code:
#! /bin/bash
#
# supermbrbackup -- save disk infrastructure
# This script backs up the partition structure on hd0. It also scans the hidden sectors and backs up any
# non-zero data. In my case, this is grub stage 1.5. And naturally, the boot code in the mbr is included.
# Without this stuff, the disk won't be bootable. The data is saved on a floppy disk. Also a shell script
# to restore the data is included on the floppy. That script can be run from a bootable cd such as the
# System Rescue CD. So this is intended as the first step of a bare metal restore.
#
#
# We need some info about the disk (psuedo) geometry
SECT_NUM=63 #### Sectors per cylinder
SECT_LNG=512 ### Bytes per sector
#
# This was originally a ksh script which was converted to bash. The original ksh code is still here,
# prefixed with "##".
##integer bytes
##set -A bytes abytes
declare -a bytes abytes
typeset -i bytes
#
# Build a filesystem on the floppy
mkfs -t ext2 -b 1024 -i 1024 -O sparse_super /dev/fd0 2>/dev/null
mkdir -p /media/fd0
mount -t ext2 /dev/fd0 /media/fd0
#
# The variable called "restore" will contain the entire restore script. The script will be written out
# once it is complete. I wanted to prevent excess i/o on the floppy drive and I expect the script to
# be short... so I decided to build it in-core.
total_saved=0
restore="#! /bin/bash"
#
# Read a specified sector and set up the arrays abytes and bytes with the contents of each byte
function read_sector
{
skip=$1
## dd if=/dev/hda bs=$SECT_LNG skip=$skip count=1 2>/dev/null| od -An -t x1 -w32 -v
abytes=( $(dd if=/dev/hda bs=$SECT_LNG skip=$skip count=1 2>/dev/null| od -An -t x1 -w32 -v ))
for((ibyte=0; ibyte < ${#abytes[*]}; ibyte++)) ; do
bytes[ibyte]="16#${abytes[ibyte]}"
done
return 0
}
#
# Write the sector onto the floppy disk (also update the restore script)
function save_sector
{
((total_saved++))
dd if=/dev/hda bs=$SECT_LNG skip=$1 count=1 2>/dev/null of=/media/fd0/sec${1}
restore="$restore
dd if=sec${1} bs=$SECT_LNG seek=$1 count=1 of=/dev/hda"
return 0
}
#
# Nothing to check.... sector zero is always saved.
echo sector 0 is the MBR
save_sector 0
#
# Now scan the hidden sectors. Back them up only if the sectors contains some non-zero data
for((sec=1; sec < $SECT_NUM; sec++)) ; do
read_sector $sec
nonzero=0
for((ibyte=0; ibyte < ${#bytes[*]}; ibyte++)) ; do
((${bytes[ibyte]})) && nonzero=1
done
if ((nonzero)) ; then
echo sector $sec has non-zero data
save_sector $sec
fi
done
##typeset -R2 partition
##typeset -i bytes
##typeset -R11 next
read_sector 0
exstart=0
#
# Scan the partition table looking for an extended partition.
for ((partition=1; partition < 5; partition++)) ; do
((s=430 + (partition * 16)))
status=${abytes[s]}
type=${abytes[s+4]}
(( fval=(( (${bytes[s+11]}*256+${bytes[s+10]})*256 + ${bytes[s+9]})*256)+${bytes[s+8]} ))
(( length=(((${bytes[s+15]}*256+${bytes[s+14]})*256+${bytes[s+13]})*256)+${bytes[s+12]} ))
((lval=fval+length-1))
((lval == -1)) && ((lval=0))
if [[ $type = 0f ]] ; then
exstart=$fval
fi
done
#
# If we found an extended partition, step though the logical's and back up each MBR of each logical
# drive.
if ((exstart)) ; then
next=$exstart
while ((next)) ; do
read_sector $next
((s=430 + (1 * 16)))
type=${abytes[s+4]}
(( fval=(( (${bytes[s+11]}*256+${bytes[s+10]})*256 + ${bytes[s+9]})*256)+${bytes[s+8]} ))
(( length=(((${bytes[s+15]}*256+${bytes[s+14]})*256+${bytes[s+13]})*256)+${bytes[s+12]} ))
((lval=fval+length-1))
((lval == -1)) && ((lval=0))
((pstart=fval + next))
((pstop=lval + next))
((s=430 + (2 * 16)))
type=${abytes[s+4]}
(( fval=(( (${bytes[s+11]}*256+${bytes[s+10]})*256 + ${bytes[s+9]})*256)+${bytes[s+8]} ))
(( length=(((${bytes[s+15]}*256+${bytes[s+14]})*256+${bytes[s+13]})*256)+${bytes[s+12]} ))
((lval=fval+length-1))
((lval == -1)) && ((lval=0))
if ((length)) ; then
((nextnext=fval+exstart))
else
((nextnext=0))
fi
echo "sector $next describes logical partition $partition ($pstart - $pstop)"
save_sector $next
((partition=partition+1))
((next=nextnext))
done
fi
#
# Write out the restore script and finish up
echo "$restore" > /media/fd0/restore
chmod 755 /media/fd0/restore
umount /dev/fd0
exit 0
|
| Bogmærker |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|