![]() |
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| Conseils et Didacticiels Des articles de nos utilisateurs. |
Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
|
||||
| Fil | Thread Starter | Forum | Réponses | Last Post |
| octave-db 031008 (Default branch) | iBot | Logiciel de presse - RSS News | 0 | 03-12-2008 07:00 PM |
| octave-ann 1,0 (Default branch) | iBot | Logiciel de presse - RSS News | 0 | 03-10-2008 06:40 PM |
| Octave-FLTK 0.7.1 (Default branch) | iBot | Logiciel de presse - RSS News | 0 | 02-05-2008 12:10 AM |
| Octave 3.0.0 (Default branch) | iBot | Logiciel de presse - RSS News | 0 | 01-10-2008 06:40 PM |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
|||||
|
Octave --- Octuple boot Mon ordinateur portable
Comme je l'ai promis à plusieurs threads, voici quelques notes sur la façon dont j'ai installé plusieurs systèmes d'exploitation sur mon portable. Je vais donner les liens vers les outils que j'ai obtenues de diverses tierces parties. Et je vais inclure le code source de quelques scripts que j'ai écrit.
Introduction Il ya quelques mois, le disque dur sur mon Inspiron 8200 à frites. J'ai décidé de le personnaliser avec de nouveaux périphériques. J'ai reçu un disque Seagate de 100 Go et un graveur de DVD. C'est dur de 100 Go est monté dans un support. Il est un gros problème pour monter le disque dans un transporteur, mais enlever une vis et le transporteur peut être simplement retiré. J'ai acheté un second transporteur et une deuxième de 100 Go disque. Cela me permet de changer mon disque dur et si je peux essayer des expériences avec peu de risques. Je peux supprimer l'une de mes batteries et installer un autre lecteur dans la fente de la batterie. J'ai un lecteur de disquette pour installer là-bas. Mon BIOS supporte le démarrage à partir de n'importe quel périphérique ATA pour que je puisse démarrer à partir du disque dur, le lecteur de CD / DVD ou la disquette. J'ai décidé d'installer autant d'OS que je pouvais sur la nouvelle configuration. Le problème est que, à l'exception de Linux, tout exige une partition primaire et il n'ya que 4 partitions primaires. Si l'un est utilisé comme une chaîne de partitions logiques, qui laisse 3 non-linux OS. J'ai décidé de vivre avec cela. Il ya des solutions extrêmes qui permettrait à davantage de non-linux OS, mais ils sont trop extrêmes. Je voulais NetBSD, Desktop BSD et Solaris 8, en plus de ce que j'ai fait installer. Mais ces 3 OS ne semble pas très utile de mesures extrêmes. J'ai donc liquidé avec:
Outils J'ai utilisé plusieurs outils logiciels pour m'aider avec ce projet. GRUB Tout d'abord, j'ai besoin d'un bon chargeur de démarrage que je comprends complètement. GRUB est vraiment le seul jeu dans la ville. Il existe des produits d'amorçage très puissant, mais sans accès au code source, il ya une limite à la façon dont je peux les comprendre. GRUB est très facile à comprendre, mais il a été mal documentée. Jusqu'à ce que j'ai compris GRUB, diverses catastrophes rendu mon système ne démarre. Dans chaque cas, j'ai pu finalement suivre exactement ce qui s'est passé. Il n'est plus vraiment possible de rendre mon système ne démarre. Disk Director / True Image J'avais besoin d'un gestionnaire de partition, et j'ai utilisé Partition Magic dans le passé. Mais PowerQuest vendu le produit à une autre société, et il ne semble pas être bien supporté aujourd'hui. J'ai décidé d'essayer Acronis Disk Director, qui est moins cher. Il n'est pas parfait, mais il a travaillé suffisamment. J'ai également acheté Acronis True Image. Encore une fois n'est pas parfait, mais il peut restaurer complètement le système à un tout nouveau lecteur de DVD de sauvegarde. Vous pouvez créer un cd bootable qui a la fois des produits sur lui. Cela permet des sauvegardes et des restaurations à partir d'un disque de repos. Réalisateur de disque est livré avec un éditeur d'interface graphique du secteur est sans doute mieux que dskprobe. Disk Wizard / Seatools Seagate a ces utilitaires disponibles pour téléchargement à partir de leur site. Ce sont des CD de démarrage qui peut fonctionner de diagnostics et d'écrire des zéros sur l'ensemble d'une route entre les différentes autres tâches. Je me plais à zéro sur un disque avant de faire une ré-installation (9 heures pour 100 Go!). Et il peut faire des essais non destructifs sur le lecteur. D'autres constructeurs ont des services publics. System Rescue CD Quand j'ai eu du mal au cours du projet, c'est l'outil qui m'a sorti du bois. Il s'agit essentiellement d'un "Live CD", avec beaucoup d'outils disponibles. Secteur de l'inspecteur Il s'agit d'une ligne de XP COMAND secteur physique utilité. Il peut faire beaucoup de choses que l'interface graphique secteur éditeurs ne peuvent pas faire. Il s'agit d'un programme de Microsoft et il est gratuit. grub Acronis Disk Director Suite 10.0 Acronis True Image 9.0 Home Disk Wizard Seatools SystemRescueCd secteur de l'inspecteur J'ai passé du dskprobe Acronis Secteur de l'éditeur. Mais dskprobe est libre et il vient dans le paquet d'outils de soutien sur le CD d'installation XP. Ou vous pouvez télécharger les outils de support ici. dskprobe est livré avec un fichier appelé dskprtrb.doc doc que j'ai trouvé très utile. Aussi dskprobe est un stand-alone utilité alors que le secteur Acronis est un éditeur de sous-outil de Disk Director. Notes d'installation Voici quelques notes sur ce que j'ai fait pour installer l'OS. Je n'ai pas seulement de recueillir un ensemble d'OS et de sauter directement dans la masse installation. J'ai fait des installations d'essai d'abord acquérir de l'expérience à chaque installation. Dans tous les cas, j'ai utilisé la "coutume" options afin de maximiser mon flexibilité lors de l'installation. Cela signifie que je devais comprendre chaque installation plutôt bien. Rappelez-vous que le Master Boot Record a une table pour 4 entrées de partition. Windows XP J'ai installé XP d'abord sur la première partition que j'ai formaté avec un système de fichier NTFS. J'ai installé la console de récupération et j'ai ajouté une option pour démarrer en mode sans échec. Cela signifie que le chargeur de démarrage NT présente pas un menu à la différence du menu grub. J'ai créé un E: qui a utilisé la partition FAT32. Il s'agit de ma première partition logique. La seconde entrée de la table de partition est maintenant consommé à l'appui de ma chaîne de partitions logiques. Cette partition contient les fichiers de données et Linux vont le monter en / driveE. Cela me permet de me déplacer des fichiers entre Linux et Windows XP. Au moment du démarrage, le chargeur NT recherche un fichier nommé hiberfil.sys. S'il est trouvé, il est chargé en mémoire et l'exécution reprend. C'est ainsi que la mise en veille prolongée est mis en œuvre. Au réveil de l'hibernation, il est essentiel que rien n'a changé depuis la mise en veille prolongée a commencé. Même l'accostage ou l'appareillage est un ordinateur portable est assez causer des problèmes. Je serai le démarrage via grub et je ne peux pas garantir que l'autre OS peut ne pas démarrer. Depuis que je suis partage entre les partitions de l'OS ce serait une recette pour un désastre. Donc, j'ai désactivé la mise en veille prolongée. Chacune des procédures d'installation d'autres OS est prête à co-exister avec un pré-existant XP exemple dans la première partition primaire. La plupart d'entre eux l'installation d'un chargeur d'amorçage qui peut démarrer XP ou elle-même. Voir le «failsafe boot» l'article ci-dessous pour voir pourquoi ce n'est pas un problème. Linux Distros J'ai utilisé LVM pour chaque distribution Linux. Even / sous LVM, mais Linux ne peut pas démarrer à partir de LVM, donc j'ai créé un temporaire partition / boot lors de l'installation. Prenons comme RedHat suis exemple ... il a été la première distribution que j'ai installé. J'ai copié / boot sur / mastergrub / RedHat. Puis, j'ai déménagé / mastergrub / RedHat / grub dans / mastergrub / grub. / mastergrub / RedHat / grub est devenu un lien symbolique vers / mastergrub / grub. Et / boot est un lien symbolique vers / mastergrub / RedHat. Chaque distribution possède son propre sous-répertoire sous / mastergrub et chacun de ces sous-répertoires est un lien symbolique pointant vers grub / mastergrub / grub. Ainsi, l'ensemble des distributions de liquidation en utilisant le même exemple grub. Cette partition / boot est juste jeté. J'ai utilisé un / tmp et swap partition partition putside de LVM. Le swap est 2 Go et / tmp est de 1 GB. Chaque distribution Linux utilise les mêmes partitions. Donc, au total, je utiliser 3 Go pour / tmp et swap au lieu de 15 GB. Je suis en train de modifier les scripts de démarrage à reconstruire le répertoire / tmp lors du démarrage. Cela signifie que tous les systèmes d'exploitation peuvent utiliser le swap et / tmp zone à n'importe quelle fin. Il explique également pourquoi le répertoire / tmp en ext2 plutôt que ext3. Il n'y a pas de point dans un journal, si je reconstruire le système de fichiers à chaque démarrage. RedHat est assez vieux et il est en décalage avec les autres distributions. Mais je rencontre RedHat déployés par les entreprises afin que je voulais une version sur mon ordinateur portable. RedHat utilise LVM version 1 et les autres distributions utiliser LVM version 2. J'ai choisi Fedora, et a fait un "vgscan - makenodes". Cela m'a donné les fichiers de périphériques pour tous les autres distributions "volumes logiques. Je peux monter les autres distributions quand j'ai besoin. Je vais l'utiliser pour développer un fichier de sauvegarde pour le niveau de distributions Linux. J'ai également utilisé ce pour corriger un problème avec les scripts de démarrage. Chaque partition Linux est une partition logique. Cela inclut les partitions Grub et LVM partitions. J'ai un / userdata partition formatée en ext3 laquelle toutes les distributions Linux de montage. J'ai un petit / home (sous LVM) dans chaque distribution de sorte que chacun puisse avoir ses propres fichiers de démarrage, etc Mais la plupart de mes affaires vont dans / userdata. Ainsi, chaque distribution a sa propre partition LVM. Mais alors il ya de swap, / tmp, / userdata, et / mastergrub (chacun dans une partition logique) utilisé par toutes les distributions en commun. Et il est / driveE dont ils monter aussi. FreeBSD FreeBSD passe en partition primaire 3. J'ai utilisé Acronis à pré-allouer la partition avant l'installation. FreeBSD taille de la partition INTP pièces qu'il appelle également à confusion partitions. En théorie, Grub peut démarrer FreeBSD directement, mais je n'ai pas pu obtenir que de travailler. J'ai donc installer FreeBSD son propre chargeur de démarrage dans la partition, laissant ainsi le MBR seul. Ensuite, j'ai modifié pour grub.conf chainloader en elle. Je voudrais obtenir un travail de démarrage Grub et je prévois de travailler à ce projet. Pour l'instant, il est assez bon. Solaris J'ai une partition principale à gauche et je l'ai installé Solaris 10 dans celle-ci. Tout comme FreeBSD, Solaris sculpte la partition en place. Il utilise des "tranches" pour décrire les pièces. Encore une fois, je preallocated la partition avant de faire l'installation. Au cours de la dernière minute, j'ai remarqué que Sun a une nouvelle version de Solaris 10 sur leur site. Je n'ai pas l'habitude de sauter instantanément à chaque nouvelle version, mais Sun a changé à partir de leurs propres d'amorçage à l'aide de grub. Donc j'ai téléchargé la dernière version de Solaris 10. Eh bien, aucune de mes versions de GRUB peut lire les tranches Solaris ... J'ai téléchargé la dernière Grub Grub de la page d'accueil et toujours pas de faire. Dimanche Grub doit être modifié. Je mai passer à la version de dimanche à un certain point. Mais pour l'instant, mon Grub est chainloadering Sun Grub. Ma configuration finale Grub Pour chaque système d'exploitation utilisé Grub, j'ai pris un coup d'oeil à sa grub.conf. Plusieurs fois, j'ai vu une nouvelle technique, et, si j'ai aimé, j'ai ajouté à mon sac de tricks. SuSE Grub fortement modifiées et je ne pouvais pas trouver beaucoup d'infos sur les mods. Il ya des avertissements de mods que SuSE a présenté un problème de sécurité. Je vais donc pas utiliser la version SuSE de Grub. Mais même avec SuSE, j'ai trouvé des choses à utiliser. Mon 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 Démarrer
Le / la partition a mastergrub grub logiciels et les amandes pour chaque distribution Linux installée. Grub étape 1 réside dans le Master Boot Record (MBR), qui est le premier secteur du disque. Le plus souvent, d'installer chaque système d'exploitation de réécrire le MBR au point de sa propre copie de grub ou un autre chargeur de démarrage. Parfois, je violon autour du logiciel dans grub / mastergrub et de le briser. En plus d'installer grub phase 1 dans le MBR, étape 1 peut être installé dans le premier secteur de cette partition. Et puis une autre chargeur de démarrage, il peut en chainloader. J'ai écrit mes propres scripts d'installation. Ils sont:
mbrinstall Ce script installe grub simplement l'étape 1 dans le MBR. localinstall Ce script installe grub étape 1 dans la partition. (/ mastergrub pour l'instant.) Ensuite utilise dd pour obtenir une copie du premier secteur de la partition. Ceci est mis dans un fichier dans / driveE système de fichiers. Rappelons que / diveE un système de fichiers FAT32 est utilisé pour transmettre des fichiers entre linux et XP. Windows XP obtiendrez le secteur et l'intégrer dans la séquence de démarrage XP. Dans mon fichier boot.ini XP est quelque chose comme: 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 Amorcer à partir de XP ne fonctionne pas si j'ai endommagé le logiciel dans grub / mastergrub. Je n'ai pas de place sur une disquette pour les amandes, mais je n'ai jamais cassé mes noyaux. Je avoir de la place facilement sur une disquette de grub, y compris le fichier grub.conf. Ce script crée une telle disquette. Ensuite je peux la disquette de démarrage et démarrer le système de cette façon. cdinstall Que faire si je suis entièrement d'perdent / mastergrub? cdinstall crée un CD qui est une sauvegarde complète de / mastergrub. En outre, il est un CD bootable qui permet de démarrer l'une des distributions sans l'aide de / mastergrub à tous. Ce script a besoin d'un morceau de Grub appelé stage2_eltorito qui n'a pas été fourni avec une version de Grub que j'avais. Donc j'ai téléchargé et compilé le code source de la page d'accueil de Grub. /backupgrub et / testgrub En fait, tous ces scripts ont benn étendu à l'appui / backupgrub. C'est tout simplement une autre partition qui est une copie de / mastergrub. De temps en temps, je utiliser rsync pour copier les fichiers sur. Puis, j'ai en cd / backupgrub et exécuter le script localinstall. Chaque fois que l'un de ces scripts fonctionne, elle est ce que la partition, il est en cours d'exécution in Le fichier grub.conf est ajusté pour tenir compte de la partition (ou dans le cas de cdinstall, ajusté pour démarrer à partir du cd). J'ai également créé un / testgrub partition pour que je arrêter des expériences dangereuses dans une partition. supermbrbackup Un certain nombre d'utilitaires existent pour sauvegarder et restaurer le MBR. Cela comprend le code de démarrage et la table de partition. La chose est que de mes partitions sont décrites à l'Extended Boot Records éparpillés sur mon disque. Je voulais un utilitaire qui permettrait de recréer de toutes mes partitions (vide bien sûr) sur un tout nouveau disque. Et pendant que j'étais à lui, j'ai eu, il scan les secteurs non utilisés après le MBR qui est le lieu où réside GRUB étape 1.5. Ainsi, cette sauvegarde tout, sauf le contenu des partitions. La sauvegarde est écrite sur une disquette avec un script pour les restaurer. Ce script peut être lancé après l'amorçage du système Rescue CD. Mon intention était que ce serait la première étape d'un métal nu restaurer. Mais il s'avère que je ne l'ai pas besoin. Bare Metal Restore C'est ce qui se passe si je perds tout le disque dur. C'est le summum en veillant à ce que je peux démarrer. J'ai utilisé Acronis True Image pour faire une sauvegarde complète de mon disque. Il ne supporte pas Linux LVM, ni tranches FreeBSD et Solaris. Mais il peut le faire secteur par secteur de la sauvegarde de ces partitions. Une fois la sauvegarde terminée, j'ai remplacé mon disque dur et utilisé mon disque bootable Seatools à zéro it out (9 heures avec un disque dur de 100 Go). Ensuite, j'ai démarré mon Acronis disque de démarrage et d'alimentation de la sauvegarde de DVD. Il recréé mon système tout entier. J'ai utilisé un utilitaire de Seagate pour écrire des zéros à l'intégralité du disque avant de commencer. Cela signifie que le LVM Linux et FreeBSD / Solaris partitions probablement eu beaucoup de zéro dans les secteurs de l'espace inutilisé. Cela permet la compression de routine dans la Acronis secteur par secteur sauvegarde faire un bon travail. J'ai toujours besoin d'un niveau de sauvegarde des fichiers pour Linux / FreeBSD / Solaris. Je vais travailler sur cela. |
|
|||||
|
Voici le code source pour les scripts mentionnés ci-dessus.
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
|
| Bookmarks |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|