[FAQ] MBR, разделы и загрузчики
понять от чего отсчитывается сдвиг начала раздела... Для обычных и основных разделов он отсчитывается с того сектора, в котором и записана эта информация. Для расширенных логических разделов отсчет похоже идет от начала основного расширенного раздела, "внутри" которого они находятся.Правильно ли я понимаю, что для основных и расширенных (не обычных) сдвиг начала раздела отсчитывается от MBR, т.е. от первого сектора? Тогда лучше так и написать.
А для логических разделов в составе расширенных (не расширенных логических; и вложенных расширенных, видимо) отсчет похоже идет от начала основного расширенного раздела, "внутри" которого они находятся. Аналогично.
Внутри 16-байтного блока первый байт отвечает флагу bootable у разделаМногие называют это: "активный раздел". Имхо, неплохо было бы об этом сказать (а то я сначала никак не мог взять толк, что значит сделать раздел "активным").
В приведенном MBR четвертый раздел —расширенный и он начинается с сектора номер 0x05184c00=85478400Получается, что если сдвиг раздела от сектора с номером M есть N секторов, то его начало находится в секторе с номером M+N. Однако что если сдвиг раздела от MBR есть N секторов, то его начало находится в секторе с номером N, а не N+1 (т.к. у MBR номер сектора 1). Странно (это не претензия к автору, а просто неудоумение).
...
сектор, где начинается наш новый логический расширенный раздел. Начинается он в секторе номер 85478400+1=85478401
00001be: 00 00 00 00 83 00 00 00 ef 67 e3 01 66 c3 00 00Получается, что размер раздела, стоящего вторым в списке, есть 1 сектор? Как это вообще понимать?
00001ce: 00 00 00 00 05 00 00 00 01 00 00 00 01 00 00 00
А тут у меня совсем пар из ушей пошел:
Второй раздел — расширенный, его сдвиг — 0x01ae6b00=28207872, но его сдвиг считается от сектора 85478400, так как этот раздел расширенный.Если я правильно тебя понял, у тебя есть 1 расширенный с началом в 85478400, в нем содержится еще один расширенный с началом 8547840+1, а в нем еще расширенный с началом в 85478400+28207872? Т.е. такая матрешка, если я правильно понял... И Непонятно, почему начала всех вложенных расширенных разделов имеют сдвиг относительно первого, корневого расширенного раздела, а не относительно расширенного раздела, их породившего...
все, дальше ниасилил пока
P.S. Это не критика, если чо, это мое непонимание и в лучшем случае корректировка формулировок
Отсчет идет от MBR (от сектора с номером 0) для всех основных (primary) разделов, как для обычных, так и для расширенного, и только для основных.
Все логические разделы задаются сдвигом относительно начала некоторого расширенного раздела, более детально:
Все обычные логические (not extended logical) разделы задаются сдвигом относительно начала того расширенного раздела, в котором они описаны.
Все расширенные логические (extended logical) разделы задаются сдвигом относительно начала основного расширенного раздела (extended primary).
Для чего это сделано, мне, честно говоря, не совсем понятно, но работает это именно так.
По поводу MBR. Если я пишу где-то "первый" сектор, то имею ввиду, что перед ним больше ничего нет, однако на самом деле у него номер 0. А если я пишу "1-й" сектор, то это уже будет означать сектор с номером 1. Этот недочет я постараюсь исправить.
По поводу моих примеров, они не очень хороши, так как винт у меня побит не по "стандартам". В частности, у меня у всех логических расширенных разделов длина стоит как 1 сектор. И это имеет некий смысл, так как реально от расширенного раздела нужна только таблица его разделов, то есть только его первый сектор. Более того, есть мнение, что на длину расширенных логических разделов никто никогда не смотрит (кроме дотошных разбивалок типа Partition Magic)
Про активный раздел добавил, спасибо
маладэц
Отсчет идет от MBR (от сектора с номером 0)Тогда все понятно, меня почему-то переглючило, что он имеет номер 1 (т.к. Acronis Disk Editor ему присвает номер 1, а он же показывает данные в формате (c,h,s)).
Все обычные логические (not extended logical) разделы задаются сдвигом относительно начала того расширенного раздела, в котором они описаны.Да, это становится понятно из разбора тобой примера твоей разбивки, но хорошо бы было цитату выше занести и в фак до начала разбора примеров. И сказать, что можно создавать бесконечную вложенность расширенных разделов (ну или по крайней мере уровня вложенности 3, как у тебя на твоем винте).
Все расширенные логические (extended logical) разделы задаются сдвигом относительно начала основного расширенного раздела (extended primary).
По поводу моих примеров, они не очень хороши, так как винт у меня побит не по "стандартам". В частности, у меня у всех логических расширенных разделов длина стоит как 1 сектор. И это имеет некий смысл, так как реально от расширенного раздела нужна только таблица его разделов, то есть только его первый сектор. Более того, есть мнение, что на длину расширенных логических разделов никто никогда не смотрит (кроме дотошных разбивалок типа Partition Magic)Что еще в инете прочитал:
Штатные утилиты разбивки (FDISK.EXE, Disk Manager) в каждой таблице разделов создает один основной и один расширенный раздел. Т. е. если при разбиении винчестера на четыре логических диска, на нем образуется четыре partition table, хотя в данном случае можно было бы обойтись и одной.А про единичную длину логических расширенных не знал :о Это по стандартам (fdisk там разметил), или ты вручную делал?
маладэцриспектов пятОк
Сюда относятся Windows'ы типа Windows NT/XP/2003. Сюда не входят Windows Vista, Windows 95/98, Windows 2k (могу и ошибаться, так как Windows 2k никогда не видел ).Поправочка: Windows 2000 использует ntloader ^)
Так как stage1 GRUB'а использует прерывания BIOS'а для чтения секторов, то могут возникнуть проблемы при попытке загрузить stage2, если он лежит достаточно далеко от начала диска. GRUB поддерживает и CHS-адресацию и LBA. Вполне возможно, что граница, за котороую нельзя выходить находится где-то около 128 Гигабайт.И LILO, и ntloader, да и наверное почти все (если знаете, кто не использует, обязательно поделитесь такой ценной инфой) стандартные загрузчики при загрузке некоего своего подобия "stage2" (т.е. тот код, которому передается управление после загрузки начальных 512-ти байт) испоьзуют прерывания BIOS'а Поэтому, если этот "stage2" лежит за той границей, которую может напрямую адресовать BIOS (а сейчас некоторые старые (года 4 и больше) BIOS'ы используют 28битную адресацию, поэтому такая граница есть 128 стандартных ГБ (ну или 136 "десятичных" ГБ, как показывается в БИОС - по крайней мере у меня)), то загрузить систему Вы не сможете, даже если правильно проделали операцию по добавлению новой ОС в Ваш любимый загрузчик
Я не настаиваю, но предлагаю поместить некий вариант сказанного мной выше, дабы я на этом уже собаку съел И не хочу, чтобы другие наступали на эти же грабли
ИнструментыЯ бы сюда, пожалуй, еще добавил DiskExplorer for FAT\NTFS от Runtime Software. Также платный, но мне понравился больше Acronis Disk Editor - особенно то (не считаю остальных плюсов), что при ресайзе окна в строчке в режиме "просмотр HEX" как было 16 значений, так и осталось. А акронисовская утилитка меняет в зависимости от размера окна количество значений в строке.
Windows
*Офф.*
Жаль, что на новую версию я кряк так и не нашел
Инструментыи еще я бы поместил сюда какой-нить hex-редактор\вьюер, который позволяет копировать в шестнадцатеричном виде содержимое секторов в обычные текстовые файлы (смотри примеры секторов выше). Под линуксом-то это просто, просто копирнул мышкой из терминала вывод hexedit'а, а в винде ни акронис, ни дискэксплорер так сделать не дают. В фаре мне тоже этого сделать не удалось (даже с плагином hexed, хотя опыта большого у меня нет). Как сделать в винде это просто, я не знаю (Джерри, может подскажешь?). В итоге остановился на выборе cygwin+hexedit+мышь
Windows
PS: Чтобы в консоли Linux мышью выделить прямоугольную область надо использовать Alt+Ctrl или что-то вроде этого при выделении.
Скажите, а есть ли "правильный" способо установить винду на САТА диск если в системе также есть Иде диски, не отключая ИДЕ? (если не отключать ИДЕ то загрузчик пишется на него, а если Иде отформатирован как экстендед или динамик, то винду вообще не установить - она не найдет правильнх партиций)
Был у меня винчестер с установленным Windows и загрузочным сектором.
Потом я купил другой винт, установил на него Windows и сделал его основным загрузочным диском.
Старую винду я стер, но ссылка на лоадер где-то в MBR первого винта осталась.
Вопрос - как ее удалить, то есть сделать второй винт не загрузочным?
В принципе не критично, но хвосты лишние не нужны.
это не в мбр, это в бут.ини
Я не имею в виду хвосты от старых операционок, которые появляются при выборе ОС.
Я имею в виду, что если я поставлю в BIOS загрузку с первого винчестера, я хочу, чтобы ничего не грузилось.
То есть мне нужно сделать первый раздел винчестера не "bootable" (система грузилась с первого раздела).
Не совсем понятно, достаточно ли для этого поставить '00' вместо '80' в MBR.
И какими тулзами можно делать подобные фишки.
Acronis это сможет?
А на старом (втором), раньше была винда, но сейчас там ее нет, однако если этот самый второй винт сделать первым в загрузке, он будет пытаться что-то грузить (однако ничего не загрузит, т.к. кроме первичного загрузчика в MBR самого ntloader как такового не существует).
Если это так, то открываешь любой hex-редактор диска, который позволяет записывать изменения, сделанные в секторах (например, тот же самый Acronis disk editor), смотришь на запись в принятых выше обозначениях (0,0,1) для твоего старого диска (второго) - т.е. его MBR, первый сектор, и просто смотришь в конец этого сектора. И если тебе со старого винта ничо грузить не наадо, просто все флаги активности разделов ставишь вместо 80 на 00, и сохраняешь на диск изменения. Все.
—
Аддон. Недавно проверял у себя, если сменить 80 на 00, ntloader точно грузиться не будет
Acronis Disk EditorБыло бы неплохо добавить, что сейчас как отдельная утилита не распространяется, я является частью Acronis DiskDirectorSuite.
ddК счастью, недавно нашел небольшую программку dd под Win32 на сайте http://www.chrysocome.net/dd (качать нужно http://www.chrysocome.net/downloads/dd-0.4beta4.zip, в ней добавлена полезная опция --list). Полноценный dd, который может работать напрямую с устройствами. Т.е. можно запросто сделать образ диска\дискеты, или переписать boot-сектор или MBR, не прибегая к платным и тяжелым Acronis\Runtime. Синтаксис такой же, как и в Линуховой dd, изменения касаются только наименования устройства.
Посмотреть список доступных устройств (здесь и далее все происходит в командной строке):
dd --list
Cделать образ CD или копировать в файл MBR второго винчестера:
dd if=\\?\Device\CdRom0 of=c:\temp\disc1.iso bs=1M
dd if=\\?\Device\Harddisk1\Partition0 of=c:\temp\hdc.mbr bs=512 count=1
Обратите внимание на название устройств (перед этим лучше вызвать dd с опцией --list и посмотреть, а что же есть в наличии и как все называется).
В распакованном виде весит 333Кб
И еще, я бы добавил инфу о Far и Alt+Num.Ins.
Попробую, спасибо
Скажите, а есть ли "правильный" способо установить винду на САТА диск если в системе также есть Иде диски, не отключая ИДЕ? (если не отключать ИДЕ то загрузчик пишется на него, а если Иде отформатирован как экстендед или динамик, то винду вообще не установить - она не найдет правильнх партиций)Это уже скорее тонкости работы установщика винды (которому уже наверно лет 5, если речь идет о WindowsXP).
Кстати, как верно было подмечено, на диске может использоваться и другая система разбиения на разделы. Например новые Windows (2003 SP1, XP x64) поддерживают GUID-разбиение (или GPT). Про него я почти ничего не знаю, кроме того, что на обычных компьютерах системный раздел должен находится на диске, побитом старым "MBR-методом"
ну и где:
Как поменять логический порядок разделов, не меняя при этом физический и наоборот??
Как использовать один раздел для виртуальной памяти Windows и swap Linux'а?
Как устроить скрытый компактный раздел с загрузчиком и Linux и Windows в самом начале диска?
(черновик)
Как поменять логический порядок разделов, не меняя при этом физический и наоборот?
Основные разделы
Тут все просто и прозрачно. Просто меняте порядок записей в таблице разделов в MBR. При этом большая часть partition manager'ов будет ругаться на неправильный порядок разделов. Однако проблем в работе Windows и Linux замечено не было.
Логические разделы
Рассмотрим случай, когда все логические разделы уложены в цепочку. Напомню, что в этом случае каждый логический раздел описан "внутри" одного расширенный раздела. В каждом таком расширенном разделе на первом месте указан обычный логический раздел, а на втором — следующий расширенный. Идея состоит в том, чтобы просто поменять ссылки в этой цепочке. Как поведут себя Partition Magic и другие, мне не известно. В лучшем случае они вернут нормальный порядок, а в худшем устроят цикл или оборвут цепочку логических разделов. И Windows и Linux отлично работают при измененном порядке логических разделов.
Физическое перемещение разделов
Как это ни странно, в данном случае проще целиком положиться на какой-нибудь софт типа Partition Magic. Для некоторых файловых систем достаточно сделать банальное перемещение информации с одного места на винчестере в другое. Для некоторых файловых систем при этом возможно придется что-то исправить в информационном секторе этой системы. Если вы физически передвинули раздел, на котором расположен /boot/grub вашего Linux'а, то скорее всего придется сделать grub-install еще разок
Сложные случаи
Можно попробовать превратить primary раздел в logical. Для этого у вас должен быть хотя бы один свободный сектор где-нибудь перед началом раздела. Или если первый сектор раздела не используется, то можно использовать его. В этом свободном секторе мы устроим расширенный раздел, и добавим его в цепочку логических. После этого ссылка на primary раздел удаляется из MBR. Возможно позже будет приведен конкретный пример
Logical в primary чуть проще. Просто указываете его в MBR, и удаляете одно звено из цепочки логических разделов.
после переустановки винды, она загружается по умолчанию
как корректно восстановить grub?
загрузиться с livecd убунты в консоль, зачрутиться в убунту и сделать grub-install на тот диск, на котором он раньше был.
команда sudo grub-install /dev/sda3
sda3 - ext3 раздел, на котором линукс стоит
+ sudo grub-install /dev/sda
надо, чтоб груб затер то, что винда записала в MBR
к тому же если чрутиться будешь.
кстати, можно и не чрутиться:
# mount /dev/sda3 /mnt/ubuntu
# mount /dev/sda1 /mnt/ubuntu/boot (ну или где у тебя /boot)
# grub-install --root-directory=/mnt/ubuntu /dev/sda
Оставить комментарий
banderon
MBR, разделы и загрузчикиВведение
Это первая версия FAQ'а.
Красным цветом выделены самые последние изменения, а синим — остальные.
Большую роль в подготовке этого FAQ'а сыграл (качать нужно http://www.chrysocome.net/downloads/dd-0.4beta4.zip, в ней добавлена полезная опция --list). Синтаксис такой же, как и в Линуховой dd, изменения касаются только наименования устройств. Посмотреть список доступных устройств: Cделать образ CD или скопировать в файл MBR второго винчестера:
Linux
Всегда держите под рукой LiveCD с Linux, это может спасти ваши данные и ваше время. Критичную информацию (резервные копии MBR и других секторов) храните на дискете или другом сменном носителе. Всегда перед тем как пробовать какую-нибудь из привиденных мной команд прочтите хотя бы по диагонали man.
сfdisk
Чем-то напоминает менеджер из установки Windows, но в отличии от него в случае "нестандартной" разметки предпочитает сразу выходить с ошибкой а-ля Partition Magic. При этом все же есть возможность запустить его для полной переразметки диска.
fdisk
Более устойчивая программа для разметки диска, основана на командном интерфейсе. Очень удобна для сбора информации о разделах. Советую запускать с ключом -u, чтобы информация печаталась в секторах. Полезно где-нибудь сохранить вывод команды 'p' в обычном режиме, а также команд 'p' и 'e' в экспертном режиме. В дальнейшем эта информация может пригодится при восстановлении разметки диска.
sfdisk
Наиболее отказо-устойчивая утилита, интерфейс крайне извращенный. В основном полезна только для сбора информации и исправления очень тяжелых случаев.
dd
Полезная утилита для работы с диском. С ее помощью можно вытащить любой сектор с диска, а также записать его обратно. Внимательно проверяйте все ее параметры перед запуском. Она настолько же полезна насколько и опасна в случае опечатки. В общем случае для считывания сектора номер N диска /dev/hda в файл hda_sector_N запустите а для записи его обратно запустите Очень удобным может оказаться называть файлы просто номерами секторов и складывать их в отдельной директории. Тогда восстановить все файлы можно будет одной командой
x
Полезная вещь для просмотра heump'а файла, а также для восстановления файла по его heump'у. Позволяет также просто патчить отдельные байты. Не рекомендуется применять обратное преобразование сразу на /dev/hda. Лучше сохраните требуемый сектор в файл, исправьте файл с помощью , проверьте, что все исправлено верно, и только потом заливайте обратно на диск.
В следующей версии возможно вы увидите:
Как поменять логический порядок разделов, не меняя при этом физический и наоборот?
Как использовать один раздел для виртуальной памяти Windows и swap Linux'а?
Как устроить скрытый компактный раздел с загрузчиком и Linux и Windows в самом начале диска?
Задавайте вопросы, дополняйте и исправляйте меня, если где ошибся.