< [ на главную ]

Мультисистема или Пингвин на Змее Горыныче .


    Переход на Линукс становится гораздо удобнее, если не удалять сразу Windows и пользоваться несколькими Линуксами одновременно. То есть на одном компьютере должно быть установлено столько операционных систем, сколько вам требуется. Для чего следует настроить мультисистему.

Я несколько лет занимаюсь этим на разных компьютерах — и хочу поделиться своим скромным опытом.

Простейшая мультисистема обычно создаётся автоматически при установке любого современного Линукса на компьютер, где уже есть какая-либо ОС. Но желательно всё же понимать, что делаешь. А при создании более совершенных мультисистем такое понимание становится просто необходимым.

Что именно следует знать? Прежде всего — основные принципы хранения информации на жёстких дисках. В них легко запутаться, чему способствуют и некоторые неувязки в терминологии. Попробую прояснить вопрос, насколько сумею - кратко, не претендуя на точность во всём, лишь бы было понятно новичкам.


Жёсткий диск (винчестер) - физическое устройство для хранения информации. Но прямо на него, без соответствующей обработки, ничего записать нельзя - во всяком случае, в удобном для использования виде. Записывать следует в создаваемые на винчестере логические устройства - разделы, а для их создания требуется MBR.

MBR (Master Boot Record, то есть главная загрузочная запись) занимает первый сектор винчестера. В ней предусмотрено место для четырёх 16-байтовых записей, каждая из которых указывает начало, конец и прочие параметры раздела. Поэтому первичных разделов может быть не более четырёх.

Раздел - участок на винчестере, служащий для размещения в нём файловой системы.

В Windows приняты названия вроде "диск C", "диск D" и т. п. В действительности это просто разделы, создаваемые и удаляемые заменой нескольких байт в MBR. Зачем называть их дисками, то есть вроде как физическими устройствами, которые изготавливаются на заводе - не знаю; наверное, затем, чтобы окончательно запутать бедного юзера :)

Первичный раздел - тот, параметры которого описаны в MBR.

Расширенный раздел - один из первичных (желательно - последний, во избежание путаницы), служащий как бы контейнером для вторичных разделов (логических дисков), которых может быть много. Смысл : создать на одном винчестере более четырёх файловых систем.

Вторичный раздел (или логический диск - но это название тоже отчасти сбивает с толку) - раздел, отличающийся от первичного только тем, что его параметры описаны не в главной MBR, а во вторичной (SMBR - Secondary MBR), находящейся перед этим разделом. Для каждого вторичного раздела - своя SMBR, поэтому при большом числе вторичных разделов образуется целая цепочка SMBR.

В Линуксе винчестер с параллельным интерфейсом именуется hda (или /dev/hda, так как все устройства находятся в каталоге /dev), hdb, hdc, hdd (в зависимости от номера), а с последовательным - sda, sdb и т.д. Первичные разделы (на sda, для примера)- от sda1 до sda4, нумерация вторичных начинается с sda5 независимо от числа первичных. Причём под названиями типа hdc, sda и т. п. могут скрываться и дисководы, и флэшки, и прочие носители информации. Но с ними Линукс обращается примерно так же, как и с винчестером.


Файловая система - структура для хранения информации в виде файлов.

Файл - набор информации, доступный посредством его имени (или нескольких имён).

Каталог - файл, содержащий в себе имена других файлов и пути к ним.


В Windows обычно принято называть каталоги папками, что создаёт неверную аналогию : якобы файлы вложены в эту папку, подобно бумагам. На самом деле это именно каталог - просто перечень файлов (и путей к ним), сами они хранятся в файловой системе отдельно.


Раздел и файловая система тесно взаимосвязаны : обычно (не буду тут рассматривать экзотику типа файловой системы внутри файла) раздел нужен именно для того, чтобы разместить в нём файловую систему, а файловая система создаётся именно в разделе. Соответственно, уничтожение или повреждение раздела означает крушение файловой системы, и, наоборот, гибель последней лишает раздел смысла его существования - надо создавать эту систему заново.

Виртуальная файловая система (VFS) - восприятие Линуксом всех подключенных файловых систем. В программах, с помощью которых мы ищем в Линуксе файлы, видна именно VFS. Чем она отличается от реальных файловых систем? Чтобы это понять, надо уяснить, что такое монтирование.

