Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Администрирование систем Linux. Разделы жестких дисков

Оригинал: Disk partitions
Автор: Paul Cobbaut
Дата публикации: 12 марта 2015 г.
Перевод: A. Панин
Дата перевода: 29 марта 2015 г.

Глава 5. Разделы жестких дисков

В данной главе будет продолжено рассмотрение приемов работы с жесткими дисками, которые были подготовлены нами в предыдущей главе. На этот раз мы займемся созданием разделов на этих жестких дисках.

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

5.1. Информация о разделах жестких дисков

5.1.1. Первичные, расширенные и логические разделы

Для корректного функционирования дистрибутива Linux вам потребуется создать один или несколько разделов (partitions) на жестком диске. Далее будут приведены подробные пояснения относительно создания и использования разделов жестких дисков.

Геометрия раздела (geometry), а также его размер обычно описываются с помощью номеров начального и конечного цилиндра (а иногда начального и конечного сектора). Разделы могут быть первичными (primary, максимум четыре), расширенными (extended, максимум один) или логическими (logical, размещаются внутри расширенного раздела). Каждый раздел имеет поле типа, которое содержит соответствующий код. Данный код позволяет идентифицировать операционную систему компьютера или файловую систему раздела.

Таблица 5.1. Первичные, расширенные и логические разделы

Тип раздела Порядковый номер
Первичный (максимум 4) 1-4
Расширенный (максимум 1) 1-4
Логический 5-

5.1.2. Имена файлов устройств, соответствующих разделам

Ранее мы говорили о том, что имена файлов устройств жестких дисков соответствуют шаблону /dev/hdx или /dev/sdx, причем x является буквенным символом, зависящим от аппаратной конфигурации. После этого символа должен следовать порядковый номер раздела, причем отсчет должен начинаться с числа 1. Следовательно, для обозначения четырех (возможных) первичных разделов могут использоваться числа от 1 до 4. Отсчет порядковых номеров логических разделов всегда начинается с 5. Таким образом, файл устройства /dev/hda2 представляет второй раздел на первом жестком диске с интерфейсом ATA, а файл /dev/hdb5 - первый логический раздел на втором жестком диске с интерфейсом ATA. Аналогичным образом происходит и присваивание имен и файлам устройств, соответствующих жестким дискам с интерфейсом SCSI. Например, файл устройства /dev/sdb3 соответствует третьему разделу второго жесткого диска с интерфейсом SCSI.

Таблица 5.2. Имена файлов устройств, соответствующих разделам

Раздел Устройство
/dev/hda1 Первый первичный раздел на устройстве, представленном файлом /dev/hda
/dev/hda2 Второй первичный раздел или расширенный раздел на устройстве, представленном файлом /dev/hda
/dev/sda5 Первый логический раздел на устройстве, представленном файлом /dev/sda
/dev/sdb6 Второй логический раздел на устройстве, представленном файлом /dev/sdb

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

Cхематичные изображения двух жестких дисков с разделами

5.2. Обнаружение разделов жестких дисков

5.2.1. Команда fdisk -l

Рассмотрев приведенный в примере ниже вывод команды fdisk -l, вы можете обнаружить, что на жестком диске, представленном файлом устройства /dev/sdb, существуют два раздела. Первый раздел размещается до 31 цилиндра и является разделом подкачки Linux. Второй раздел имеет гораздо больший размер.

root@laika:~# fdisk -l /dev/sdb

Disk /dev/sdb: 100.0 GB, 100030242816 bytes
255 heads, 63 sectors/track, 12161 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot    Start      End     Blocks   Id  System
/dev/sdb1             1       31     248976   82  Linux swap / Solaris
/dev/sdb2            32    12161   97434225   83  Linux
root@laika:~# 

5.2.2. Файл /proc/partitions

