![]() |
Hallo en welkom van de Verenigde Staten aan de UNIX en Linux Forum! Bedankt voor uw bezoek en Deelnemen aan onze wereldwijde gemeenschap.
|
|
google unix.com
|
|||||||
| Forums | Registreer | Forum Regels | Links | Albums | Veelgestelde vragen | Ledenlijst | Kalender | Zoeken | Today's Posts | Markeer forums als gelezen |
| Tips en Tutorials Nuttige artikelen van onze gebruikers. |
Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
|
||||
| Draad | Thread Starter | Forum | Antwoorden | Last Post |
| octaaf-db 031008 (Default branch) | iBot | Software releases - RSS Nieuws | 0 | 03-12-2008 07:00 PM |
| octaaf-ann 1.0 (Default branch) | iBot | Software releases - RSS Nieuws | 0 | 03-10-2008 06:40 PM |
| Octaaf-FLTK 0.7.1 (Default branch) | iBot | Software releases - RSS Nieuws | 0 | 02-05-2008 12:10 AM |
| Octave 3.0.0 (Default branch) | iBot | Software releases - RSS Nieuws | 0 | 01-10-2008 06:40 PM |
|
|
LinkBack | Thread Tools | Zoeken in deze Thread | Rate Thread | Display Modes |
|
|
|
|||||
|
Octave --- Mijn achtvoudig opstarten laptop
Zoals ik beloofd in meerdere threads, hier zijn enkele opmerkingen over hoe ik geïnstalleerd meerdere besturingssystemen op mijn laptop. Ik zal links naar de tools die ik verkregen uit verschillende derde partijen. En ik zal ook de broncode voor een paar scripts die ik geschreven heb.
Inleiding Een paar maanden geleden heeft de schijf op mijn Inspiron 8200 gebakken uit. Ik heb besloten om met nieuwe randapparatuur. Ik heb een 100 GB Seagate schijf en een DVD-brander. Dat de 100 GB schijf is gemonteerd in een vervoerder. Het is een groot probleem om de schijf in een drager, maar een schroef te verwijderen en de vervoerder kunnen gewoon worden teruggetrokken. Ik kocht een tweede vervoerder en een tweede 100 GB schijf. Dit laat ik mijn harde schijf en zo kan ik proberen experimenten met weinig risico. Ik kan een van mijn batterijen en installeer een ander station in de batterijsleuf. Ik heb een floppy drive te installeren daar. Mijn BIOS ondersteunt opstarten vanaf een ATA-apparaat, zodat ik kan booten vanaf de harde schijf, de cd / dvd-station of de floppy. Ik besloot te installeren als OS is veel als ik kon op de nieuwe setup. Het probleem is dat, behalve voor Linux, alles vraagt om een primaire partitie en zijn er slechts 4 primaire partities. Als een wordt gebruikt als een keten van logische partities, dat bladeren 3 niet-linux OS's. Ik besloot te leven. Er zijn enkele extreme oplossingen die het mogelijk maken meer niet-linux OS's, maar ze zijn te extreem. Ik wilde NetBSD, Desktop BSD, Solaris 8 en in aanvulling op wat ik gedaan heb installeren. Maar die 3 OS's lijkt niet de moeite waard zeer extreme maatregelen. Dus ik geliquideerd met:
Gereedschap Ik maakte gebruik van verschillende software tools om me te helpen met dit project. GRUB Ten eerste, ik moet echt een goede bootloader dat ik begrijp het helemaal. GRUB is echt het enige spel in de stad. Er zijn enkele zeer krachtige bootloader producten, maar zonder toegang tot de broncode, er is een limiet aan hoe goed ik kan begrijpen. GRUB is eigenlijk heel gemakkelijk te begrijpen, maar het is slecht gedocumenteerd. Tot ik begreep GRUB, diverse rampen gesmolten mijn systeem unbootable. In elk geval kon ik uiteindelijk sporen precies wat er gebeurd is. Het is echt niet meer mogelijk om mijn systeem unbootable. Disk Director / True Image Ik moest een partitie manager en ik hebben gebruikt Partition Magic in het verleden. Maar PowerQuest verkocht het product naar een ander bedrijf, en het lijkt niet goed ondersteund nu. Ik heb besloten om te proberen Acronis Disk Director, die minder duur is. Het is niet perfect, maar het werkte goed genoeg. Ik heb ook gekocht Acronis True Image. Weer niet perfect, maar het kan volledig herstellen van het systeem op een nieuwe schijf van een DVD backup. Kunt u een opstartbare cd is dat beide producten op. Dit maakt back-ups en herstelt van een ruststroomprincipe schijf. Disk Director wordt geleverd met een grafische editor die sector is aantoonbaar beter dat dskprobe. Disk Wizard / Seatools Seagate heeft deze hulpprogramma's downloaden van hun site. Dit zijn opstartbare cd's die kunnen rijden, diagnostiek en schrijf nullen de loop van een hele schijf tussen verschillende andere taken. Ik ben dol op nul uit een station voordat ik een re-install (9 uur voor 100 GB!). En het kan niet-destructieve proeven op het station. Andere fabrikanten hebben vergelijkbare utilities. System Rescue CD Toen ik had problemen tijdens het project, dit is het gereedschap dat je me uit de bossen. Het is in feite een "Live CD" met een heleboel handige tools beschikbaar. Sector Inspector Dit is een XP opdracht regel gebaseerd fysieke sector nutsbedrijven. Het kan wel een heleboel dingen die de GUI gebaseerde sector van de redactie niet kunnen doen. Dit is een Microsoft programma en het is gratis. grub Acronis Disk Director Suite 10.0 Acronis True Image 9.0 Home Disk Wizard Seatools SystemRescueCd sector inspecteur Ik ben overgestapt van dskprobe aan de Acronis Sector Editor. Maar dskprobe is gratis en het gaat bij de ondersteuning tools pakket op de XP-installatie-cd. Of u kunt downloaden van de Support Tools hier. dskprobe komt met een doc bestand genaamd dskprtrb.doc die ik dacht was very helpful. Ook dskprobe is een stand-alone nut terwijl de Acronis sector editor is een sub-instrument van Disk Director. Installatie Opmerkingen Hier zijn een aantal opmerkingen over wat ik gedaan heb voor het installeren van de os'es. Ik heb niet alleen het verzamelen van een collectie van OS en sprong recht in de massa van de installatie. Ik heb installaties eerste test om ervaring op te doen met elke installateur. In elk geval heb ik gebruik gemaakt van de "aangepaste" opties te maximaliseren mijn flexibiliteit tijdens de installatie. Dit betekent dat ik moest begrijpen iedere installateur vrij goed. Vergeet niet dat de Master Boot Record heeft een tafel voor 4 partitie inzendingen. Windows XP Ik installeerde XP eerste op de eerste primaire partitie die ik geformatteerd met een NTFS-bestandssysteem. Ik installeerde het herstel console en voegde ik een optie voor opstarten in de veilige modus. Dit betekent dat de NT bootloader presenteert een menu niet anders dan de grub menu. Ik heb een E: partitie die gebruikt FAT32. Dit is mijn eerste logische partitie. Het tweede item in de partitie tabel is nu verbruikt ter ondersteuning van mijn string van logische partities. Deze partitie bevat gegevens bestanden en Linux mounten als / driveE. Dit maakt me verplaatsen van bestanden tussen Linux en XP. Bij het opstarten tijd, de NT loader zoekt naar een bestand genaamd Hiberfil.sys. Indien gevonden, wordt dit in het geheugen geladen en uitvoering hervat. Dit is hoe de slaapstand wordt uitgevoerd. Bij het ontwaken uit de slaapstand, is het essentieel dat er niets is veranderd sinds winterslaap begonnen. Zelfs dockingstation of undocking een laptop is genoeg problemen veroorzaken. Ik zal opstarten via grub en ik kan niet garanderen dat een ander OS misschien niet de slag te gaan. Aangezien ik het delen van partities onder OS is dit een recept voor een ramp. Dus ik heb een handicap winterslaap. Elk van de andere OS installatie procedures is bereid om samen te bestaan met een reeds bestaande XP bijvoorbeeld in de eerste primaire partitie. De meeste van hen zou het installeren van een bootloader die kunnen opstarten XP of themself. Zie de "failsafe boot" artikel hieronder in te zien waarom dit niet een probleem. Linux distributies Ik gebruikte LVM voor elke Linux distro. Zelfs / is onder LVM, maar Linux kan niet booten van LVM, dus heb ik een tijdelijke / boot partitie tijdens de installatie. Laten we als RedHat ben voorbeeld ... het was de eerste distro ik geïnstalleerd. Ik gekopieerd / boot naar / mastergrub / RedHat. Daarna ben ik verhuisd / mastergrub / RedHat / grub naar / mastergrub / grub. / mastergrub / RedHat / grub werd een symlink naar / mastergrub / grub. En / boot wordt een symlink naar / mastergrub / RedHat. Elke distro krijgt zijn eigen subdirectory onder / mastergrub en elk van deze submappen krijgt een grub symlink wijst naar / mastergrub / grub. Dus al het distros liquideren met dezelfde grub aanleg. Dat / boot partitie is dan gewoon weggegooid. Gebruikte ik een aparte / tmp partitie en swap partitie putside van LVM. De swap-gebied is 2 GB en / tmp is 1 GB. Elke Linux distro gebruikt dezelfde partities. Dus, in totaal, gebruik ik 3 GB voor / tmp en ruilen in plaats van 15 GB. Ik ben in het proces van de aanpassing van de opstart-scripts voor de wederopbouw / tmp tijdens het booten. Dit betekent dat een OS kan gebruik maken van de swap of / tmp ruimte voor enig doel. Het verklaart ook waarom / tmp in ext2 dan ext3. Er is geen punt in een log als ik het herstel van het bestandssysteem op elke boot. RedHat is nogal oud en het is uit de pas met de andere distributies. Maar ik ben nog steeds met RedHat ingezet door bedrijven, dus ik wilde een versie op mijn laptop. RedHat gebruikt LVM versie 1 en de andere distributies gebruik LVM versie 2. Ik heb Fedora, en heeft een "vgscan - makenodes". Dit gaf me apparaat bestanden voor alle andere distro's' logische volumes. Ik monteer de andere distributies als ik behoefte aan. Ik gebruik dit voor de ontwikkeling van een back-up bestand niveau voor de Linux-distributies. Ik heb deze ook gebruikt voor het corrigeren van een probleem met opstart-scripts. Elke Linux-partitie is een logische partitie. Dit omvat de Grub partities en de LVM partities. Ik heb een / userdata partitie geformatteerd als ext3 waarin alle van de Linux distributies mount. Ik heb een klein / home (onder LVM) in elke distro zodat ieder kan zijn eigen start-up van bestanden, enz. Maar de meeste van mijn spullen gaan in / userdata. Dus elke distro heeft zijn eigen LVM partitie. Maar dan is er swap, / tmp, / userdata en / mastergrub (elk in een aparte logische partitie) die gebruikt worden door alle distributies gemeen. En er is / driveE die zij mount ook. FreeBSD FreeBSD gaat in primaire partitie 3. Ik gebruikte Acronis voor een pre-toewijzing van de partitie voor de installatie. FreeBSD carves de partitie intp stukken dat het verwarrend ook partities. In theorie kan Grub boot FreeBSD rechtstreeks, maar ik kon niet komen, dat aan het werk. Dus ik had FreeBSD installeren eigen bootloader in de partitie, waardoor de MBR alleen. Daarna heb ik bewerkt grub.conf aan chainloader in. Ik wil graag een directe Grub boot werken en ik ben van plan om te werken op dit punt. Voor nu, het is goed genoeg. Solaris Ik heb een primaire partitie naar links en ik geïnstalleerde Solaris 10 in. Net als FreeBSD, Solaris carves de partitie op. Het maakt gebruik van "plakken" zodat een beschrijving van de stukken. Nogmaals, ik preallocated de partitie voordat de installatie. Op het laatste moment merkte ik dat zondag was een nieuwe versie van Solaris 10 op hun site. Ik ben meestal niet direct naar elke nieuwe versie, maar zondag had ingeschakeld vanuit hun eigen bootloader te gebruiken GRUB. Dus ik gedownload de laatste Solaris 10. Nou, geen van mijn versies van Grub kan lezen Solaris plakjes ... Ik heb zelfs gedownload de laatste Grub uit de Grub home pagina en nog niet gaan. Zondag moeten modified Grub. Ik mag naar Sun's versie op een bepaald punt. Maar voor nu, mijn Grub is chainloadering Sun Grub. Mijn laatste Grub-configuratie Met elk OS dat gebruikt Grub, Ik nam een kijkje op haar grub.conf. Vele malen zag ik een nieuwe techniek, en als ik vonden het leuk, ik toegevoegd aan mijn tas trucs. SuSE sterk veranderde Grub en ik kon niet vinden veel info op hun mods. Er zijn waarschuwingen dat SuSE mods een veiligheidsprobleem. Dus ik zal geen gebruik maken van de SuSE versie van GRUB. Maar zelfs met SuSE, vond ik sommige dingen te gebruiken. Mijn 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 |
|
|||||
|
Failsafe Booten
De / mastergrub partitie heeft de grub software en de pitten voor elke geïnstalleerde Linux distro. Grub fase 1 woont in de Master Boot Record (MBR), dat is de eerste sector van de schijf. Vaker wel dan niet, elk OS installeren zou herschrijven de MBR te wijzen op zijn eigen kopie van grub of andere bootloader. Soms zou ik knoeien de grub software / mastergrub en breken. Naast het installeren van grub fase 1 in de MBR, fase 1 kan worden geïnstalleerd in de eerste sector van die partitie. En dan sommige andere bootloader kan chainloader in. Ik schreef mijn eigen installatie scripts. Zij zijn:
mbrinstall Dit script installeert gewoon grub fase 1 in de MBR. localinstall Dit script installeert grub fase 1 in de lokale partitie. (/ mastergrub voor nu.) Daarna wordt gebruikt dd het verkrijgen van een kopie van de eerste sector van de lokale partitie. Dit wordt in een bestand in de / driveE bestandssysteem. Herinneren dat / diveE is een FAT32-bestandssysteem gebruikt om bestanden tussen Linux en XP. Windows XP zal het verkrijgen van de sector en nemen deze in de XP opstarten sequentie. In XP mijn boot.ini-bestand is zoiets als: 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 Het opstarten van XP werkt niet als ik de beschadigde grub software / mastergrub. Ik heb geen kamer op een diskette voor de pitten, maar ik heb nooit mijn kernels. Ik makkelijk hebben kamer op een diskette voor grub, met inbegrip van de grub.conf bestand. Dit script zorgt voor een floppy. Dan kan ik het opstarten van de diskette en start het systeem op die manier. cdinstall Wat als ik helemaal kwijt / mastergrub? cdinstall creëert een cd die een volledige backup van / mastergrub. Daarnaast is een opstartbare cd kunt opstarten, die een van de distributies zonder gebruik te maken van / mastergrub op alle. Dit script nodig een stuk genaamd Grub stage2_eltorito die niet werd geleverd met een versie van Grub dat ik had. Dus ik gedownload en gecompileerd de broncode van Grub startpagina. /backupgrub en / testgrub Eigenlijk alle bovenstaande scripts hebben benn uitgebreid tot support / backupgrub. Dit is gewoon een andere partitie die een kopie van / mastergrub. Zo nu en dan gebruik ik rsync om de bestanden te kopiëren overgenomen. Daarna heb ik de cd in / backupgrub en voer de localinstall script. Wanneer een van deze scripts loopt, dan de cijfers wat partitie het draait inch De grub.conf bestand wordt aangepast aan de huidige partitie (of in het geval van cdinstall, aangepast te starten vanaf cd). Ik heb ook een / testgrub partitie, zodat ik zou stoppen gevaarlijke experimenten in een kritieke partitie. supermbrbackup Een aantal hulpmiddelen bestaan om een back-up en herstel van de MBR. Dit omvat de boot-code en de partitie tabel. Het punt is echter dat van mijn partities worden beschreven in Extended Boot Records verspreid over heel mijn schijf. Ik wilde een hulpprogramma dat zou recreëren al mijn partities (leeg natuurlijk) op een nieuwe schijf. En terwijl ik was, ik had het scannen van de ongebruikte sectoren na de MBR waar GRUB stadium 1-5 woont. Dus dit back-up van alles behalve de inhoud van de partities. De backup wordt weggeschreven naar een diskette samen met een script te herstellen ervan. Dit script kan worden uitgevoerd na het opstarten van de System Rescue CD. Mijn bedoeling was dat dit zou de eerste stap in een blank metaal herstellen. Maar het blijkt dat ik niet nodig. Bare Metal Restore Dit is wat gebeurt er als ik verlies de hele harde schijf. Dit is het ultieme om ervoor te zorgen dat ik kan booten. Gebruikte ik Acronis True Image om een volledige backup van mijn drive. Het biedt geen ondersteuning voor Linux LVM noch FreeBSD en Solaris plakjes. Maar het kan doen per sector back-up van deze partities. Nadat de back-up klaar is, als ik mijn harde schijf en gebruikt mijn Seatools opstartbare schijf op nul uit (9 uur met een 100 GB schijf). Toen ik startte mijn Acronis opstartdiskette en gevoed dat de back-up DVD's. Het herschapen mijn hele systeem. Ik gebruikte een Seagate gebruiksmodellen te schrijven nullen voor de gehele disk, voordat ik begon. Dat betekent dat de Linux LVM en FreeBSD / Solaris partities waarschijnlijk had veel van nul sectoren in de ongebruikte ruimte. Dit helpt de compressie routine in de Acronis sectorgewijze backup doen goed werk. Ik moet nog een bestand niveau backup voor Linux / FreeBSD / Solaris. Ik zal het werk op. |
|
|||||
|
Hier is de broncode voor de scripts bovengenoemde.
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
|
| Bladwijzers |
| Thread Tools | Zoeken in deze Thread |
| Display Modes | Beoordeel deze draad |
|
|