Монтирование - встраивание той или иной файловой системы в VFS. Если подключена только корневая файловая система (та, что начинается с "/"), то лишь она и отображается. А прочие подключаются так. Создаётся пустой каталог (обычно в каталоге /mnt или /media, но в принципе - где угодно), в него командой mount (вручную или автоматически, при старте Линукса) монтируется соответствующая файловая система. То есть тут раздел, файловая система и каталог как бы сливаются воедино : двух первых не видно, виден лишь каталог, с виду ничем не отличающийся от обычных каталогов, но на самом деле в нём файлы из другого раздела. Таким образом, множество реальных файловых систем могут отображаться как единая виртуальная, так что Линукс (а значит - и пользователь) работает с ними как с единым целым.


Теперь о стержне мультисистемы - системе загрузки.

Примечание. Не буду тут говорить про особые случаи, как то : загрузка с "живого диска", с флэшки, по сети, наличие нескольких загрузочных винчестеров и т. п. Здесь речь о типичном варианте : на компьютере один загрузочный жёсткий диск, на нём - загрузчик и ОС. Также не углубляюсь в множество иных деталей. Это краткий обзор, цель которого - дать начинающему общее представление о работе загрузчиков ОС. Что касается подробной информации по ним (кроме GRUB-2 - ввиду его новизны), то её в Интернете очень много.

После включения питания компьютера запускается BIOS. Она должна найти первичный загрузчик. Это не так сложно, поскольку он всегда находится в MBR, занимая его первые 446 байт (а последние 2 байта MBR должны быть 0x55AA - знак, по которому BIOS определяет, что винчестер - загрузочный).

Итак, первичный загрузчик - тот, который в MBR = тот, который получает управление от BIOS. Он может быть разным - в зависимости от того, кому он, в свою очередь, должен передать управление. Кому именно? Рассмотрим загрузчики, с которыми часто приходится сталкиваться при использовании (чаще - при установке) Линукса.


1. Виндовая цепочка загрузчиков - обычно применяется на компьютерах, где есть только Windows. Первичный загрузчик (стандартный) просматривает таблицу разделов, находит в ней раздел, который помечен как "активный", и передаёт управление находящемуся в его первых секторах внесистемному загрузчику Windows. Он тоже бывает разным, в зависимости от файловой системы активного раздела (впрочем, сейчас это почти всегда ntfs). Он должен найти в корневом каталоге системный загрузчик (NT Loader), который, в отличие от предыдущих, уже является файлом - под названием ntldr, загрузить его в память и передать ему управление. Тот находит в том же корневом каталоге свой конфиг - файл boot.ini примерно такого содержания :

[boot loader]

timeout=10

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows-1" /FASTDETECT

multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows-2" /FASTDETECT


Коротко говоря, это означает, что в первом разделе винчестера (в каталоге WINDOWS) установлена Windows-1 (название произвольное, можно менять), во втором - Windows-2, и у юзера есть 10 секунд на выбор между ними, иначе загрузится та, что по умолчанию - в данном случае Windows-1.

Чтобы увидеть boot.ini, надо включить показ скрытых и системных файлов, а чтобы редактировать его - также снять с него атрибут "только чтение". Впрочем, из Линукса с ним можно делать что угодно и без этого.

Можно запускать и Линукс, скопировав первый сектор его раздела в файл, положив его в тот же корневой каталог и добавив в boot.ini нечто типа C:\Linux-boot="Linux". Но вообще, если взялись за Линукс, то лучше использовать в качестве основного один из его родных загрузчиков.


2. LILO (LInux LOader). Перезаписывает стандартный первичный загрузчик своим, который умеет (по встроенной в него карте размещения - то есть прямо по номерам секторов, в обход файловой системы) находить основной загрузчик, а тот (также при помощи своей карты размещения) запускает ОС по выбору пользователя. Управление - через конфиг /etc/lilo.conf. Он выглядит примерно так :

timeout="100"

default="Linux"


image="/boot/vmlinuz

label="Linux"

root="/dev/sda2"

other="/dev/sda1"

table="/dev/sda"

label="Windows"

Или так, не велика разница:


boot="/dev/disk/by-id/ata-WDC_WD2500AAJB-00J3A0_WD-WCAV28072951"
timeout="100"
default="ALTLinux"

image="/boot/vmlinuz"
    label="ALTLinux"
    initrd="/boot/initrd.img"
    root="UUID=01796b41-b667-465a-9cb7-6e583f040721"
    read-only