Файл /proc/partitions содержит таблицу с основными и дополнительными номерами файлов устройств, соответствующих разделам жестких дисков, количеством блоков в рамках этих разделов и именами файлов устройств, расположенных в директории /dev. Изучив содержимое файла /proc/devices, убедитесь в том, что в данном списке содержатся основные номера, соответствующие типу каждого из устройств.

paul@RHELv4u4:~$ cat /proc/partitions 
major minor  #blocks  name

   3     0     524288 hda
   3    64     734003 hdb
   8     0    8388608 sda
   8     1     104391 sda1
   8     2    8281507 sda2
   8    16    1048576 sdb
   8    32    1048576 sdc
   8    48    1048576 sdd
 253     0    7176192 dm-0
 253     1    1048576 dm-1

Основной номер устройства соответствует типу устройства (или драйверу) и может быть обнаружен в файле /proc/devices. В данном случае основной номер устройства 3 соответствует устройству с интерфейсом IDE, а 8 - устройству с интерфейсом SATA. Основной номер устройства описывает драйвер, который должен использоваться для взаимодействия с данным устройством.

Дополнительный номер устройства является уникальным идентификатором экземпляра устройства данного типа. Файл devices.txt в дереве исходного кода ядра Linux содержит полный список основных и дополнительных номеров устройств.

5.2.3. Parted и другие утилиты

Вас могут заинтересовать такие альтернативные утилите fdisk инструменты, как parted, cfdisk, sfdisk и gparted. При этом для осуществления манипуляций с разделами жестких дисков в рамках данного курса будет использоваться главным образом утилита fdisk.

Утилита parted рекомендуется разработчиками некоторых дистрибутивов Linux для работы с дисками, содержащими таблицы разделов формата GPT, а не MBR.

Ниже приведен пример использования утилиты parted при работе с дистрибутивом CentOS.

[root@centos65 ~]# rpm -q parted
parted-2.1-21.el6.x86_64
[root@centos65 ~]# parted /dev/sda
GNU Parted 2.1
Используется /dev/sda
Добро пожаловать в GNU Parted! Наберите 'help' для просмотра списка команд.
(parted) print
Модель: ATA VBOX HARDDISK (scsi)
Диск /dev/sda: 42.9GB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos

Номер  Начало  Конец   Размер  Тип      Файловая система  Флаги
1      1049kB  525MB   524MB   primary  ext4              загрузочный
2      525MB   42.9GB  42.4GB  primary  lvm

(parted)

5.3. Создание разделов на новых дисках

В примере ниже будет рассматриваться ситуация покупки нового жесткого диска для нашей системы. После корректного подключения нового аппаратного обеспечения вы можете использовать утилиты fdisk и parted для создания необходимых разделов. В данном примере используется утилита fdisk, но утилита parted в подобной ситуации также является вполне подходящим инструментом.

5.3.1. Обнаружение жесткого диска

В первую очередь мы должны удостовериться в том, что ядро Linux имеет доступ к новому жесткому диску с помощью команды fdisk -l. Да, новый жесткий диск представлен файлом устройства /dev/sdb, но на нем пока не создано каких-либо разделов.

root@RHELv4u2:~# fdisk -l

Disk /dev/sda: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start      End      Blocks   Id  System
/dev/sda1   *       1        13      104391   83  Linux
/dev/sda2          14      1566   12474472+   8e  Linux LVM

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table

5.3.2. Открытие дискового устройства с помощью утилиты fdisk

После этого мы можем приступить к созданию раздела на жестком диске, представленном файлом устройства /dev/sdb, с помощью утилиты fdisk. Для начала мы должны передать путь к файлу устройства /devsdb в качестве параметра утилиты fdisk. Следует проявить крайнюю осторожность и убедиться еще раз в том, что вы создаете раздел именно на новом диске!!

root@RHELv4u2:~# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI...
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected...

5.3.3. Пустая таблица разделов

