![]() |
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.
|
|
Google unix.com
|
|||||||
| Форумы | Регистрация | Правила форума | Ссылки | Альбомы | ЧАВО | Список участников | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Советы и руководства Полезные статьи от наших пользователей. |
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| октаву DB-031008 (по умолчанию филиала) | iBot | Релизов программ - RSS Новости | 0 | 03-12-2008 07:00 PM |
| октава-Энн 1.0 (по умолчанию филиала) | iBot | Релизов программ - RSS Новости | 0 | 03-10-2008 06:40 PM |
| Октава-FLTK 0.7.1 (по умолчанию филиала) | iBot | Релизов программ - RSS Новости | 0 | 02-05-2008 12:10 AM |
| Октава 3.0.0 (по умолчанию филиала) | iBot | Релизов программ - RSS Новости | 0 | 01-10-2008 06:40 PM |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|
|
|||||
|
Октава --- Моя восьмикратный загрузки ноутбука
Как я обещал в несколько нитей, вот некоторые заметки о том, как я установил несколько операционных систем на моем laptap. Я буду давать ссылки на инструменты, которые я получил от различных третьих сторон. И я буду включать в исходный код на несколько сценариев, которые я написал.
Введение А несколько месяцев назад диск на моей Inspiron 8200 из жареной. Я решил настроить ее с новой периферии. У меня 100 Гб Seagate диск и DVD горелки. 100 Гб диск монтируется на носитель. Она представляет собой крупную сделку смонтировать диск на перевозчика, но удалить один винт и перевозчика могут быть просто вытащил. Я купил второй перевозчик и второй диск 100 Гб. Это позволяет мне переключить мой жесткий диск, и поэтому я могу попробовать эксперименты с небольшим риском. Я могу удалить один из моих батарей и установить другой диск в слот аккумулятора. У меня дисковод для установки там. Моя BIOS поддерживает загрузку с любого устройства ATA поэтому я могу загрузиться с жесткого диска, CD / DVD диск или дискету. Я решил установить, как много ОС, как я мог о новых настройках. Проблема заключается в том, что, кроме Linux, все требования первичный раздел, и Есть только 4 первичных раздела. Если используется как цепочки логических разделов, которые, не оставляет 3-Linux OS's. Я решил жить с этим. Есть некоторые экстремальные решения, которые позволят более, не-Linux OS, но они слишком экстремальные. Я хотел NetBSD, Desktop BSD и Solaris 8, в дополнение к тому, что я сделал установку. Но те, 3 ОС, как представляется, не стоит очень крайние меры. Так что я рана с:
Инструменты Я использовал несколько программных инструментов, чтобы помочь мне с этим проектом. GRUB Во-первых, мне нужен хороший системный загрузчик, что я вполне понимаю. GRUB действительно единственная игра в городе. Есть некоторые очень мощный загрузчик продукции, но без доступа к исходному коду, есть предел тому, как хорошо я могу их понять. GRUB на самом деле очень легко понять, но она была плохо документированы. До тех пор, пока я понял, GRUB, различные бедствия вынесла моя система незагружающуюся. В каждом случае я смог в конечном итоге выявить именно то, что произошло. Он действительно не представляется возможным вынести мою систему незагружающуюся. Disk Director / True Image Мне необходим Partition Manager, и я использовал Partition Magic в прошлом. Но PowerQuest продали продукции на другую компанию, и она, как представляется, не будет хорошо поддерживается в настоящее время. Я решила попробовать Acronis Disk Director, который является менее дорогостоящим. Она не является совершенной, но она работала достаточно хорошо. Я также купили Acronis True Image. Опять же не идеален, но он может полностью восстановить систему на новый диск DVD от копирования. Вы можете создать загрузочный диск, который так продуктов на нем. Это позволяет резервное копирование и восстановление с диска покоя. Disk Director поставляется с графическим редактором сектора, что, вероятно, что лучше dskprobe. Диск Мастер / Seatools Seagate имеет эти утилиты можно скачать с их сайта. Эти загрузочные компакт-диски, которые могут запускать диагностику и писать нули в течение всего диска среди ряда других задач. Я хотел к нулю из привода до Я повторной установки (9 часов для 100 ГБ). И это может сделать неразрушающих испытаний на диске. Другие производители имеют аналогичные утилиты. Система спасения CD Когда я имел проблемы в ходе реализации проекта, это инструмент, который меня из леса. Она представляет собой "Live CD" с огромным количеством полезных инструментов. Сектор инспектор Это XP клавиш линии основаны физического сектора полезности. Она может сделать много материала, что GUI сектора редакторы не могут сделать. Эта программа Microsoft и это бесплатно. GRUB Acronis Disk Director Suite 10.0 Acronis True Image 9.0 Главная Диск мастер Seatools SystemRescueCd инспектор сектора Я переключился с dskprobe к Acronis Секторов редактора. Но dskprobe бесплатно и поставляется в пакете средств поддержки по установке XP CD. Или же вы можете скачать по поддержке Инструменты здесь. dskprobe поставляется с документом файл dskprtrb.doc которой я подумал было очень полезным. Также dskprobe является автономной утилитой Acronis в то время как сектор редактор суб-инструмент Disk Director. Замечания по установке Вот некоторые заметки о том, что я сделал для установки ОС. Я не просто собирать коллекцию ОС и перейти прямо в массе установки. Я сделал тест установок первого опыта с каждым установки. В любом случае, я использовал "обычай" варианты максимального моей гибкости при установке. Это означает, что я должен был понимать друг установки довольно хорошо. Помните, что в главную загрузочную запись в таблице разделов на 4 позиции. Windows XP Я установил XP в первую очередь на первый основной раздел, который я отформатирован с файловой системой NTFS. Я установил консоль восстановления, и я добавил возможность загрузиться в безопасном режиме. Это означает, что NT загрузчик представляет собой в отличие от меня, не в меню GRUB. Я создал E: раздел, который используется FAT32. Это мой первый логический раздел. Вторая запись в таблице разделов, потребляемого в настоящее время, чтобы поддержать мою строку логических разделов. Этот раздел будет содержать данные, файлы и Linux будет смонтировать его как / driveE. Это позволяет перемещать файлы между Linux и XP. На время загрузки, то NT погрузчика ищет файл с названием hiberfil.sys. Если найдена, она загружается в память и выполнение возобновляется. Это, как спящий режим применяется. После пробуждения из спящего режима, крайне важно, чтобы ничего не изменилось после спячки начали. Даже стыковки и расстыковки ноутбук достаточно вызывает проблем. Я буду загрузке через GRUB, и я не могу гарантировать, что другой ОС не может начать работу. Поскольку я обмена между разделами ОС это будет путь к катастрофе. Поэтому я инвалидов спячки. Каждая из других ОС процедуры установки готовы сосуществовать с уже существующими XP инстанции в течение первого первичного раздела. Большинство из них будет установить загрузчик, которые могут загружаться XP или самостоятельно. См. "безотказного загрузки" в статье, чтобы понять, почему это не является проблемой. Linux дистрибутив Я использовал LVM для каждого дистрибутива Linux. Даже / находится под LVM, но Linux не может загрузиться с LVM, так что я создал временную / загрузочный раздел во время установки. Возьмем в качестве RedHat ч. пример ... это был первый дистрибутив я установил. Я скопировал / загрузке в / mastergrub / RedHat. Затем я переехал / mastergrub / RedHat / GRUB в / mastergrub / GRUB. / mastergrub / RedHat / GRUB стала символической ссылки на / mastergrub / GRUB. А / загрузке становится символической ссылки на / mastergrub / RedHat. Каждый дистрибутив получает собственный подкаталог в / mastergrub, и каждая из этих подкаталогов получает GRUB символическая ссылка, указывающая на / mastergrub / GRUB. И все из дистрибутивов ветра, используя тот же GRUB инстанции. Что / загрузочный раздел, а затем просто отбрасываются. Я использовал отдельный раздел / TMP раздела и раздела подкачки putside от LVM. ОСП области составляет 2 ГБ и / TMP составляет 1 Гб. Каждый дистрибутив Linux использует те же разделы. Так, в общем, я использую 3 Гб для / TMP и свопы, а не 15 ГБ. Я в процессе изменения запуск скриптов для восстановления / TMP во время загрузки. Это будет означать, что любая ОС может использовать своп и / TMP район для любых целей. Это также объясняет, почему / TMP в ext2 вместо ext3. Существует никакого смысла в регистрации, если я восстановить файловую систему при каждой загрузке системы. RedHat является довольно старой и это не в ногу с другими дистрибутивами. Но я по-прежнему сталкиваются с RedHat развернуты компаниями и поэтому я хотел версию на моем ноутбуке. RedHat использует LVM версия 1 и других дистрибутивов использовании LVM Версия 2. Я выбрал Fedora, и сделал "vgscan - makenodes". Это дало мне файлы устройств для всех других дистрибутивов логических томов. Я могу подключить другой дистрибутив, когда мне нужно. Я буду использовать это для разработки уровень резервного копирования файлов для Linux дистрибутивов. Кроме того, я использовал это исправить проблемы с загрузкой скриптов. Каждый раздел Linux представляет собой логический раздел. Это включает в себя разделы Grub и LVM разделов. У меня есть / UserData раздела в формате ext3, которые все из дистрибутивов Linux монтировать. У меня есть маленький / дома (под LVM) в каждый дистрибутив так что каждый может иметь свое собственное запуск файлов и т.д. Но большинство моих материал пойдет в / UserData. Поэтому каждый дистрибутив имеет собственный раздел LVM. Но тут есть подкачки, / TMP, / UserData и / mastergrub (каждый в отдельный логический раздел), которые используются всеми дистрибутивами общего. И есть / driveE которых они гору а. FreeBSD FreeBSD переходит в основной раздел 3. Я использовал Acronis для предварительного выделения разделов перед установкой. FreeBSD вырезает с разделом intp штук, что также требует смешения разделов. В теории, Grub FreeBSD может загружаться прямо, но я не мог, что к работе. Так что я был FreeBSD установить собственный загрузчик на раздел, в результате чего MBR одиночку. Тогда я изменить grub.conf для chainloader в нее. Я хотел бы получить прямой загрузки Grub работает и я планирую работать в этой области. В настоящее время он является достаточно хорошим. Solaris Я один первичный раздел, левое и я установил Solaris 10 в нем. Многое, как FreeBSD, Solaris вырезает раздела вверх. Он использует "кусочки" так описывают штук. Опять же, я preallocated раздела перед выполнением установки. В последний момент я заметил, что Sun была новой версии Solaris 10 на своем сайте. Я обычно не мгновенно перейти к каждой новой версии, но Солнце было включено из собственных использованием загрузчика GRUB. Так что я скачал последнюю версию Solaris 10. Ну, никто из моих версий Grub можете прочитать Solaris кусочки ... Я даже скачал последнюю Grub из Grub главной странице и до сих пор не идти. Солнце должно быть изменены Grub. Я могу переключиться на версию Sun в определенный момент. Но теперь, моя Grub является chainloadering Солнца Grub. Мое последнее Grub Конфигурация В каждой ОС, которые используют Grub, я посмотрю на его grub.conf. Много раз я увидел новую технику, и, если мне понравилось, я добавил его к моей ухищрения. SuSE сильно измененные Grub, и я не мог найти много информации об их Mods. Есть предупреждения о том, что в SuSE Mods представил проблему безопасности. Поэтому я не буду использовать SuSE версию GRUB. Но даже с SuSE, я нашел кое-что использовать. Моя grub.conf: Код:
# # 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 |
|
|||||
|
Отказоустойчивыми Загрузка
В / mastergrub раздела имеет GRUB и программного ядра для каждой установлен Linux дистрибутив. Grub 1 этап заключается в главную загрузочную запись (MBR), которая в первый сектор жесткого диска. Чаще всего, каждый будет установить ОС переписать MBR, чтобы она указывала на его собственную копию GRUB или другой загрузчик. Иногда я бы скрипку вокруг GRUB в / mastergrub, и разорвать его. В дополнение к установке GRUB стадии 1 в MBR, стадия 1 может быть установлена в первом секторе этого раздела. И тогда некоторые другие загрузчика можно chainloader в нее. Я написала моя установка скриптов. Ими являются:
mbrinstall Этот скрипт просто устанавливается GRUB стадии 1 в MBR. localinstall Этот скрипт установки GRUB этап 1 на местном раздела. (/ mastergrub сейчас.) затем использует дд получить копию первого сектора из местных раздела. Это поставить в один файл в директории / driveE файловой системы. Напомним, что / diveE является файловой системой FAT32, используемых для передачи файлов между Linux и XP. Windows XP будет получать этот сектор и включить его в последовательность загрузки XP. В моем XP файл Boot.ini что-то вроде: Код:
[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 Загрузка с XP не будет работать, если я повредил GRUB в / mastergrub. У меня нет места на дискете для этих ядер, но я никогда не сломанной моего ядра. Я легко комнату на дискету для GRUB, в том числе в файле grub.conf. Этот скрипт создает такую дискету. Тогда я могу загрузиться с дискеты и запустите систему таким образом. cdinstall Что делать, если я полностью потерять / mastergrub? cdinstall создается CD, который представляет собой полное резервное копирование / mastergrub. Кроме того, он представляет собой загрузочный компакт-диск, который может загружать любой из дистрибутивов без использования / mastergrub вообще. Этот скрипт необходимо кусок Grub призвал stage2_eltorito который не поставляется с любой версией Grub, что я имел. Так я скачал и скомпилированный исходный код Grub с домашней страницы. /backupgrub и / testgrub На самом деле все вышеуказанные сценарии имеют Бенну продлен до поддержки / backupgrub. Это просто еще один раздел, который является копией / mastergrub. Каждый сейчас и потом, я использую Rsync копировать файлы старше. Тогда я в CD / backupgrub и запустить скрипт localinstall. Всякий раз, когда один из этих скриптов запускается, то цифры, что раздел его работы дюйм В grub.conf файл скорректирована с учетом текущего раздела (или в случае cdinstall, скорректированные на загрузку с CD). Я также создал / testgrub раздела так, что я бы прервется опасные эксперименты в критическом раздела. supermbrbackup Ряд коммунальных существуют для резервного копирования и восстановления MBR. Это включает в себя загрузочный код и таблицу разделов. Дело в то, что мои разделы, описанные в расширенном загрузки отчеты, разбросанных по всей моего диска. Я хотел это утилита, что бы восстановить все мои разделы (пустые, конечно) на новом диске. И хотя я был на него, я его сканировать неиспользуемые секторы после MBR где GRUB этапе 1,5 проживает. Так что это подкрепляет все, кроме содержимого разделов. Резервное написаны на дискету, а также сценария к их восстановлению. Этот сценарий может быть запущен после загрузки системы спасения CD. Мое намерение состоит в том, что это будет первым шагом в голом железе восстановить. Но выясняется, что мне не нужно. Голый металл Восстановить Это то, что произойдет, если я потеряю весь жесткий диск. Это в конечном счете в том, чтобы я могу загрузиться. Я использовал Acronis True Image сделать полную резервную копию моего диска. Он не поддерживает Linux LVM или FreeBSD и Solaris ломтиками. Но он может делать все сектора резервной этих разделов. После резервного копирования закончил, я заменил мой жесткий диск и использовать мои загрузочный диск Seatools до нуля его (9 часов в 100 Гб диска). Тогда я загрузилась моя Acronis загрузочный диск и питал его резервную копию DVD's. Она воссоздана вся моя система. Я использовал Seagate утилиту писать нули на весь диск до того, как я начал. Это означает, что LVM Linux и FreeBSD / Solaris разделов, вероятно, было много нулевую секторов в неиспользуемые пространства. Это помогает сжатия обычных в Acronis сектора резервной делать хорошую работу. Я по-прежнему нуждаются в файл резервной уровня для Linux / FreeBSD / Solaris. Я буду работать над этим. |
|
|||||
|
Вот исходный код скриптов, упомянутые выше.
Код:
#! /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
Код:
#! /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
Код:
#! /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
Код:
#! /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
Код:
#! /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
|
| Закладки |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|