Чтобы с диска можно было загружаться и хранить на нем программы и данные, он должен быть соответствующим образом подготовлен.
В дисковых операционных системах (CP/M, DOS, OS/2, Windows) диски и разделы на дисках именуются буквами (C: D: E:), файлы отсчитывают свой путь от буквы диска (C:\Windows\System32\Drivers\etc\hosts, D:\backup). В UNIX-подобных системах это не так. Есть виртуальная файловая система, к которой подключаются дисковые устройства, в одной иерархии. Скажем / — корень — это точка подключения (монтирования) виртуальной файловой системы, к ней подключается дисковый раздел, используемый файловой системой. CDROM здесь будет уже не E:, а /cdrom или /mnt/cdrom. Таким образом, файл, который в Windows выглядит как E:\autorun.inf, в Linux будет выглядеть как /cdrom/autorun.inf
Но /cdrom — это не имя устройства, равно как и E: — не имя и не тип устройства. Если в Windows E: может быть как CD-диском, так и разделом на жестком диске, так и в Linux CDROM может быть подключен (смонтирован) в /cdrom, /mnt/cdrom или /mnt/disk. Более того, в /mnt/disk может быть подключен (смонтирован) не обязательно CDROM, но и флеш-диск, и раздел на жестком диске, или даже сетевое хранилище.
В UNIX-подобных архитектурах имеется концепция, согласно которой все есть файл.
Впрочем, подобная особенность была частично реализована и в DOS. В DOS имелись особые файлы устройств, не привязанные к файловой системе. Так как нельзя было создать файл с таким именем, они присутствовали в любой директории — con nul prn. Копирование файла в con выводило его на экран, в nul — не делало ничего, в prn — выводило на принтер.
Итак, в DOS и WINDOWS есть специальные файлы устройств, которые якобы присутствуют в любой директории. Аналогичные устройства есть и в Linux. Но чтобы не замусоривать другие директории, для устройств в Linux есть специальная директория /dev.
Там аналогом con будет файл /dev/tty, аналогом nul — файл /dev/null, аналогом com1 — /dev/ttyS1.
Эта аналогия неспроста. Файлы устройств, как и многие утилиты для DOS, Билл Гейтс подглядел как раз в UNIX.
Все устройства, с которыми предполагается работа, в Linux (и других UNIX-подобных системах) находятся в директории /dev, в том числе и дисковые устройства. Например, /dev/hda, /dev/hda1, /dev/hdb, /dev/sda, /dev/sda1.
Кстати, в Windows тоже присутствует скрытый, не привязанный к диску, раздел \Devices, в котором тоже присутствуют аналогичные дисковые устройства. Во внутреннем представлении путь к файлу может выглядеть так \Devices\Harddisk0\Partition1\Windows\system32\imageres.dll.
Итак, если имеется диск, его можно задействовать под систему полностью. В DOS или Windows он будет выглядеть как диск C:
Что делать, если мы хотим установить две операционные системы? Даже две Windows себя не будут комфортно чувствовать в одном C:, что уж говорить о Windows и Linux, которые даже файловые системы используют разные. В Windows это, как правило, NTFS, в Linux, как правило, ext4.
Таким образом, надо сделать на одном диске два раздела. Если оба будут использоваться в Windows, на одном физическом диске будут присутствовать C: и D:. Если использовать Linux, Windows будет видеть файлы в разделе C: и все, а Linux — файлы в своем разделе, смонтированные в корень /.
Каким образом осуществляется разбиение диска на разделы?
Все зависит от того, какая таблица разделов используется: GPT или содержащая MBR. Ранее все диски использовали MBR, сейчас все больше GPT.
Диск с MBR — Main Boot Record (главная загрузочная запись) содержит исполняемый код, необходимый для передачи управления, загрузчик и таблицу разделов (partition table). Может содержать только 4 первичных (primary) раздела, а при необходимости большего количества разделов вместо одного из первичных можно создать расширенный раздел (extended partition). Такой раздел будет содержать внутри себя еще несколько (до 16) разделов, называемых логическими (logical). Есть определенные ограничения, связанные с созданием разделов и установленными на нем ОС. Например, Windows необходимо обязательно устанавливать в первичный раздел, помеченный как активный (загрузочный). Для разделов GNU / Linux таких ограничений сейчас нет.
MBR может работать только с дисками емкостью до 2 Тб, для больших дисков следует использовать GPT. GPT — более современный стандарт, который, кроме того, можно использовать и с дисками меньшей емкости.
Диски с GPT (GUID Partition Table) в отличие от MBR, больше не содержат загружаемый код в самом начале, эти функции отнесены к UEFI. Более того, GPT является частью стандарта UEFI. Блок MBR все равно присутствует в начале для совместимости и защиты от повреждения утилитами, не умеющими работать с GPT, но понимающими MBR. В совместимом MBR указан один раздел, охватывающий весь диск. Это сделано для предотвращения ошибочной разметки и форматирования диска программами, не распознающими GPT.
GPT не накладывает ограничений на разделы, поэтому понятия расширенных и первичных разделов не используются.
fdisk не будет работать с gpt, вместо него следует использовать gdisk. Можно использовать и gparted, но надо учитывать, что parted и gparted не могут увеличить размер раздела, если в его конец добавить неразмеченные блоки для расширения.
Если в Windows разделы именуются С:, D:, E: и т. д., в Linux диски именуются в формате /dev/hdX (для ATA) или /dev/sdX (для SATA), где X — буква. Но если в Windows принята нумерация с буквы C, так как A и B использовались для дисковода, здесь диски нумеруются с А. Для дисковода имеется устройство /dev/fd0. Первый HDD-диск будет иметь наименование /dev/sda, второй — /dev/sdb, третий — /dev/sdc.
Разделы обозначаются цифрами. Если два HDD будут в Windows иметь разделы с именами C:, D:, E:, вне зависимости от их местоположения, в Linux будут разделы /dev/sda1, /dev/sda2, /dev/sdb1, /dev/sdb2 и т. д. При этом имена с /dev/sda1 по /dev/sda4 предназначены для первичных разделов, логические разделы именуются /dev/sda5, /dev/sda6 и т. д.
Это не единственный подход именования в UNIX-подобных системах. Например, /dev/da0s1a, dev/da1s1b и т. д.
В загрузчике GRUB применяется свое именование разделов. Первый раздел /dev/sda1 будет иметь вид (hd0,msdos1), /dev/sda5 будет иметь вид (hd0,msdos5), /dev/sdb1 — (hd1, msdos1).ример разметки (система используется в Windows, но даны наименования разделов и для Linux):
Пример разметки для Windows и Linux
После разметки разделы должны быть отформатированы. Форматирование — процесс создания в разделе файловой системы.
В MSDOS присутствуют файловые системы FAT32, NTFS. Чем NTFS примечательна, кроме того, что она используется в Windows NT (2000, XP и т. д.)? Это два характерных примера различных по идеологии файловых систем. FAT — нежурналируемая файловая система. Если в процессе записи файла будет отключено питание, на диске появятся повреждения файловой структуры. Именно поэтому при выключении Windows 95 или Windows 98 без стандартного нажатия в интерфейсе «Выключение компьютера» и появления оранжевой надписи «Теперь компьютер можно выключать» при следующей загрузке запускалась программа chkdsk. И, наверное, вы обратили внимание, что при преобразовании файловой системы в NTFS такого явления уже не возникало. Это осуществляется благодаря журналу. В файловых системах журналируемого типа действия осуществляются транзакциями. Транзакция — набор операций, которые выполняются как одно целое, и не могут быть выполнены частично. Если часть операций не была выполнена, действия откатываются к началу транзакции. Для этого ведется журнал (journal). Журнал — часть файловой системы, он не доступен пользователю без специальных низкоуровневых средств.
В GNU / Linux тоже присутствуют нежурналируемые и журналируемые системы. Например, ext2 — нежурналируемая файловая система, является эталоном по быстродействию. Иногда ее используют, например, для загрузчика GRUB при использовании LVM, так как GRUB не умеет работать с LVM, иногда — для организации особого рода разделов для временных файлов. Впрочем, для этого в Linux в большинстве своем хватает tmpfs+swap, использующих виртуальную память и раздел подкачки на диске. В большинстве в Linux используется файловая система ext4, журналируемая и надежная.
В Linux может использоваться и exfat (обычно используется для флешек), но тогда атрибуты файлов Linux не будут сохраняться. Файловые системы отличаются и набором хранимых атрибутов. В Linux используются наборы атрибутов, разграничивающие файлы по владельцу, группе, и дающие права на чтение, запись, выполнение владельцу, группе и всем остальным. В FAT таких атрибутов нет. Более того, в Linux возможность выполнения файла определяется не расширением (хотя расширения могут использоваться прикладными программами), в отличие от DOS/Windows исполняемость определяется атрибутом.
В отличие от Windows, в GNU / Linux для подкачки, как правило, используется не файл, а отдельный раздел. Он не требует форматирования и монтирования (хотя есть операции и для работы со свопом), и создается перед установкой системы. Раздел подкачки служит для выгрузки данных и приложений из оперативной памяти, которые в данный момент не используются, для эффективного управления памятью и производительностью компьютера.
Несколько слов о LVM.
Если использовать традиционные разделы, их невозможно переразбить без остановки системы, заменить, начать работать с двумя дисками как с одним разделом. Но можно смонтировать разные разделы и диски в одну виртуальную файловую систему. Здесь могут быть /home, /bin, /usr/bin и т. д. — все на разных дисках (когда-то так и было). Но это не позволит, например, увеличить в два раза дисковое пространство под /home без остановки системы и замены диска/раздела.
LVM (Logical Volume Manager) позволяет решить эту проблему. LVM добавляет несколько промежуточных слоев абстракции, позволяя объединять физические диски или разделы (физические тома) в группы физических томов, которые можно распределять на логические тома, динамически используя дисковое пространство всей группы физических томов как одно целое. И уже логические тома можно использовать в GNU / Linux так, как если бы это был физический диск или раздел.
Загрузчик GRUB не умеет работать с LVM, поэтому обычно оставляют один раздел (например, /dev/sda1) не включенным в группу физических томов. Его размер определяют исходя из размера содержимого /boot, создают загрузчик, форматируют в ext2, записывают GRUB, образ ядра, образ initrd. Этот раздел монтируется в директорию /boot.