Работая с инструментом fdisk, вы можете выполнить команду p для того, чтобы ознакомиться с текущей таблицей разделов диска.

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System

5.3.4. Создание нового раздела

На данный момент на диске не существует разделов, поэтому мы должны выполнить команду n для создания нового раздела. Мы будем вводить символ p для создания первичного раздела и число 1 в качестве номера раздела, а также число 1 в качестве номера начального цилиндра и число 14 в качестве номера конечного цилиндра.

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-130, default 130): 14

Теперь мы снова можем выполнить команду p для проверки внесенных нами изменений, причем эти изменения еще не записаны на диск, поэтому мы все еще можем отменить эту операцию! Так как внесенные изменения кажутся нам корректными, мы можем выполнить команду w для записи изменений на диск с последующим завершением работы утилиты fdisk.

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              1           14      112423+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
root@RHELv4u2:~#

5.3.5. Вывод информации о новом разделе

Давайте снова проверим с помощью команды fdisk -l, совпадает ли реальность с нашими ожиданиями. Разумеется, в примере ниже приводится информация о разделе на диске, представленном файлом устройства /dev/sdb.

root@RHELv4u2:~# fdisk -l

Disk /dev/sda: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start        End      Blocks   Id  System
/dev/sda1   *        1         13      104391   83  Linux
/dev/sda2           14       1566   12474472+   8e  Linux LVM

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start        End      Blocks   Id  System
/dev/sdb1               1         14      112423+  83  Linux
root@RHELv4u2:~#

5.4. О таблице разделов

5.4.1. Основная загрузочная запись

Информация из таблицы разделов (об основных и расширенных разделах) записывается в основную загрузочную запись (Master Boot Record или MBR). Вы можете использовать утилиту dd для копирования данных из основной загрузочной записи в файл.

В данном примере осуществляется копирование основной загрузочной записи с первого жесткого диска с интерфейсом SCSI.

dd if=/dev/sda of=/SCSIdisk.mbr bs=512 count=1

Этот же инструмент также может использоваться для удаления всей информации о разделах на диске. В данном примере область основной загрузочной записи заполняется нулевыми байтами.

dd if=/dev/zero of=/dev/sda bs=512 count=1

Или удаления всей информации из раздела на жестком диске или со всего диска.

dd if=/dev/zero of=/dev/sda

5.4.2. Утилита partprobe

Не забывайте о том, что после восстановления основной загрузочной записи с помощью утилиты dd вам придется сообщить ядру ОС о необходимости повторного чтения таблицы разделов жесткого диска с помощью утилиты partprobe. После запуска утилиты partprobe разделы жесткого диска могут снова использоваться.

[root@RHEL5 ~]# partprobe 
[root@RHEL5 ~]#

5.4.3. Логические разделы

Таблица разделов жесткого диска не содержит информации о логических разделах. Следовательно, резервная копия основной загрузочной записи, созданная с помощью утилиты dd, будет содержать информацию исключительно о первичных и расширенных разделах жесткого диска. Для создания резервной копии основной загрузочной записи с информацией о логических разделах жесткого диска вы можете воспользоваться утилитой sfdisk.

В данном примере показана методика создания резервной копии таблицы всех разделов жесткого диска, включая логические, с записью данных в файл.

sfdisk -d /dev/sda > parttable.sda.sfdisk

А в данном примере осуществляется копирование основной загрузочной записи и информации обо всех логических разделах с устройства, представленного файлом /dev/sda, на устройство, представленное файлом /dev/sdb.

sfdisk -d /dev/sda | sfdisk /dev/sdb

5.5. Практическое задание: разделы жестких дисков

1. Используйте команду fdisk -l для вывода списка существующих разделов жестких дисков с информацией об их размерах.

2. Используйте команду df -h для вывода списка существующих разделов жестких дисков с информацией об их размерах.

3. Сравните вывод утилиты fdisk с выводом утилиты df.