image="/boot/vmlinuz"
    label="failsafe"
    initrd="/boot/initrd.img"
    root="UUID=01796b41-b667-465a-9cb7-6e583f040721"
    addappend="failsafe"
    vga="normal"
    read-only

other="/dev/disk/by-id/ata-WDC_WD2500AAJB-00J3A0_WD-WCAV28072951-part5"
    label="Linux1"
    
other="/dev/disk/by-id/ata-WDC_WD2500AAJB-00J3A0_WD-WCAV28072951-part6"
    label="Linux2"



Для первого примера lilo.conf это означает, что у пользователя 10 секунд (таймаут - в десятых долях секунды) на выбор, иначе автоматически загрузится Linux, а именно файл его ядра - /boot/vmlinuz, а корневая файловая система находится в разделе sda2. Выбор пункта "Windows" означает передачу управления внесистемному загрузчику Windows - предполагается, что он в первых секторах раздела sda1. Что делать дальше - он сам знает.

После правки файла /etc/lilo.conf необходимо запустить команду lilo, которая переустановит загрузчик, обновив упомянутые карты размещения ( все это делается под root-ом ).

3. GRUB-1 ( GRand Unified Boot loader; ранее именовался - и часто до сих пор именуется - просто GRUB, а сейчас некоторые его называют GRUB Legacy; я использую термин GRUB-1 как единственный, не вносящий неопределённости).

Также перезаписывает в MBR стандартный первичный загрузчик своим собственным, который умеет (по своей карте размещения) находить полуторный загрузчик, обычно записываемый прямо в сектора, следующие сразу за MBR. Полуторный умеет работать с файловой системой загрузочного раздела, где и находит вторичный (основной) загрузчик - файл stage2. Тот выводит стартовое меню (обычно с красивой картинкой), глядя на свой конфиг menu.lst (или grub.conf), который приблизительно таков :


timeout 30

default 0


title Linux

kernel (hd0,1)/boot/vmlinuz

root=/dev/sda2


title Windows

root (hd0,0)

makeactive

chainloader +1


В данном случае у юзера 30 секунд на выбор, после чего запускается ОС по умолчанию; "default 0" означает первую (в этом списке) ОС, в данном случае Linux (счёт ОСей идёт с нуля). "kernel (hd0,0)" означает, что ядро ОС - в файле /boot/vmlinuz, а тот - в первом разделе первого диска (hd0,0 - в терминологии BIOS, которую использует GRUB; нумерация тоже с нуля); корневая файловая система - в sda1 (то есть в том же разделе - что, кстати, необязательно).

При выборе пункта "Windows" управление передаётся первому сектору (директива "chainloader +1") второго раздела (hd0,1), где должен находиться внесистемный загрузчик Windows.

Поскольку основной загрузчик GRUB ищет ядра операционных систем по именам файлов, а не по номерам секторов, то он использует свой конфиг напрямую, и после правки последнего изменения вступают в силу автоматически.

Установка GRUB-1 в MBR (не путайте с установкой самой программы GRUB-1 в Linux - она производится так же, как инсталляция любой другой программы; тут предполагается, что она уже выполнена) происходит так (из консоли с правами root) :

grub # запуск консоли GRUB.

root (hdO,0) # выбор раздела, в котором уже находится вторичный загрузчик (здесь : sda1 или hda1).

setup (hd0) # выбор жёсткого диска, в начало которого надо записать первичный и полуторный загрузчики (здесь : sda или hda).

4. GRUB-2 (некоторые поспешили переименовать его в просто GRUB, чем добились, по-моему, только путаницы : GRUB-1 хоронить рано) - новая программа, а не новая версия GRUB-1, хотя преемственность очевидна. Имеет много дополнительных возможностей (например, поддерживает кириллицу в стартовом меню).

Работает примерно так же, как GRUB-1, но его конфиг grub.cfg рекомендуется править не напрямую, а с помощью нескольких скриптов. Не буду тут вдаваться в подробности, об этом новом загрузчике вообще надо говорить отдельно, здесь он упомянут для полноты картины.

Когда я создал первую свою мультисистему, состоявшую из Windows 2000 и Windows XP, то схема загрузки была, естественно, виндовая. Как только начал экспериментировать с Линуксом, перешёл на GRUB-1. В последнее время, по причине пристрастия альтовцев к LILO, стал использовать и его, но, в основном, лишь на чужих компьютерах. Недавно начал экспериментировать с GRUB-2; работает хорошо, но почему-то не получается фоновая картинка; научусь её делать - перейду на этот загрузчик.

