В этом разделе:
FHS - стандарт, описывающий, что и где должно располагаться в ФС.
Разбивка дисков, подготовка ФС
mount / umount - монтирование дисков, сетевых ресурсов, примеры конфигов.
Часто используемые команды при работе с дисками:
| lsblk | информация о всех блочных устройствах, которые видит ОС |
| lsblk -f или blkid | просмотр соответсвие UUID диску |
| df -h | информация по размеру ФС |
| df -i | информация по inode |
| du --max-depth 1 --exclude='/proc' / | подсчет занимаемого места от корня с исключениями |
| findmnt | что смонтировано в древовидном виде |
| mount -t tmpfs dir_tmpfs /dir/ -o size=100m | примонитровать каталог /dir с именем dir_tmpfs в оперативную память (размер 100МБ) |
| mount -t cifs //192.168.0.1/share /mnt/share | примонтировать сетевую папку по протоколу smb |
| mount -o loop /home/backup.img /mnt/backup | примонтировать образ backup.img (например: снятый с использованием dd) |
| lsof /mount_point | какими процессами занята точка монтирования |
| fuser -mv /moint_point | какими процессами занята точка монтирования |
| pvdisplay, vgdisplay, lvdisplay | инфо по LVM разделам |
| fdisk -l /dev/sda | информация о разделах на устройстве sda |
| udevadm info --name=/dev/sda | информация по диску sda |
| hdparm -I /dev/sda | информация по диску sda |
| hdparm -tT /dev/sda | протестировать скорость hdd |
| smartctl -a /dev/sda | smart диска sda |
| badblocks -v /dev/sda1 | проверить раздел sda1 на бэд блоки |
| fsck /dev/sda1 | проверить/восстановить ФС раздела sda1 |
| e2fsck -j /dev/sda1 | проверить/восстановить ФС раздела sda1 |
FHS (File Hiearchy Standart) - стандарт, унифицирующий местонахождение файлов и каталогов в файловой системе UNIX
/ - корневой каталог, содержащий всю файловую иерархию.
/bin - основные системные утилиты, необходимые всем пользователям (например: cat, ls, cp). Дополнительные утилиты (например: при установке доп. пакетов), как правило располагаются в /usr/bin
/boot - загрузочные файлы (в том числе файлы загрузчика, ядро, initrd, System.map). Содержит все файлы, необходимые для начальной загрузки ОС. Часто выносится на отдельный раздел.
/boot/vmlinuz-5.10...-std-def-alt1- ядро ОС
/boot/config-5.10...-std-def-alt1- конфигурация ядра (c какими параметрами собрано ядро)
/boot/initrd-5.10...-std-def-alt1 - образ системы, разворачивающийся в ОЗУ при старте системы
/boot/grub/grub.cfg - конфиг файл загрузчика grub
/boot/grub/x86_64-efi/ - модули загрузчика grub
/dev - основные файлы устройств (например, /dev/null, /dev/zero).
/etc - общесистемные конфигурационные файлы
/etc/passwd - файл, содержащий список всех учётных записей в системе.
/etc/shadow - файл, содержащий в зашифрованном виде пароли УЗ и атрибуты (срок действия УЗ и т.п.)
/etc/group - группы в ОС
Пример записи в файле: drobbins:x:1000:postfix
где drobbins - имя пользователя, х - зарезервировано, 1000 - основная группа, postfix - доп группа.
/etc/fstab - содержит информацию о примонтированных дисках и устройствах
/home - (аналог Users в Windows) Содержит домашние каталоги пользователей, которые в свою очередь содержат персональные настройки и данные пользователя. Часто размещается на отдельном разделе.
/lib - основные системные библиотеки, необходимые для работы программ из /bin и /sbin. Дополнительные библиотеки обычно размещаются в /usr/lib и обычно предназначены для дополнительно установленных пакетов (утилит, программ), которые устанавливаются в /usr/bin и /usr/sbin
- /lib/modules/{вериия_ядра} - библиотеки и модули ядра (примерный аналог драйверов в Windows). Пример: /lib/modules/{вериия_ядра}/kernel/drivers/net - драйвера для сетевых устройств.
/media - точки монтирования для сменных носителей, таких как CD-ROM
/mnt - временно монтируемые файловые системы
/opt - (optional - аналог Programm Files в Windows) Дополнительное программное обеспечение.
/proc - виртуальная файловая система procfs, представляющая состояние ядра операционной системы и запущенных процессов. Необходима для выполнения таких команд как ps, w, top. procfs создаёт двухуровневое представление пространств процессов. На верхнем уровне процессы представляют собой каталоги, именованные в соответствии с их pid.
/root - домашний каталог пользователя root
/run - информация о системе с момента её загрузки, в том числе данные, необходимые для работы демонов (pid-файлы, UNIX-сокеты и т.д.)
/sbin - основные системные утилиты для администрирования и настройки системы, например, init, iptables, ifconfig. (аналог системных утилит System32 Windows). Дополнительные утилиты (например: при установке доп. пакетов), как правило располагаются в /usr/sbin
/srv - данные для сервисов, предоставляемых системой (например, www или ftp).
/sys - сюда монтируется виртуальная файловая система sysfs, содержит информацию об устройствах, драйверах, а так же некоторых свойствах ядра.
- /sys/block - содержит директории всех блочных устройств, присутствующих в данный момент в системе
- /sys/bus - список шин, определенных в ядре Linux (eisa, pci и т.д.)
- /sys/class - список группированных устройств по классам (printer, scsi-devices и т.д.).
/tmp - временные файлы, которые не сохраняются после перезагрузки.
/usr - (use share resurce - аналог Programm Files в Windows) В этом каталоге храняться все установленные пакеты программ, документация и т.п. Содержит большинство пользовательских приложений и утилит, используемых в многопользовательском режиме. Все пользователи кроме root имеют доступ только на чтение. Может быть смонтирована по сети только для чтения и быть общей для нескольких машин.
- /usr/bin и /usr/sbin — дополнительные утилиты и программы для пользователя и рута
- /usr/lib — дополнительные библиотеки для этих программ
- /usr/local - чаще всего директория используется для установки программ, которые не предназначены для конкретного дистрибутива
- /usr/share- общие данные установленных программ
- /usr/share/doc - директория, в которой обычно находится справочная документация по установленным программам.
/var - Изменяемые файлы, такие как журналы ОС, файлы регистрации, временные почтовые файлы и т.п.
- /var/tmp - временные файлы, не удаляемые после перезагрузки
- /var/mail - письма пользователям
- /var/cache - все кэши различных программ
- /var/lib - постоянные данные, изменяемые программами в процессе работы (базы данных, метаданные и др.)
- /var/lock - lock-файлы, указывающие на занятость некоторого ресурса
- /var/log - все log-файлы
- /var/spool- задачи, ожидающие обработки (череди печати, непрочитанные или не отправленные письма, задачи cron и т. д.).
Разбивка дисков, подготовка ФС
Опции утилиты parted
select раздел - выбрать диск или раздел, с которым будем работать
print - отобразить таблицу разделов
mktable тип - создать таблицу разделов
mkpart тип_раздела файловая_система начало конец - создание раздела linux с файловой системой начиная с позиции начало заканчивая конец, два последних параметра задаются в мегабайтах по умолчанию;
resizepart раздел конец - изменить размер раздела;
rm раздел - удалить раздел;
Работа с утилитой
Запускаем parted и выбираем нужный диск или раздел
(parted) select /dev/sda
Выводим информацию по разделам на этом диске
Создать таблицу разделов (мы создали таблицу разделов типа gpt, но можно выбрать одну из этих: msdos, aix, mac и д.р.)
Создать первичный раздел ext4 500 МБ.
Команде необходимо передать 4 параметра:
- тип (primary, logical или extended)
- тип ФС (ext2, ext4, fat16, fat32, linux-swap, NTFS, reiserfs, hfs, hfs+, hfsx, ufs, btrfs)
- начало раздела
- конец раздела
Создать еще один раздел: начало - 500M, конец - последний блок диска (за это отвечает параметр -0M)
Изменить размер раздела №2 с 500M до 250M
Удалить раздел 1
Задать имя boot разделу 1
Перед использованием раздела не забываем его отформатировать. Выходим из parted 'q' и форматируем в нужную fs утилитой mkfs
Опции утилиты:
- a - включение или выключения флага boot для раздела;
- d - удалить раздел;
- F - показать свободное место;
- l - вывести список известных типов разделов;
- n - создать новый раздел;
- p - вывести таблицу разделов;
- t - изменение типа раздела;
- i - вывести информацию о разделе;
- I и O - записать или загрузить разметку в файл сценария sfdisk;
- w - записать новую таблицу разделов на диск;
- q - выйти без сохранения;
- g - создать пустую таблицу разделов GPT;
- o - создать пустую таблицу разделов MBR
Показать все блочные диски и разделы
Большинство операций fdisk по разметке дисков выполняются в интерактивном режиме. Чтобы запустить fdisk в интерактивном режиме передайте утилите блочное устройство которое надо разметить.
Расширение раздела (не LVm) ВМ на лету при помощи утилиты fdisk
1. Заходим на нашу ВМ, смотрим что и сколько занимает, что необходимо увеличить (lsblk, df -h)
2. Увеличиваем размер виртуального диска (например sda) в среде виртуализации до нужного размера.
3. Возвращаемся на хост, пересканируем диск
echo 1>/sys/class/block/sda/device/rescan
4. lsblk - должны увидеть, что размер диска изменился
5. Увеличиваем раздел (порядок действий):
- fdisk /dev/sda
- p -просмотр существующих разделов
- d - удалить раздел. Если разделов несколько, указываем какой. При этом данные на диске удалены не будут!!!
- n - создаем новый раздел на всё свободное пространство (значения по-умолчанию, просто нажимаем на все вопросы "enter"
- w - сохраняем наши изменения
6. Обновляем таблицу разделов partx -u /dev/sda или просто перезагружаем
7. Расширяем файловую систему ext4 в разделе sda1 до конца раздела: resize2fs /dev/sda1
Для данных утилит нет необходимости расписывать действия, все интуитивно понятно.
cfdisk

gparted

Прежде всего нужно разобраться с уровнями дисковых абстракций LVM.
- Physical Volume (PV) – физический уровень. Физические диски инициализируются для использования в LVM.
- Volume Group (VG) – уровень группы томов. Инициализированные диски объединяются в логические группы с именем.
- Logical Volume (LV) — создается логический том на группе томов, на котором размещается файловая система и данные.

Создание LVM раздела
1. Чтобы диски были доступны для LVM, их нужно пометить (инициализировать) утилитой pvcreate:
# pvcreate /dev/sdс /dev/sdd
Как видим, оба диска отображаются.
Разберем информацию из вывода команды:
- PV Name – имя диска или раздела
- VG Name – группа томов, в которую данный диск входит (мы пока группу не создали)
- PV Size – размер диска или размера
- Allocatable – распределение по группам. В нашем случае распределения не было, поэтому указано NO
- PE Size – размер физического фрагмента. Если диск не добавлен ни в одну группу, значение всегда будет 0
- Total PE – количество физических фрагментов
- Free PE — количество свободных физических фрагментов
- Allocated PE – распределенные фрагменты
- PV UUID – идентификатор раздела
2. Следующий этап создание групп томов vgcreate. Чтобы добавить сразу два диска в VG группу, выполняем команду:
Как видим, диски объединились в группу vg_name и имеют общий размер 2,99 ГБ.
Разберем информацию из листинга команды vgdisplay:
- VG Name – группа томов, в которую данный диск входит.
- Format – версия подсистемы lvm, которая используется для создание группы (в нашем случае версия 2)
- Metadata Areas – область метаданных
- VG Access – уровень доступа к группе логических томов
- VG Size – общий объем дисков, которые входят в группу
- PE Size — размер физического фрагмента
- Alloc PE / Size – распределенное пространство
- VG UUID – идентификатор группы
3. Далее, в созданной ранее группе томов, создаем один или несколько логических разделов, используется lvcreate.
Следует учесть, что при созданни логических разделов, есть 2 варианта отображения: линейное и чередующееся. При линейном отображении данные пишутся линейно сначало на один диск, заполняя его до конца на 100%, а потом начинают писаться на второй диск. При чередующимся отображением данные по одному блоку записываются то на один диск, то на другой диск, тем самым равномерно заполняя пространство на дисках и увеличивая производительность (некое подобие RAID 0 striping). При использовании SSD дисков наиболее предпочтительно использовать чередующийся вариант отображения, т.к. такие диски резко теряют в производительности, когда дисковое пространство занято на 100%. За количество полос чередования отвечает опция -i, но помните, что количество полос не должно превышать количество дисков в группе томов.
Линейное отображение при записи выглядит так:

А так происходит заполнение чередующегося отображения
Три примера: с размером LV 1 ГБ, занимаем 50% / 100% доступного пространства.
1 # lvcreate -L 1G -n lv_name vg_name
2 # lvcreate -l 50%FREE -n lv_name vg_name
3 # lvcreate -l 100%FREE -n lv_name vg_name
# Создание логических разделов с чередующимся отображением
1 # lvcreate -L 1G -i 2 -n lv_name vg_name
2 # lvcreate -l 50%FREE -i 2 -n lv_name vg_name
3 # lvcreate -l 100%FREE -i 2 -n lv_name vg_name
lvdisplay с ключом -m отобразит информацию и о отображении
Разберем информацию из листинга команды lvdisplay:
- LV Path – путь к устройству логического тома (к диску или разделу)
- LV Name – имя логического тома
- VG Name – имя группы томов
- LV UUID – идентификатор логического тома
- LV Write Access – уровень доступа к логическому тому
- LV Creation host, time — информация о хосте, дата когда был создан логический том
- LV Size – размер диска, доступный для использования логическому тому
- Current LE – количество логических фрагментов
- Type - тип отображения (в нашем случае линейное)
- Physical volume - задействованные диски
- Physical extents - сколько физических экстендов (линий отображения)
4. LVM раздел создан. Осталось отформатировать раздел (например, в ext4), создать папку для монтирования раздела и добавить запись в fstab для автомонтирования раздела.
# mkdir /mnt/my_lvm
# echo "/dev/mapper/vg_name-lv_name /mnt/my_lvm ext4 defaults 0 0" >> /etc/fstab
# mount -a
Создание зеркального LVM раздела
LVM позволяет создать зеркальные тома для повышения отказоустойчивости хранения данных. В LVM зеркале данные одновременно хранятся на двух (или более) физических дисках (подобие RAID-1).
Процедура создания зеркального тома в LVM.
- Инициализация дисков
- Создаем VG группу
- Создадим зеркальный LVM том (опция -m - создать зеркальный том, 1- просто порядковый номер массива (может быть любой).
# vgcreate vg_mirror /dev/sd{b,c}
# lvcreate -l +100%FREE -m1 -n lv_mirror vg_mirror
Увеличение LVM раздела
1. Предположим на нашей группе томов vg_name занято не все свободное место разделом lv_name.
- Расширяем раздел на 1ГБ / до 100%
- увеличиваем размер файловой системы
# lvextend -l +100%FREE /dev/vg_name_lv_name
# resize2fs /dev/vg_name/lv_name – для ext2; ext3; ext4
# xfs_growfs /dev/vg_name/lv_name - для xfs
2. Увеличение LVM раздела за счет добавления нового физического диска sde:
- инициализируем диск sde
- добавляем диск в группу томов vg_name
- расширяем логический том lv_name
- изменяем размер ФС
# vgextend vg_name /dev/sde
# lvextend -l +100%FREE /dev/vg_name_lv_name
# resize2fs /dev/vg_name/lv_name
Уменьшение LVM раздела
Внимание! Уменьшение размера LVM раздела может привести к потери данных на разделе!
Лучшей практикой по уменьшению раздела считается копирование данных с уменьшаемого раздела на другой диск, уменьшение раздела и возврат данных на LVM раздел.
Порядок уменьшения раздела LVM:
- отмонтирование раздела
- проверка диска на ошибки
- уменьшение раздела ФС (в нашем примере уменьшение на 2 ГБ)
- уменьшение непосредственно тома LVM
- примонтирование раздела обратно
# e2fsck -fy /dev/vg_name/lv_name
# resize2fs /dev/vg_name/lv_name 2G
# lvreduce -L-2G /dev/vg_name/lv_name
# mount /dev/mapper/vg_name-lv_name /mnt/my_lvm
Удаление разделов, томов, устройств
Перед удалением необходимо отмонтировать раздел!
Порядок удаления:
- удаление раздела lvm
- удаление группы логических томов
- убрать метки с дисков
# vgremove vg_name
# pvremove /dev/sdc /dev/sdd
Монтирование / размонтирование
# mount [опции] <раздел> <точка монтирования>
Опции монтирования:
-t <файловая система> - можно указать принудительно ФС: iso9660 (CD-ROM), ext2, ext3, ext4, vfat (FAT, FAT32), ntfs (только для чтения), ntfs-3g (чтение/запись);
-r - монтирует в режиме только чтение;
-w - чтение/запись;
-a - монтировать все ФС, указанные в fstab, кроме тех, для которых указано noauto.
-o force - монтирование поврежденного раздела (если, например, раздел был неправильно размонтирован).
Примеры монтирования
Примонитровать каталог /dir с именем dir_tmpfs в оперативную память (размер 100МБ)
# umount [опции] <точка монтирования>
Если не удается размонтировать и система говорит, что ФС используется каким-либо процессом, можно воспользоваться утилитой lsof.
#lsof <точка монтирования> - покажет, какими процессами занята примонтированная ФС.
Так же можно попробовать принудительное размонтирование с помощью опций -f и -l