4. Создайте основной раздел размером в 200 МБ на жестком диске малого объема.

5. Создайте основной раздел размером в 400 МБ и два логических раздела размером в 300 МБ каждый на жестком диске большого объема.

6. Используйте команды df -h и fdisk -l для проверки корректности выполненных вами действий.

7. Снова сравните вывод утилиты fdisk с выводом утилиты df. Присутствует ли в выводах обоих утилит информация о новых разделах?

8. С помощью утилиты dd создайте резервную копию основной загрузочной записи, которая содержит информацию о вашем основном разделе размером в 200 МБ.

9. Создайте резервную копию таблицы разделов, содержащей информацию о вашем первичном разделе размером в 400 МБ и о логических разделах размером в 300 МБ каждый. Убедитесь в том, что информация о логических разделах добавлена в файл резервной копии таблицы разделов.

10. (дополнительное задание). Удалите информацию обо всех ваших разделах с помощью утилиты fdisk. После этого восстановите ее из файлов резервных копий.

5.6. Корректная процедура выполнения практического задания: разделы жестких дисков

1. Используйте команду fdisk -l для вывода списка существующих разделов жестких дисков с информацией об их размерах.

С использованием учетной записи пользователя root: # fdisk -l

2. Используйте команду df -h для вывода списка существующих разделов жестких дисков с информацией об их размерах.

df -h

3. Сравните вывод утилиты fdisk с выводом утилиты df.

Информация о некоторых разделах жестких дисков будет присутствовать в выводах обоих утилит (возможно, одним из таких разделов будет раздел, представленный файлом устройства /dev/sda1 или /dev/hda1).

4. Создайте основной раздел размером в 200 МБ на жестком диске малого объема.

Выберите один из добавленных ранее дисков (в данном примере используется диск, представленный файлом устройства /dev/sdc).

root@rhel53 ~# fdisk /dev/sdc
		...
		Command (m for help): n
		Command action
		   e extended
		   p primary partition (1-4)
		p
		Partition number (1-4): 1
		First cylinder (1-261, default 1): 1
		Last cylinder or +size or +sizeM or +sizeK (1-261, default 261): +200m
		Command (m for help): w
		The partition table has been altered!
		Calling ioctl() to re-read partition table.
		Syncing disks.
		

5. Создайте основной раздел размером в 400 МБ и два логических раздела размером в 300 МБ каждый на жестком диске большого объема.

Выберите один из добавленных ранее дисков (в данном примере используется диск, представленный файлом устройства /dev/sdb).

fdisk /dev/sdb

при работе с утилитой fdisk : n p 1 +400m enter --- n e 2 enter enter --- n l +300m (дважды)

6. Используйте команды df -h и fdisk -l для проверки корректности выполненных вами действий.

fdisk -l ; df -h

7. Снова сравните вывод утилиты fdisk с выводом утилиты df. Присутствует ли в выводах обоих утилит информация о новых разделах?

Созданные разделы обнаруживаются с помощью утилиты fdisk.

При этом эти же разделы не обнаруживаются с помощью утилиты df.

8. С помощью утилиты dd создайте резервную копию основной загрузочной записи, которая содержит информацию о вашем основном разделе размером в 200 МБ.

dd if=/dev/sdc of=bootsector.sdc.dd count=1 bs=512

9. Создайте резервную копию таблицы разделов, содержащую информацию о вашем первичном разделе размером в 400 МБ и о логических разделах размером в 300 МБ каждый. Убедитесь в том, что информация о логических разделах добавлена в файл резервной копии таблицы разделов.

sfdisk -d /dev/sdb > parttable.sdb.sfdisk

10 (дополнительное задание). Удалите информацию обо всех ваших разделах с помощью утилиты fdisk. После этого восстановите ее из файлов резервных копий.


Предыдущий раздел: Оглавление Следующий раздел:
Глава 4. Дисковые устройства   Глава 6. Файловые системы