10.1 Управление разделами диска (Managing Disk Partitions)¶
Совет к экзамену
Будьте готовы к тому, что на экзамене LPIC-1/Linux+ эта тема будет проверяться очень подробно. В зависимости от варианта экзамена вы увидите 15–20 процентов вопросов именно по материалу этой главы.
При первоначальной установке Linux-системы вы определяете ряд разделов на жёстких дисках для размещения файловой системы. В зависимости от выбранного дистрибутива для этого, скорее всего, использовалась какая-то графическая или управляемая меню утилита разметки.
После того как система некоторое время проработала, вероятно, потребуется добавить дополнительное дисковое пространство. При установке нового жёсткого диска необходимо разметить его и создать на нём файловую систему. В большинстве дистрибутивов для этого предусмотрена графическая утилита разметки.
Эти утилиты работают отлично, однако для сдачи экзамена LPIC-1/Linux+ вы обязаны уметь управлять разделами из командной строки. В этой части главы вы узнаете следующее:
- Управление разделами диска в формате основной загрузочной записи (MBR)
- Управление разделами в формате глобально уникальных идентификаторов (GUID)
- Создание файловой системы
- Монтирование раздела
- Общие сведения об LVM
- Обслуживание файловых систем Linux
Начнём с изучения утилиты fdisk.
Управление разделами диска MBR (Managing Master Boot Record (MBR) Disk Partitions)¶
Формат разделов основной загрузочной записи (master boot record, MBR) существует с начала 1980-х годов и до сих пор применяется во многих Linux-системах. Поэтому необходимо уметь работать с разделами этого типа.
Утилита fdisk используется из командной строки для просмотра, создания и удаления MBR-разделов из командного интерпретатора. Чтобы создать новый раздел с помощью fdisk, сначала откройте сеанс терминала, затем переключитесь на учётную запись суперпользователя root, введя su – и пароль root.
В командной строке введите fdisk устройство. Например, чтобы управлять разделами на первом жёстком диске системы, введите fdisk /dev/sda. После этого потребуется ввести команду, указывающую fdisk, что именно нужно сделать с диском.
Совет
Введите m в командной строке fdisk, чтобы отобразить список всех доступных команд.
Например, чтобы просмотреть список разделов на диске, введите p. Это показано в следующем примере:
openSUSE:~ # fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sda: 17.2 GB, 17179869184 bytes, 33554432 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0004eb7c
Device Boot Start End Blocks Id System
/dev/sda1 2048 4208639 2103296 82 Linux swap / Solaris
/dev/sda2 * 4208640 17061887 6426624 83 Linux
/dev/sda3 17061888 33554431 8246272 83 Linux
Command (m for help):
Примечание
Также можно отобразить таблицу разделов для указанного жёсткого диска, введя fdisk устройство –l в командной строке. Вывод аналогичен показанному здесь.
В следующем примере в систему установлен новый жёсткий диск (/dev/sdb), и fdisk используется для создания на нём раздела:
openSUSE:~ # fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x8239827b.
Command (m for help):
Обратите внимание: поскольку диск новый, его необходимо инициализировать, присвоив ему метку диска. Утилита fdisk делает это автоматически при запуске программы. Однако изменение не будет применено до записи данных на диск.
После запуска fdisk появляется приглашение Command:, в котором можно вводить команды утилиты. Первое, что рекомендуется сделать, — ввести m для просмотра справки по fdisk. При этом отобразится список команд, доступных для выполнения действий с fdisk, как показано в примере:
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help):
Внимание
Введя d, можно удалить существующий раздел. Будьте очень осторожны с этим действием. Все данные на этом разделе будут потеряны! После сохранения изменений на диске операция необратима. Отменить несохранённые изменения, сделанные в fdisk, можно, введя q. С fdisk команда q — ваш лучший друг!
Перед созданием раздела следует ввести p для просмотра существующих разделов на диске. Это поможет определить, достаточно ли свободного места и, если да, какой номер нужно присвоить новому разделу.
Чтобы создать новый раздел, введите n. Затем можно указать, нужен ли основной (primary) или расширенный (extended) раздел диска. На любом жёстком диске в системе можно определить до четырёх разделов в его таблице разделов. Это могут быть как основные, так и расширенные разделы. Если планируется создать четыре раздела или меньше, можно просто использовать основные разделы.
Однако если требуется создать более четырёх разделов, необходимо создать хотя бы один расширенный раздел. Расширенные разделы очень удобны: внутри одного расширенного раздела можно создать множество логических разделов. Это позволяет обойти ограничение в четыре раздела. Общепринятая практика — сначала создать основные разделы, затем создать расширенный раздел из оставшегося пространства на диске и разместить внутри него логические разделы.
Чтобы создать основной раздел, при запросе введите p. Чтобы создать расширенный раздел, введите e. После этого будет предложено указать номер раздела, как показано в примере:
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
Необходимо указать следующий доступный номер раздела для создаваемого раздела. Иными словами, если на диске уже два раздела, нужно ввести 3. В приведённом выше примере на диске нет ни одного раздела, поэтому введено 1 для создания первого основного раздела. Если попытаться ввести номер раздела, который уже занят существующим разделом, утилита fdisk сообщит об ошибке!
После этого необходимо указать размер раздела — задав начальный и конечный цилиндры. Сначала указывается цилиндр, с которого должен начинаться раздел. По умолчанию fdisk предлагает следующий доступный цилиндр: если разделов на диске нет, это будет цилиндр 1; если разделы уже есть, будет указан первый неиспользованный цилиндр. После указания начального цилиндра есть несколько вариантов задания общего размера раздела:
Partition number (1-4, default 1): 1
First sector (2048-2097151, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151):
2097151
Partition 1 of type Linux and of size 1023 MiB is set
Можно:
- Ввести номер последнего цилиндра, который должен быть включён в раздел.
- Задать размер раздела в гигабайтах, введя
размерG. Например, чтобы создать раздел размером 800 ГБ, нужно ввести800G.
После указания размера следует проверить новый раздел, введя p. Будут отображены все разделы диска, как показано в следующем примере:
Command (m for help): p
Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xd489eb71
Device Boot Start End Blocks Id System
/dev/sdb1 2048 2097151 1047552 83 Linux
Command (m for help):
Важно отметить, что на данном этапе раздел ещё не записан на диск. Все изменения сохраняются в памяти до фиксации на диске. Это позволяет скорректировать разметку перед окончательным применением изменений.
Однако перед фиксацией раздела на диске может потребоваться изменить тип раздела. Обратите внимание, что в примере выше создаваемый раздел по умолчанию является стандартным разделом Linux. Как правило, этого достаточно. Однако если создаётся раздел подкачки, потребуется указать другой тип. Для этого нужно ввести t и затем идентификатор нужного типа раздела. Если идентификатор типа неизвестен, можно ввести l (строчную букву «эль»), чтобы отобразить список всех допустимых типов разделов и их идентификаторов:
Command (m for help): l
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16)
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Например, идентификатор раздела подкачки Linux равен 82. Чтобы изменить тип раздела, нужно ввести t и указать идентификатор 82 для преобразования раздела в раздел подкачки.
Также можно удалять разделы с помощью fdisk. Для этого введите d в командной строке, затем укажите номер раздела, который нужно удалить. Помните: все данные на этом разделе будут потеряны после сохранения изменений на диске!
После того как разметка раздела готова, можно зафиксировать её на диске. Если предложенная схема не устраивает, всегда можно ввести q для выхода без применения изменений. Если же всё устраивает, введите w для записи изменений на диск и выхода из fdisk:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
openSUSE:~ #
Важно отметить, что необходимо перезагрузить систему, чтобы ядро Linux распознало изменения в таблице разделов, сделанные с помощью fdisk. Однако можно также воспользоваться командой partprobe в командной строке, чтобы принудительно заставить ядро распознать новую таблицу разделов без перезагрузки. Синтаксис: partprobe –s. Параметр –s заставляет команду partprobe отображать сводку устройств и их разделов:
openSUSE:~ # partprobe –s
/dev/sda: msdos partitions 1 2 3
/dev/sdb: msdos partitions 1
openSUSE:~ #
Теперь, когда вы знаете, как управлять разделами с помощью fdisk, рассмотрим создание GUID-разделов.
Управление разделами GUID (Managing Globally Unique Identifier (GUID) Partitions)¶
Как упоминалось ранее, схема разметки MBR используется уже много лет — с начала 1980-х! Вследствие этого она имеет ряд ограничений и недостатков:
- MBR должна располагаться в первых 512 байтах жёсткого диска.
- На устройстве хранения данных можно создать только четыре основных раздела.
- Стандартный размер блока 512 байт ограничивает максимальный размер раздела величиной 2 ТБ.
За прошедшие годы для обхода этих ограничений было реализовано несколько решений:
- Использование логической адресации блоков (logical block addressing, LBA) для поддержки жёстких дисков большего объёма
- Использование секторов размером 4096 байт для увеличения максимального размера раздела на диске
- Определение одного из четырёх доступных разделов как расширенного, который может содержать множество логических разделов
Эти решения долго служили верой и правдой, но пришло время для нового способа управления разделами диска. Недавно для Linux была введена схема таблицы разделов глобально уникальных идентификаторов (globally unique identifier, GUID) в качестве замены MBR.
Примечание
Обычно эту схему называют просто GPT (что означает GUID partition table, таблица разделов GUID). Технари широко известны своей практикой вкладывать аббревиатуры в аббревиатуры.
GPT является частью спецификации унифицированного расширяемого микропрограммного интерфейса (Unified Extensible Firmware Interface, UEFI), призванного заменить BIOS в компьютерных системах и обеспечить значительно более надёжный программно-аппаратный интерфейс. UEFI можно представить как BIOS на стероидах. UEFI реализован только на современных компьютерах. Однако GPT можно использовать и на старых Linux-системах, по-прежнему использующих BIOS. Применение GPT вместо MBR для разделов жёсткого диска имеет ряд ключевых преимуществ:
- В GPT нет понятий основного, расширенного или логического разделов. Все разделы — просто разделы.
- GPT поддерживает гигантские диски и разделы. Речь идёт о размерах в зебибайтах, а не в терабайтах.
- Большинство дистрибутивов Linux поддерживают до 128 GPT-разделов на одном диске. Это значительно больше четырёх, к которым мы были привязаны при использовании MBR.
- GPT обеспечивает отказоустойчивость таблицы разделов, храня копию таблицы разделов в первом и последнем секторах диска. Благодаря этому, если одна из копий окажется повреждённой, резервная копия немедленно вступит в работу и файлы на диске останутся доступными.
- GPT выполняет проверку циклическим избыточным кодом (cyclic redundancy check, CRC) для верификации целостности таблицы разделов.
- GPT присваивает уникальные идентификаторы каждому диску и каждому разделу.
Для управления GPT-разделами нельзя использовать fdisk. Вместо него используется утилита gdisk, применяемая для множества задач, в частности:
- Преобразование таблицы разделов MBR в таблицу разделов GPT.
- Проверка жёсткого диска.
- Создание и удаление GPT-разделов.
- Отображение сведений о разделе.
- Изменение имени и типа раздела.
- Резервное копирование и восстановление таблицы разделов диска.
Например, предположим, что в систему добавлен второй диск и на нём нужно создать GPT-раздел для хранения данных. Для этого нужно переключиться на пользователя root и ввести gdisk /dev/sdb в командной строке. Если вы знакомы с fdisk, то работа с gdisk не составит труда, поскольку многие команды идентичны. В приглашении gdisk можно ввести ? для просмотра списка доступных команд:
openSUSE:~ # gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.7
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
Command (? for help):
В данном случае необходимо добавить новый раздел на диск, поэтому в приглашении gdisk вводится n. После этого предлагается указать следующее:
- Номер раздела.
- Размер раздела. Это можно сделать, задав начальный и конечный секторы раздела. Также можно указать, где на диске должен начинаться и заканчиваться раздел (например, на отметках 10 ГБ и 20 ГБ).
- Тип раздела. Номера типов разделов в
gdiskотличаются от используемых с MBR-разделами. Например, для создания раздела Linux используется тип раздела8300. Можно нажатьLв приглашенииgdisk, чтобы просмотреть список всех возможных типов разделов и их кодов.
Этот процесс показан в следующем примере:
Command (? for help): p
Disk /dev/sdb: 33554432 sectors, 16.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 1D3E9F48-D822-4DDF-AB94-C59B7A4E12C8
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 33554398
Partitions will be aligned on 2048-sector boundaries
Total free space is 12582845 sectors (6.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 20973567 10.0 GiB 8300 Linux filesystem
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
После выполнения этих шагов можно ввести p в приглашении gdisk, чтобы просмотреть список разделов на диске. Как и в случае с fdisk, изменения, вносимые с помощью gdisk, реально записываются на диск только при их фиксации. Если вас устраивают внесённые изменения в разметку диска, нажмите w в приглашении gdisk. Чтобы удалить раздел, нажмите d. Чтобы изменить тип раздела, нажмите t и введите желаемый код типа раздела. Чтобы выйти и начать заново без сохранения изменений, нажмите q.
Помимо gdisk, для управления GPT-разделами также можно использовать команду parted в командной строке. Она позволяет добавлять, удалять и редактировать разделы на диске.
Внимание
В отличие от gdisk и fdisk, команда parted записывает указанные изменения разделов непосредственно на диск. Будьте абсолютно уверены в вносимых изменениях, прежде чем использовать parted!
Для использования parted введите parted в командной строке, а затем выполните команду select, чтобы указать, каким диском нужно управлять. Будьте очень осторожны: если не указать диск вручную, parted автоматически выберет первый жёсткий диск — тот самый, на котором находятся системные и домашние разделы. Случайное удаление раздела на этом диске может привести к серьёзным последствиям! Если планируется работать с диском, отличным от /dev/sda, обязательно используйте команду select.
После выбора нужного жёсткого диска можно создать новый раздел, используя команду mkpart в приглашении parted. Необходимо указать следующее:
- Тип создаваемого раздела. Например, для создания стандартного раздела Linux укажите значение
linux. - Начальную точку раздела на диске (в мегабайтах). Например, чтобы создать раздел, начинающийся на отметке 1 ГБ на диске, укажите значение
1024. - Конечную точку раздела на диске (в мегабайтах). Например, чтобы создать раздел, заканчивающийся на отметке 11 ГБ на диске, укажите значение
11264.
Для просмотра созданных разделов используйте команду print в приглашении parted. В следующем примере на втором жёстком диске системы (/dev/sdb) создаётся раздел размером 10 ГБ:
openSUSE:~ # parted
GNU Parted 2.4
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /dev/sdb
Using /dev/sdb
(parted) mkpart linux 1024 11264
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 17.2GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1024MB 11.3GB 10.2GB linux
(parted)
В приглашении parted также доступны следующие команды для управления разделами диска:
- Для переименования раздела введите
name номер_раздела новое_имя. - Для перемещения раздела в другое место на диске (очень удобная возможность) введите
move номер_раздела начальная_точка конечная_точка. - Для изменения размера раздела (тоже очень полезная функция) введите
resize номер_раздела начальная_точка конечная_точка. - Для удаления раздела с диска введите
rm номер_раздела.
Теперь, когда вы понимаете, как управлять разделами, нужно освоить создание файловой системы на этих разделах с помощью mkfs.
Создание файловой системы (Building a File System)¶
Даже после создания раздела использовать его ещё нельзя: для этого нужно отформатировать раздел, создав на нём файловую систему. Для этого предназначен ряд команд. В этой части главы рассматриваются следующие темы:
- Использование
mkfs - Использование
mkreiserfs - Создание файловых систем xfs и vfat
- Использование
mkswap
Использование mkfs¶
Утилита mkfs используется для создания файловой системы ext2, ext3 или ext4 на разделе. С её помощью можно даже создать файловую систему NTFS на разделе (используемую Windows). Эта утилита фактически является надстройкой для реальных команд, создающих каждый конкретный тип файловой системы:
/sbin/mkfs.minix/sbin/mkfs.ntfs/sbin/mkfs.bfs/sbin/mkfs.ext4/sbin/mkfs.msdos/sbin/mkfs.cramfs/sbin/mkfs.ext3/sbin/mkfs.ext2/sbin/mkfs.vfat/sbin/mkfs.xfs
Примечание
При желании можно запустить утилиту mkfs.x из каталога /sbin для создания конкретного типа файловой системы. Однако большинство администраторов Linux просто используют надстройку mkfs. Для создания файловых систем extx также можно использовать команду mke2fs. Для получения справки по созданию конкретного типа файловой системы введите man mkfs.x в командной строке.
Перед созданием файловых систем xfs необходимо добавить поддержку xfs в ядро Linux. Поддержка xfs добавляется по умолчанию при установке некоторых дистрибутивов, например Fedora. Однако она не включена в другие дистрибутивы, например OpenSUSE и Ubuntu.
Тип файловой системы задаётся с помощью параметра –t и названия типа файловой системы. Например, чтобы создать файловую систему ext4 на первом разделе второго жёсткого диска в системе, нужно ввести mkfs –t ext4 /dev/sdb1. Пример:
openSUSE:~ # mkfs -t ext4 /dev/sdb1
mke2fs 1.42.8 (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2096474 blocks
104823 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
Помимо –t, при создании файловой системы на указанном разделе доступно несколько параметров для её настройки:
–b blocksize— задаёт размер блоков данных в файловой системе. Допустимые значения:1024,2048и4096.–N inodes— задаёт количество индексных дескрипторов (inode), создаваемых в файловой системе.
Примечание
Напомним, что индексный дескриптор (inode) хранит основную информацию о файле в файловой системе Linux: размер, устройство, владельца и права доступа. Каждый файл имеет один inode (за исключением жёстких ссылок). Поэтому указание точного числа inode фактически ограничивает общее количество файлов, которые можно создать в файловой системе.
–i bytes_per_inode— задаёт размер inode. Для параметраbytes_per_inodeдопустимы те же значения, что и для размера блока.–j— создаёт журнал в файловой системе. Может использоваться для добавления журнала к существующей файловой системе ext2, фактически преобразуя её в ext3.
Если при выполнении команды mkfs не указывать никаких параметров, оптимальный размер блока данных и количество inode будут вычислены автоматически исходя из размера раздела. В приведённом выше примере было автоматически вычислено следующее:
- Block size=4096 — размер блока 4 КБ. Это значение признано оптимальным для небольшого раздела размером 8 ГБ, на котором была создана файловая система в этом примере. Для разделов меньшего размера будут использованы меньшие размеры блоков.
- 524288 inodes, 2096474 blocks — файловая система имеет максимум 524 288 inode и 2 096 474 блоков. Это означает, что в ней можно хранить максимум 524 288 файлов, даже если сумма их размеров меньше общего доступного пространства. Перемножив общее число блоков (2 086 474) на размер блока (4096), можно вычислить общий размер раздела (в данном случае около 8 ГБ).
- Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 — суперблок (superblock) — это блок в начале раздела (0), содержащий информацию о структуре файловой системы. В данной файловой системе резервные копии суперблока хранятся в указанных блоках.
Использование mkreiserfs¶
Утилита mkreiserfs используется для создания файловой системы Reiser на разделе. Например, для создания файловой системы Reiser на первом разделе второго жёсткого диска в системе нужно ввести mkreiserfs /dev/sdb1. После этого отобразится экран с предложенными параметрами.
Совет
Для создания файловой системы Reiser также можно ввести mkfs –t reiserfs устройство в командной строке.
Многие из этих параметров можно настроить с помощью опций mkreiserfs. Подробнее см. страницу руководства утилиты. Как правило, параметры по умолчанию работают отлично. При запросе подтверждения введите y для форматирования раздела.
Создание файловых систем xfs и vfat¶
Помимо разделов ext2/¾ и Reiser, с помощью mkfs можно создавать разделы xfs и vfat. Файловая система xfs (Extents File System) была создана компанией Silicon Graphics (SGI) для её операционной системы IRIX. Это очень быстрая и гибкая файловая система. Она портирована на Linux, хотя, по моему мнению, под Linux она работает не так же хорошо, как под IRIX. Простой способ проверить, включена ли поддержка xfs в ядре Linux, — открыть командную строку и (от имени root) ввести find / –name mkfs.*. Если поддержка xfs добавлена в ядро, в системе должна быть установлена утилита mkfs.xfs, как показано на рис. 10-1.

Рис. 10-1. Проверка поддержки xfs.
Создание файловой системы xfs очень просто и выполняется точно так же, как создание файловых систем extx с помощью команды mkfs. Сначала создайте стандартный раздел Linux (тип 83) с помощью fdisk. Затем в командной строке введите mkfs –t xfs устройство. На рис. 10-2 раздел /dev/sdb1 форматируется с файловой системой xfs.

Рис. 10-2. Создание файловой системы xfs.
Кроме того, с помощью команды mkfs можно создавать на разделах Linux файловые системы не-Linux, например FAT. Сначала создайте стандартный раздел Linux (тип 83) с помощью fdisk. Затем просто введите mkfs –t vfat устройство в командной строке. Пример:
Использование mkswap¶
Итак, всё понятно, но что, если только что созданный раздел нужно отформатировать как раздел подкачки, а не как раздел данных? Не беспокойтесь — это тоже можно сделать с помощью команды mkswap в командной строке. Как и раздел данных, раздел, используемый для подкачки, должен быть подготовлен командой mkswap.
Совет
Linux-система может иметь более одного раздела подкачки. На активно используемой системе наличие нескольких разделов подкачки, распределённых по нескольким жёстким дискам, может значительно увеличить производительность.
Синтаксис команды: mkswap устройство — например, mkswap /dev/sdb2.
Внимание
Сначала необходимо установить тип раздела 82 с помощью утилиты fdisk!
Пример:
openSUSE:~ # mkswap /dev/sdb2
Setting up swapspace version 1, size = 1959924 KiB
no label, UUID=1f51a8d7-ac55-4572-b68a-7a3f179aac61
После настройки раздела как раздела подкачки используйте команду swapon в командной строке для его активации. Синтаксис: swapon устройство — например, swapon /dev/sdb2.
Отключить существующий раздел подкачки можно, введя swapoff устройство в командной строке — например, swapoff /dev/sdb2.
Совет
Для одновременной активации всех разделов подкачки введите swapon –a. Утилита swapon просмотрит файл /etc/fstab, найдёт все определённые разделы подкачки и смонтирует их. Для деактивации всех активных разделов подкачки введите swapoff –a в командной строке.
После форматирования раздела файловой системой его необходимо смонтировать перед использованием. Рассмотрим, как это делается.
Монтирование раздела (Mounting a Partition)¶
Одно из ключевых отличий Linux от других операционных систем (например, Windows) состоит в том, что файловую систему необходимо смонтировать, прежде чем её можно будет использовать. Это одна из тех «ловушек», о которые спотыкаются новые администраторы Linux. Приходится монтировать даже жёсткие диски, DVD-диски и USB-накопители! Монтирование съёмных носителей будет рассмотрено позднее в этой главе.
Хорошая новость в том, что процесс монтирования раздела относительно прост. Для этого используется команда mount. Утилита mount монтирует раздел в существующий каталог файловой системы. При переключении на этот каталог происходит переключение на раздел.
Новые администраторы Linux иногда с трудом понимают эту концепцию. В других операционных системах, например Windows, разделы диска адресуются с помощью буквы диска: C: или D:.
Например, если в системе Windows есть жёсткий диск с двумя разделами, первый доступен по букве диска C:, а второй — по букве D:. Каждая буква диска имеет собственную отдельную иерархию каталогов и файлов.
В Linux всё иначе! Вместо этого Linux использует виртуальную файловую систему (virtual file system, VFS), создающую единую иерархию, охватывающую все разделы на всех устройствах хранения данных в системе. Переключение на каталог, в котором смонтирован раздел, переключает вас на этот раздел.
Примечание
Более новые версии Windows также допускают монтирование раздела в каталог. Однако, по моему мнению, это реализовано значительно менее элегантно, чем в Linux.
Для монтирования раздела с помощью команды mount сначала переключитесь на учётную запись root с помощью su. Затем введите mount –t тип_файловой_системы устройство точка_монтирования в командной строке. Выглядит сложно, но на деле всё просто. Например, предположим, что на первом разделе второго жёсткого диска системы создана файловая система ext4 и её нужно смонтировать в каталог /mnt/extraspace. Для этого введите mount –t ext4 /dev/sdb1 /mnt/extraspace в командной строке:
Теперь при переключении на каталог /mnt/extraspace в файловой системе происходит переключение на новый раздел (/dev/sdb1). Если тип файловой системы раздела неизвестен, вместо –t можно использовать параметр –a с командой mount. В этом случае mount попытается смонтировать раздел, перебирая все поддерживаемые типы файловых систем, пока не найдёт подходящий.
В большинстве дистрибутивов каталог /mnt является стандартным местом для монтирования локальных и сетевых файловых систем. Конечно, необязательно использовать именно его: раздел можно смонтировать в любой каталог. Однако по соглашению для этой цели используется /mnt. В некоторых дистрибутивах это также место по умолчанию для монтирования съёмных устройств. Другие дистрибутивы, например OpenSUSE и новые версии Fedora, используют /media в качестве места по умолчанию для монтирования съёмных носителей.
Также можно использовать параметр –o с командой mount для задания различных параметров монтирования. Например, –o ro монтирует раздел только для чтения. Полный список доступных параметров см. на странице руководства для mount.
Совет
Одна из возможностей, которую я особенно ценю в команде mount, — возможность монтировать ISO-образ в файловую систему, предоставляя доступ к файлам внутри него без записи на оптический диск. Синтаксис: mount –o loop имя_файла.iso точка_монтирования.
После монтирования раздела можно запустить команду mount без параметров для просмотра всех смонтированных файловых систем. Просмотрев вывод, можно убедиться, что устройство смонтировано.
Например, следующая строка из вывода команды mount указывает, что /dev/sdb1 смонтирован в /mnt/extraspace и использует файловую систему ext4:
Кроме того, при каждом монтировании или размонтировании раздела файл /etc/mtab обновляется списком смонтированных файловых систем. Просмотреть этот файл с помощью команды cat можно для ознакомления со списком смонтированных файловых систем. Например, следующая строка из файла mtab также указывает, что раздел /dev/sdb1 смонтирован в /mnt/extraspace:
Также можно воспользоваться командой cat для просмотра файла /proc/mounts с аналогичными сведениями. Ещё одна полезная утилита для просмотра смонтированных разделов — df. Она отображает разделы, точки их монтирования, использованное пространство и объём свободного места.
Если по какой-то причине необходимо размонтировать раздел, используйте команду umount. Для размонтирования раздела просто введите umount, затем устройство или каталог монтирования. Например, для размонтирования раздела /dev/sdb1 из предыдущего примера введите umount /dev/sdb1 или umount /mnt/extraspace:
Совет
Обратите внимание: команда пишется umount, а не unmount. Это ещё одна из «ловушек» Linux!
Здесь возникает ещё один нюанс при работе с Linux. То, что файловая система смонтирована с помощью mount, не означает, что она останется смонтированной после перезагрузки системы. Пока система работает, раздел будет оставаться смонтированным. Однако после перезагрузки раздел не будет автоматически перемонтирован при запуске системы.
Исправить это можно с помощью файла /etc/fstab. Этот файл содержит список файловых систем, монтируемых операционной системой при каждой загрузке. Типичный файл /etc/fstab выглядит следующим образом:
openSUSE:/ # cat /etc/fstab
/dev/sda1 swap swap defaults 0 0
/dev/sda2 / ext4 acl,user_xattr 1 1
/dev/sda3 /home ext4 acl,user_xattr 1 2
Поначалу этот файл может показаться запутанным, но в нём нет ничего сложного. Каждая строка файла /etc/fstab описывает отдельную файловую систему, монтируемую при загрузке. Каждая строка состоит из шести полей, описанных в таблице 10-1.
Таблица 10-1. Поля файла /etc/fstab
| Поле | Назначение |
|---|---|
| 1 | Указывает устройство и раздел для монтирования — например, /dev/sda3. |
| 2 | Каталог (точка монтирования), в который монтируется раздел. |
| 3 | Тип файловой системы раздела. |
| 4 | Различные параметры монтирования. Доступные значения: rw — монтировать в режиме чтения/записи; ro — монтировать только для чтения; sync — включить синхронный ввод-вывод (изменения записываются немедленно; обычно используется для съёмных устройств, например дискет); async — включить асинхронный ввод-вывод (изменения кешируются и записываются в период простоя системы; обычно используется для жёстких дисков); atime — время последнего обращения к файлу обновляется в inode; noatime — время последнего обращения к файлу не обновляется в inode (обычно улучшает производительность файловой системы); nodev — блокирует интерпретацию файлов устройств в /dev как блочных специальных устройств; dev — интерпретирует файлы устройств в /dev как блочные специальные устройства; noexec — запрещает выполнение двоичных файлов на разделе; exec — разрешает выполнение двоичных файлов на разделе; nosuid — блокирует использование битов suid и sgid; suid — разрешает использование битов suid и sgid; auto — файловая система монтируется автоматически при загрузке; noauto — файловая система не монтируется автоматически при загрузке; user — разрешает пользователям монтировать файловую систему; nouser — только root может монтировать файловую систему; defaults — использует параметры по умолчанию: rw, suid, dev, exec, auto, nouser и async. |
| 5 | Указывает, нужно ли создавать резервную копию файловой системы: 0 — не создавать, 1 — создавать. |
| 6 | Задаёт порядок проверки файловой системы утилитой fsck при перезагрузке. Корневой раздел должен иметь значение 1. Для остальных разделов устанавливается значение 2. |
Обратите внимание, что раздел /dev/sdb1, созданный ранее, не указан в примере файла fstab. Это означает, что после перезагрузки системы он не будет смонтирован в /mnt/extraspace. Исправить это можно, добавив раздел в файл fstab. Откройте /etc/fstab в редакторе, например vi, и добавьте следующую строку:
Это указывает, что раздел /dev/sdb1 должен монтироваться в /mnt/extraspace с файловой системой ext4. Также задаётся активация списков управления доступом для файловой системы (очень правильное решение!) и включение расширенных атрибутов пользователей. Теперь при каждой перезагрузке системы раздел будет монтироваться автоматически.
Далее необходимо уделить несколько минут обсуждению LVM.
Общие сведения об LVM (Understanding LVM)¶
Управление логическими томами (Logical Volume Management, LVM) — это вариант разметки жёстких дисков Linux. Он представляет собой альтернативу традиционному процессу создания разделов. Вместо разделов создаются группы томов из устройств хранения в системе. Из группы томов выделяется пространство конкретным логическим томам, которыми управляет менеджер логических томов. Вместо монтирования разделов монтируются логические тома в точки монтирования файловой системы. Это обеспечивает значительную гибкость при распределении пространства. Например, если том смонтирован в /usr, а том в /home начинает заканчиваться, можно перераспределить пространство от тома, смонтированного в /usr, в пользу тома в /home. С традиционными разделами это было бы крайне сложно!
Кроме того, LVM позволяет динамически добавлять пространство. Например, если заканчивается место в томе /home, достаточно просто установить новый жёсткий диск и выделить его пространство тому /home. И всё — размер тома увеличен. Не нужно делать резервную копию данных и восстанавливать их, как при работе с традиционными разделами.
В этой части главы рассматриваются следующие темы LVM:
- Компоненты LVM
- Настройка LVM
Начнём с изучения компонентов, необходимых для работы LVM.
Компоненты LVM¶
LVM создаёт виртуальный пул памяти (называемый группой томов), из которого выделяются логические тома. Linux может использовать логические тома LVM точно так же, как стандартные разделы диска, создаваемые с помощью fdisk. Однако способ определения логических томов существенно сложнее. Базовая структура LVM включает следующие компоненты:
- Физические тома (Physical volumes) — физический том может представлять собой раздел или весь жёсткий диск целиком.
- Группы томов (Volume groups) — группа томов состоит из одного или нескольких физических томов, объединённых вместе. Важно помнить, что физические тома могут принадлежать разным жёстким дискам. Это означает, что можно добавлять диски или разделы в группу томов по мере необходимости в дополнительном пространстве.
- Логические тома (Logical volumes) — определяются из группы томов. Логические тома можно форматировать файловой системой Linux и монтировать как физические разделы.
Взаимодействие этих компонентов для организации хранилища в системе Linux показано на рис. 10-3.

Рис. 10-3. Компоненты LVM: логические тома формируются из группы томов, которая объединяет жёсткий диск и разделы.
Настройка LVM¶
Для создания и монтирования логических томов необходимо последовательно создать физические тома, группы томов и логические тома (именно в таком порядке).
Создание физических томов LVM. В качестве физических томов LVM можно использовать разделы диска или даже целые диски. При использовании существующего раздела рекомендуется установить тип раздела на Linux LVM (8e). Однако мой опыт показывает, что стандартные разделы Linux (тип 83) работают не хуже. Пример установки типа раздела с помощью fdisk:
Command (m for help): t
Partition number (1,2, default 2): 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Имейте в виду: если нужно использовать целый жёсткий диск как физический том LVM, он не должен содержать таблицу разделов. Если на нужном диске уже есть таблица разделов, её можно удалить с помощью команды dd. В следующем примере первый блок размером 512 КБ на жёстком диске /dev/sdc (где находится раздел MBR) перезаписывается нулевыми символами из файла устройства /dev/zero:
openSUSE:/media # dd if=/dev/zero of=/dev/sdc bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.2242 s, 2.3 kB/s
Определившись с дисками/разделами, которые будут использоваться, выполните команду pvcreate в командной строке для определения их как физических томов LVM. Синтаксис: pvcreate устройство. В следующем примере первые два раздела на /dev/sdb определяются как физические тома, а также весь жёсткий диск /dev/sdc:
После этого можно использовать команду pvscan -v для просмотра всех физических томов в системе вместе с их размерами:
openSUSE:~ # pvscan –v
Volume Groups with the clustered attribute will be inaccessible.
Wiping cache of LVM-capable devices
Wiping internal VG cache
Walking through all physical volumes
PV /dev/sdc lvm2 [5.00 GiB]
PV /dev/sdb1 lvm2 [4.66 GiB]
PV /dev/sdb2 lvm2 [6.52 GiB]
Total: 3 [16.18 GiB] / in use: 0 [0 ] / in no VG: 3 [16.18 GiB]
Совет
Если в дальнейшем потребуется удалить физический том по какой-либо причине (например, при отказе жёсткого диска), можно воспользоваться утилитой pvmove для переноса данных с удаляемого физического тома на другой физический том, определённый в системе.
Получив определённые физические тома, можно приступать к созданию группы томов.
Создание групп томов LVM. Для создания групп томов используется утилита vgcreate. Синтаксис: vgcreate имя_группы_томов физический_том1 физический_том2 .... В следующем примере создаётся группа томов с именем DATA из физических томов sdb1, sdb2 и sdc:
openSUSE:~ # vgcreate DATA /dev/sdb1 /dev/sdb2 /dev/sdc
openSUSE:~ # pvscan –v
Volume Groups with the clustered attribute will be inaccessible.
Wiping cache of LVM-capable devices
Wiping internal VG cache
Walking through all physical volumes
PV /dev/sdb1 VG DATA lvm2 [4.65 GiB / 4.65 GiB free]
PV /dev/sdb2 VG DATA lvm2 [6.52 GiB / 6.52 GiB free]
PV /dev/sdc VG DATA lvm2 [5.00 GiB / 5.00 GiB free]
Total: 3 [16.16 GiB] / in use: 3 [16.16 GiB] / in no VG: 0 [0 ]
Из вывода команды pvscan видно, что три физических тома теперь входят в группу томов DATA. После первоначального создания группы томов для управления ею можно использовать следующие команды:
vgexpand— добавляет дополнительные физические тома в существующую группу томов.vgreduce— удаляет физический том из существующей группы томов. Перед выполнениемvgreduceнеобходимо воспользоватьсяpvmoveдля переноса данных с удаляемого физического тома на другой физический том в системе.vgremove— удаляет группу томов. Перед использованиемvgremoveнеобходимо сначала удалить все логические тома, определённые в группе томов.
Определив группу томов, можно приступать к созданию логических томов.
Создание логических томов LVM. Для создания логических томов внутри группы томов используется команда lvcreate. Синтаксис: lvcreate –L размер_тома –n имя_тома имя_группы_томов. В следующем примере в группе томов DATA создаются два тома по 7 ГБ (с именами research и development):
openSUSE:~ # lvcreate -L 7G -n research DATA
openSUSE:~ # lvcreate -L 7G -n development DATA
openSUSE:~ # lvscan –v
Volume Groups with the clustered attribute will be inaccessible.
Finding all logical volumes
ACTIVE '/dev/DATA/research' [7.00 GiB] inherit
ACTIVE '/dev/DATA/development' [7.00 GiB] inherit
Для просмотра логических томов, определённых в системе, была использована команда lvscan. Обратите внимание, что были определены два логических тома в группе томов, которая сама создана путём объединения пространства двух разделов диска и одного целого жёсткого диска. Впечатляет!
Для управления логическими томами после их создания используются следующие команды:
lvextend— увеличивает размер логического тома. Предварительно необходимо добавить дополнительные физические тома (диски или разделы) в группу томов.lvreduce— уменьшает размер логического тома.lvremove— удаляет логический том из системы.
Внимание
Будьте крайне осторожны при работе с lvreduce и lvremove! Если файловая система окажется больше размера, указанного в lvreduce, есть риск потери данных. Перенесите данные, которые необходимо сохранить, на другой логический том перед удалением тома с помощью lvremove.
После создания логических томов необходимо создать на них файловые системы и смонтировать их. Файловая система создаётся с помощью mkfs, как и для традиционных разделов. Синтаксис:
Логический том монтируется командой mount так же, как и файловые системы традиционных разделов:
Теперь поговорим об обслуживании файловых систем Linux.
Обслуживание файловых систем Linux (Maintaining Linux File Systems)¶
Как и в любой другой операционной системе, за файловыми системами Linux необходимо следить и обслуживать их. В этой части главы описаны следующие темы:
- Проверка использования раздела и файлов
- Проверка целостности файловой системы
- Проверка открытых файлов
- Идентификация процессов, использующих файлы
Проверка использования раздела и файлов¶
Одна из ключевых проблем при обслуживании файловых систем Linux — нехватка дискового пространства. Linux предоставляет утилиты df и du для отслеживания использования пространства на разделе и определения, какие файлы его занимают.
Утилита df показывает, где смонтированы разделы жёсткого диска, оптические приводы и другие устройства хранения данных (например, USB-накопители) в файловой системе. Она также отображает общий размер устройства и количество использованного пространства. Запуск df без параметров отображает сведения обо всех смонтированных файловых системах:
openSUSE:/ # df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 6194480 4528228 1328540 78% /
devtmpfs 760928 32 760896 1% /dev
tmpfs 772004 96 771908 1% /dev/shm
tmpfs 772004 3832 768172 1% /run
tmpfs 772004 0 772004 0% /sys/fs/cgroup
tmpfs 772004 3832 768172 1% /var/lock
tmpfs 772004 3832 768172 1% /var/run
/dev/sda3 7985600 21380 7535524 1% /home
/dev/sdb1 5029504 10232 4740744 1% /mnt/extraspace
Также можно ввести df имя_файла в командной строке. В этом случае df отобразит сведения о разделе, на котором находится указанный файл:
openSUSE:/ # df /mnt/extraspace/myfile.txt
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdb1 5029504 10232 4740744 1% /mnt/extraspace
Обратите внимание, что по умолчанию df отображает статистику пространства в блоках. Это удобно для любителей вычислять свободное пространство из количества блоков. Лично я использую параметр –h с командой df: он заставляет df отображать статистику пространства в удобочитаемом формате, таком как КБ, МБ и ГБ. Пример тех же данных с параметром –h:
openSUSE:/ # df –h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 6.0G 4.4G 1.3G 78% /
devtmpfs 744M 32K 744M 1% /dev
tmpfs 754M 96K 754M 1% /dev/shm
tmpfs 754M 3.8M 751M 1% /run
tmpfs 754M 0 754M 0% /sys/fs/cgroup
tmpfs 754M 3.8M 751M 1% /var/lock
tmpfs 754M 3.8M 751M 1% /var/run
/dev/sda3 7.7G 21M 7.2G 1% /home
/dev/sdb1 4.8G 10M 4.6G 1% /mnt/extraspace
Намного лучше! Для отображения типа файловой системы каждого раздела можно добавить параметр –T:
openSUSE:/ # df –hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 6.0G 4.4G 1.3G 78% /
devtmpfs devtmpfs 744M 32K 744M 1% /dev
tmpfs tmpfs 754M 96K 754M 1% /dev/shm
tmpfs tmpfs 754M 3.9M 751M 1% /run
tmpfs tmpfs 754M 0 754M 0% /sys/fs/cgroup
tmpfs tmpfs 754M 3.9M 751M 1% /var/lock
tmpfs tmpfs 754M 3.9M 751M 1% /var/run
/dev/sda3 ext4 7.7G 43M 7.2G 1% /home
/dev/sdb1 ext4 4.8G 10M 4.6G 1% /mnt/extraspace
Ещё один полезный параметр df — –i, который отображает сведения об использовании inode вместо дискового пространства. Напомним, что при создании файловой системы на разделе назначается фиксированное максимальное число inode. Если файловая система хранит огромное количество очень маленьких файлов, возможна ситуация, когда inode закончатся при ещё достаточном количестве свободного дискового пространства. Отслеживать использование inode можно с помощью команды df –i:
openSUSE:/ # df –i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 402400 168063 234337 42% /
devtmpfs 190232 376 189856 1% /dev
tmpfs 193001 9 192992 1% /dev/shm
tmpfs 193001 503 192498 1% /run
tmpfs 193001 13 192988 1% /sys/fs/cgroup
tmpfs 193001 503 192498 1% /var/lock
tmpfs 193001 503 192498 1% /var/run
/dev/sda3 516096 516 515580 1% /home
/dev/sdb1 327680 12 327668 1% /mnt/extraspace
Ещё одна утилита для мониторинга использования дискового пространства — du. Её функция — предоставление сводки по использованию дискового пространства каждым файлом рекурсивно для указанного каталога. Синтаксис: du каталог. Полезные параметры du:
–c— вычисляет итоговый результат–h— отображает вывод в удобочитаемом формате--exclude имя_файла_или_шаблон— исключает все файлы, соответствующие указанному имени или шаблону
Параметр –h из личного опыта наиболее полезен. Пример просмотра пространства, занятого файлами в каталоге /tmp, в удобочитаемом формате:
openSUSE:/ # du -h /tmp
4.0K /tmp/.esd-485
4.0K /tmp/.X11-unix
4.0K /tmp/.XIM-unix
4.0K /tmp/.Test-unix
4.0K /tmp/.esd-1000
4.0K /tmp/.font-unix
4.0K /tmp/systemd-private-otNWQw/tmp
8.0K /tmp/systemd-private-otNWQw
4.0K /tmp/VMwareDnD
4.0K /tmp/.ICE-unix
4.0K /tmp/vmware-root
4.0K /tmp/systemd-private-OSAy3Q/tmp
8.0K /tmp/systemd-private-OSAy3Q
4.0K /tmp/orbit-student
64K /tmp
Проверка целостности файловой системы¶
Как и в любой другой операционной системе, разделы Linux иногда могут сталкиваться с проблемами. Причины могут быть разными, однако на практике главным источником проблем с повреждением разделов является отключение электроэнергии, приводящее к некорректному завершению работы системы. Если система выключилась без должного размонтирования смонтированного раздела, повреждение данных весьма вероятно.
Примечание
Это весомый аргумент в пользу использования источника бесперебойного питания (uninterruptible power supply, ИБП) на своих системах. Linux не любит неожиданных выключений!
В подобных случаях необходимо проверить файловые системы на наличие ошибок и при необходимости выполнить их исправление. Для этого используется утилита проверки файловой системы fsck (File System ChecK). Перед использованием этой утилиты необходимо размонтировать проверяемую файловую систему. Затем введите fsck устройство в командной строке. Например, чтобы проверить файловую систему на первом разделе второго жёсткого диска, введите fsck /dev/sdb1. Утилита проверит файловую систему и сообщит об обнаруженных ошибках (или об их отсутствии). Пример вывода fsck:
openSUSE:~ # umount /dev/sdb1
openSUSE:~ # fsck /dev/sdb1
fsck from util-linux 2.23.2
e2fsck 1.42.8 (20-Jun-2013)
/dev/sdb1: clean, 12/402192 files, 61153/1605632 blocks
При обнаружении ошибок отображается код, представляющий сумму обнаруженных ошибок:
0— ошибок нет.1— ошибки файловой системы исправлены.2— система должна быть перезагружена.4— ошибки файловой системы не исправлены.8— операционная ошибка.16— ошибка использования или синтаксиса.32— выполнениеfsckотменено по запросу пользователя.128— ошибка разделяемой библиотеки.
Обратите внимание, что в данном примере была запущена e2fsck. Это объясняется тем, что fsck является надстройкой для следующих утилит:
/sbin/fsck.msdos/sbin/fsck.cramfs/sbin/fsck.ext3/sbin/dosfsck/sbin/fsck.ext2/sbin/fsck/sbin/e2fsck/sbin/fsck.ext4/sbin/fsck.vfat/sbin/fsck.minix/sbin/fsck.reiserfs
При запуске fsck без параметров утилита обратится к файлу /etc/fstab для определения типа файловой системы проверяемого раздела и загрузит соответствующий модуль. Как видно из приведённого списка, существуют версии fsck для файловых систем Reiser, ext2, ext3 и ext4.
Примечание
Утилиту fsck.reiserfs можно запустить с помощью надстройки reiserfsck.
После завершения проверки раздел можно снова смонтировать командой mount.
Очень полезная возможность e2fsck — восстановление повреждённого суперблока на файловых системах ext2/¾. Напомним, что суперблок — это блок в начале раздела, содержащий информацию о структуре файловой системы. Большинство файловых систем Linux хранят резервные копии суперблока в различных местах раздела. При повреждении суперблока его можно восстановить с помощью одной из резервных копий. Синтаксис: e2fsck –f –b резервный_суперблок устройство. Параметр –f предписывает e2fsck принудительно выполнить проверку, даже если файловая система выглядит исправной. Параметр –b указывает e2fsck, какую копию суперблока использовать.
Ниже описаны другие полезные утилиты управления файловыми системами:
-
tune2fs— утилита настройки различных параметров файловых систем ext2/¾. Доступные параметры:–c n— задаёт количество монтирований (n), после которого файловая система будет автоматически проверенаfsck.–i интервал d|m|w— задаёт максимальный интервал между проверками файловой системы вd(днях),m(месяцах) илиw(неделях).–j— добавляет журнал в файловую систему ext2.–L метка_тома— задаёт метку тома файловой системы.
Пример:
-
reiserfstune— аналогtune2fsдля файловой системы Reiser. -
dumpe2fs— отображает подробные сведения о файловых системах ext2/¾. Параметр–hделает вывод более удобочитаемым. Пример:openSUSE:/ # dumpe2fs -h /dev/sdb1 dumpe2fs 1.42.8 (20-Jun-2013) Filesystem volume name: NewVol Last mounted on: /mnt/extraspace Filesystem UUID: 07ad1005-70c6-47f2-be9f-273ea6007878 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 327680 Block count: 1310720 Reserved block count: 65536 Free blocks: 1254818 Free inodes: 327668 First block: 0 Block size: 4096 Fragment size: 4096 Reserved GDT blocks: 319 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8192 Inode blocks per group: 512 Flex block group size: 16 Filesystem created: Fri Jan 30 14:30:05 2015 Last mount time: Fri Jan 30 15:05:16 2015 Last write time: Fri Jan 30 15:05:28 2015 Mount count: 2 Maximum mount count: -1 Last checked: Fri Jan 30 14:30:05 2015 Check interval: 0 (<none>) Lifetime writes: 212 MB Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: feff3f13-c9f7-44b2-ba9b-d0290602f8f7 Journal backup: inode blocks Journal features: (none) Journal size: 128M Journal length: 32768 Journal sequence: 0x00000008 Journal start: 0 -
debugfs— интерактивный отладчик файловой системы. Может использоваться для проверки и даже изменения состояния файловой системы ext2/¾. Синтаксис:debugfs устройство. При запуске этой команды отображается приглашениеdebugfs::По умолчанию файловая система открывается в режиме только для чтения. Для внесения изменений используйте параметр
–wдля открытия в режиме чтения-записи. В приглашенииdebugfs:доступны следующие команды: -show_super_stats— отображает информацию, аналогичную выводуdumpe2fs. -write входной_файл выходной_файл— копирует файл из файловой системы в другую. Это крайне полезно при попытке извлечь важный файл из повреждённой файловой системы. -stat имя_файла_или_каталога— отображает расширенные сведения об указанном файле или каталоге. Пример для файлаmyfile2.txt:-Inode: 12 Type: regular Mode: 0644 Flags: 0x80000 Generation: 556089601 Version: 0x00000000:00000001 User: 0 Group: 0 Size: 0 File ACL: 0 Directory ACL: 0 Links: 1 Blockcount: 0 Fragment: Address: 0 Number: 0 Size: 0 ctime: 0x4d812f93:d2d91b5c -- Wed Mar 16 15:45:55 2011 atime: 0x4d812f93:d2d91b5c -- Wed Mar 16 15:45:55 2011 mtime: 0x4d812f93:d2d91b5c -- Wed Mar 16 15:45:55 2011 crtime: 0x4d812f93:d2d91b5c -- Wed Mar 16 15:45:55 2011 Size of extra inode fields: 28 EXTENTS: lines 1-12/12 (END)list_deleted_inodes— отображает список удалённых inode в файловой системе.С
debugfsможно сделать многое. Для ознакомления со всеми возможностями обратитесь к странице руководстваdebugfs. -
xfs_admin— аналогtune2fsдля файловой системы xfs. Эта утилита использует исполняемый файлxfs_dbдля изменения различных параметров файловой системы xfs. Файловая система должна быть размонтирована перед внесением изменений. Доступные параметры:–j— включает формат журнала версии 2, поддерживающий буферы журнала большего размера.–l— отображает метку файловой системы.–u— отображает глобально уникальный идентификатор (universally unique identifier, UUID) файловой системы.–L метка— задаёт метку файловой системы.–U uuid— задаёт UUID файловой системы.
-
xfs_info— отображает полезные сведения о файловых системах xfs. xfs_metadump— сохраняет метаданные файловой системы xfs (имена и размеры файлов) в файл.
Проверка открытых файлов¶
Команда lsof в командной строке используется для отображения списка открытых файлов. Выполнение lsof без параметров выводит все открытые файлы, принадлежащие всем активным процессам системы. Полезные параметры lsof:
-s— отображает размеры файлов.-t— задаёт вывод только идентификаторов процессов без заголовка. Удобно при передаче выводаlsofкомандеkill.-u имя_пользователя— отображает только открытые файлы, связанные с указанным пользователем.
В следующем примере с помощью lsof отображается список открытых файлов, принадлежащих пользователю tux:
openSUSE:/sbin # lsof -u tux | more
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/tux/.gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gnome-key 3860 tux cwd DIR 8,3 4096 2 /
gnome-key 3860 tux rtd DIR 8,3 4096 2 /
gnome-key 3860 tux txt REG 8,3 878328 409704 /usr/bin/gnome-keyring-daemon
gnome-key 3860 tux mem REG 8,3 19114 411496 /lib64/libdl-2.11.2.so
gnome-key 3860 tux mem REG 8,3 122160 393375 /lib64/libselinux.so.1
Идентификация процессов, использующих файлы¶
Помимо отображения открытых файлов, иногда необходимо определить, какие процессы используют конкретный файл в файловой системе. Команда fuser отображает идентификаторы процессов (PID), использующих указанные файлы или файловые системы. По умолчанию после каждого имени файла отображается буква, обозначающая следующее:
c— текущий каталогe— выполняемый файлf— открытый файлF— файл, открытый для записиr— корневой каталогm— файл, отображённый в память, или разделяемая библиотека
Параметры команды:
–a— отображает все указанные файлы. По умолчанию отображаются только файлы, к которым обращается хотя бы один процесс.–k— завершает процессы, обращающиеся к файлу.–i— запрашивает подтверждение перед завершением процесса.–u— добавляет имя пользователя-владельца процесса к каждому идентификатору процесса (PID).
В следующем примере видно, что пользователь tux запустил исполняемый файл /usr/bin/top и процесс с PID 9823 использует этот файл:
Теперь, когда вы знаете, как управлять разделами в Linux-системе, выполним практическое упражнение.
Упражнение 10-1. Управление разделами Linux
В этом упражнении вы попрактикуетесь в работе с разделами Linux. Упражнение можно выполнить на виртуальной машине, прилагаемой к книге. Для настроенного окружения запустите снапшот 10-1.
Выполните следующие шаги:
- Включите систему и войдите в систему под учётной записью студента.
- Переключитесь на учётную запись root, введя
su –и пароль root:student. - В командной строке введите
fdisk /dev/sdb. - Просмотрите существующие разделы на устройстве, введя
p. - Создайте новый раздел, введя
n. - Укажите основной раздел, введя
p. - Создайте первый раздел на диске, введя
1. - Укажите первый цилиндр
1. - Для последнего цилиндра используйте значение по умолчанию, нажав Enter.
- Проверьте новый раздел, введя
p. - Запишите раздел на диск, введя
w. - Отформатируйте новый раздел с файловой системой ext4, введя
mkfs –t ext4 /dev/sdb1. - Дождитесь завершения создания файловой системы.
- Создайте новый каталог в
/mntс именемnewdisk, введяmkdir /mnt/newdisk. - Смонтируйте новую файловую систему в этот каталог, введя
mount –t auto /dev/sdb1 /mnt/newdisk. - Убедитесь, что диск смонтирован, введя
mount. - Настройте файловую систему для автоматического монтирования при каждой загрузке системы, введя
vi /etc/fstabв командной строке. - Добавьте в файл следующую строку:
- Сохраните изменения и выйдите из
vi. - Проверьте новую файловую систему: сначала размонтируйте её. Введите
umount /mnt/newdiskв командной строке. - Введите
fsck /dev/sdb1в командной строке. Утилитаfsckдолжна сообщить, что файловая система исправна. - Повторно смонтируйте устройство.
- Вернитесь к обычной учётной записи пользователя, введя
exit.