Сейчас у меня установлены все эти загрузчики. GRUB-1 - основной, GRUB-2 - на другом винчестере (то есть задействуется переключением порядка проверки винчестеров в BIOS); LILO - в разделе одного из Альтов (поставлен для ознакомления, можно обойтись без него); внесистемный и системный загрузчики Windows - в разделе, служащем для запуска ещё оставшихся у меня виндух. Все загрузчики работают надёжно.


Переходим к делу.

Каким образом разместить на винчестере несколько операционных систем?

Поскольку в этой статье я ориентируюсь на типичные ситуации, то здесь, естественно, предполагаю, что Windows — и только она - уже установлена. Тогда на винчестере либо два раздела (в первом - Windows), либо весь диск занят одним разделом. Допустим, у нас второй вариант (первый - по сути то же, но попроще : можно не трогать "диск C" и, соответственно, не переустанавливать винду).

На ноутбуках часто бывает дополнительно ещё служебный раздел (а то и два) Windows; , но сути дела это не меняет (разве что вынуждает нас создавать расширенный раздел, так как первичных может не хватить), и останавливаться на этом я не буду. Также не рассматриваю сжатие раздела Windows (её собственными средствами или установщиком Линукса), чтобы освободить место под Линукс : если такая возможность есть - можно использовать её, а я здесь предполагаю более сложный вариант : требуется полное переразбиение жёсткого диска.

Сохраняем куда-нибудь данные, запускаем какой-либо Linux Live CD, очищаем диск - и начинаем его обустраивать. Вообще-то Linux лучше устанавливать в несколько разделов; но это отдельный вопрос, а здесь не будем усложнять, можно для начала и в один. В таком случае, создаём три раздела (по возможности, все - первичные). Один для Linux, размером гигабайт 10 (предполагается, что винчестер достаточно объёмный; если нет, то этот вопрос надо рассматривать особо), создаём в нём файловую систему ext3. Другой, не меньшего размера, под Windows, форматируем под ntfs. Всё оставшееся место займёт файловое хранилище (о нём ниже).

Сначала всегда устанавливаем Windows (из-за её привычки ломать загрузку других ОС), потом Linux.

Вопрос о файловом хранилище следует рассмотреть подробнее. Незачем разбрасывать ваши файлы по всяким «Моим документам», разным местам в линуксовом домашнем каталоге, рабочим столам (ссылками надо пользоваться) и вообще где попало. Они должны храниться в одном месте и не зависеть от операционных систем.

Итак, создаём на винчестере большой раздел и отводим его под единое файловое хранилище — Склад. Здесь должны храниться все ваши личные файлы — и ничего, кроме них. Но какую файловую систему в нём создать?

Простейший вариант - fat32. Но эта файловая система уже сильно отстала от жизни, на винчестерах лучше её не использовать.

Можно отформатировать Склад под ntfs. Тогда для записи в него из Линукса потребуется специальный драйвер. Но насколько хорошо изучены линуксоидами внутренности засекреченной файловой системы Windows NT? Это сложный вопрос. Многие говорят, что драйвер ntfs-3g всегда обеспечивает полностью безопасную запись в ntfs из Линукса; другие считают, что при определённых условиях возможны проблемы; я не берусь судить о том, кто тут прав. И ещё аргумент против ntfs : поскольку речь о переходе с Windows на Линукс, то, понятно, в итоге должен остаться только Линукс - со Складом, отформатированным под линуксовую файловую систему; так лучше пусть он будет таков изначально, не придётся потом переформатировать.

Я считаю, что лучше всего подходит для общего Склада наиболее популярная линуксовая файловая система ext3 (имеются и другие; но я беру типичный вариант). Правда, Windows сама по себе её в упор не видит. Но есть, к примеру, драйвер Ext2-Fsd, установка которого сразу открывает винде глаза на ext3 и обеспечивает безопасную запись туда. При подключении Склада через упомянутый драйвер надо выбрать кодировку имён файлов; она должна совпадать с системной кодировкой вашего Линукса (обычно это utf8) - иначе имена файлов, созданных в одной ОС, будут неверно отображаться в другой.

Эту файловую систему Склада желательно создавать консольной программой mke2fs, чтобы можно было подправить некоторые параметры. Так, по умолчанию создаётся избыточное количество инод (то есть подготавливаются места для такого числа файлов, какого у вас просто быть не может), что забивает раздел лишней служебной информацией, влияющей как на объём полезного пространства в нём, так и на быстродействие. Прикиньте, сколько файлов может скопиться в Складе в самом предельном случае, увеличьте это число, скажем, вдвое (для полной гарантии) и укажите такое число инод. Не удивляйтесь, если оно окажется в разы, а то и в десятки раз меньше принятого по умолчанию. Пространство, по умолчанию зарезервированное для использования только администратором (5 процентов), тоже чрезмерно для раздела, предназначенного только для хранения файлов. Можно с помощью mke2fs оптимизировать и другие параметры.

Если этот компьютер всё время у вас на контроле, то беспокоиться не о чем. Если же его владелец не всегда может обратиться к вам за помощью, то нужно предусмотреть такой казус : потребовалась переустановка винды, её выполняет некто, в Линуксе не смыслящий, в итоге загружается только винда (поскольку линуксовый загрузчик в MBR затёрт виндовым), а из неё на месте Склада виден лишь "неизвестный раздел". Решить вопрос можно, по меньшей мере, четырьмя способами :

1. Всё же использовать для Склада ntfs.

2. Сделать Склад из двух разделов. Один - ntfs, предназначенный для хранения файлов, которые владельцу компьютера постоянно нужны. Другой - ext3, открытый для чтения и записи из обоих систем; сюда складывать то, без чего можно какое-то время обойтись. После переустановки винды недоступным окажется только второй.

3. Склад - один раздел под ext3, а вышеупомянутые необходимые файлы хранить в разделе с Windows (и это надо иметь в виду при выборе его объёма).

4. Склад - один раздел под ext3, и все файлы хранить в нём, а установочный комплект Ext2-Fsd с инструкцией по применению положить в надёжное место (то есть туда, где он будет доступен после переустановки винды). Тогда превратить "неизвестный раздел" обратно в работоспособный Склад сможет даже тот, кто о Линуксе и не слыхал. Мне больше нравится именно этот вариант.

Что касается совместного использования Склада разными Линуксами, то здесь сложность иного рода : права доступа. Желательно, чтобы вы могли пользоваться Складом без ограничений из всех Линуксов, а без вашего разрешения никто больше не мог подступиться к нему. Правда, последнее при наличии на компьютере Windows и возможности бесконтрольного запуска LiveCD нельзя гарантировать, но от того и другого ведь можно избавиться, и к тому же это статья не о защите от злоумышленников. Я рассматриваю более обычный для дома вариант : на компьютере несколько Линуксов, в которых, возможно, по несколько юзеров (например, ещё дети); вам нужно, чтобы распоряжаться Складом могли только вы. Для чего следует создать в каждом из Линуксов по юзеру с одинаковым именем (это просто для удобства) и с одинаковым числовым идентификатором (UID), да и идентификатор его основной группы (GID) тоже должен быть одинаков во всех Линуксах. Получается этакий многоединый юзер, живущий во всех ваших Линуксах одновременно. Все права на Склад следует передать именно ему. Файловое хранилище желательно монтировать в /home/<username>/Склад (или назовите, как больше нравится) каждого из Линуксов.

Если хорошо настроить мультисистему, то ею легко может пользоваться любой. Это многоглавое чудище непонятно и страшно лишь для тех, кто с ним ещё не познакомился. Оседлайте его — и множество проблем легко разрешатся. Я, например, въехал в Линукс именно на таком Змее Горыныче; что делал бы без него — не представляю. И на попадающих мне в руки компьютерах тоже прежде всего строю мультисистему, так что многие мои знакомые тоже катаются на Горынычах. Кто-то из них едет непонятно куда, а кто-то — в Линукс. А если оглядеть всю Россию, то увидим целое войско пингвинов и новичков-пингвинчиков на Змеях Горынычах. А надо, чтобы их стало во много раз больше. Так что мультисистема сейчас незаменима. Поэтому надо уметь её настраивать.

Давайте обмениваться опытом общения со Змеем Горынычем!
Обсудить эту статью можно здесь:

http://forum.russ2.com/index.php?showtopic=2145

И.В.Корнилов 19.03.2010
< [ на главную ]


Hosted by uCoz