Управление устройствами хранения данных в Linux-системах составляет немалую часть общей работы по администрированию серверов. Это включает как первоначальную подготовку и конфигурирование файловых хранилищ данных, так и последующие работы, связанные с выполнением текущих задач администрирования, например, монтирование удалённых каталогов или внешних подключаемых устройств. Для оперативного решения указанных вопросов Администратору необходимо владеть полным объёмом информации о текущем состоянии хранилища и знать, какие виды встроенных команд и / или внешних утилит использовать в том или ином случае. Рассмотрим эти вопросы более детально.
Подготовка файловых хранилищ в Linux
В качестве энергонезависимых устройств хранения данных в Linux в основном используются, так называемые, блочные устройства, в которых информация записывается и считывается блоками фиксированного размера. К ним относятся хорошо известные винчестеры или жёсткие диски, твёрдотельные SSD устройства, а также разнообразные аппаратные средства, использующие флэш память, и некоторые другие. В пределах системы все они имеют своё символьное имя, в зависимости от типа, например, sda (от SCSI), vda, cdrom (от CD-ROM), и находятся в каталоге /dev.
Для их практического использования необходимо выполнить ряд подготовительных операций:
- Разбить на разделы;
- Отформатировать;
- Произвести монтирование файловой системы.
Разбиение на разделы позволяет получить нужную структуру хранилища, в котором, к примеру, могут быть выделены отдельные секции для системных программ и резервных копий.
Форматирование разделов связано с применением того или иного способа хранения и считывания данных, что определяется использованием той или иной файловой системы, которых существует множество. На данный момент для Linux-систем наиболее передовой и безопасной для использования в условиях открытого Интернет-пространства является файловая система ext4.
Монтирование позволяет указать системе место (каталог) в котором будет выстраиваться дерево каталогов подключаемого диска или раздела, так называемая, точка монтирования. Использование этого механизма позволяет легко подключить к системе внешнее устройство хранения данных с любым типом файловой системы.
Linux, как и многие другие операционные системы (ОС) поддерживает наличие энергозависимых устройств или хранилищ, информация в которых исчезает после отключения электропитания компьютера. Это, так называемые, псевдоустройства. Они, в большинстве своём, имеют специальные символьные имена, к примеру, devtmpfs или tmpfs (временная файловая система). Работа с ними принципиально ничем не отличается от работы с реальными устройствами. Они также имеют общий размер, занятое и свободное пространство, точку монтирования и другие признаки реальных устройств.
В соответствии со сказанным, все программные средства для работы с устройствами хранения данных в Linux можно разбить на следующие группы:
- Утилиты информационно-управляющего типа;
- Программные средства создания дисковых разделов и их форматирование;
- Команда монтирования файловых систем.
Ниже будут рассмотрены программные средства каждой из указанных групп.
Утилиты информационно-управляющего типа
Такие программы позволяют получить полную информацию о текущем состоянии всего файлового хранилища, развёрнутого в системе, в частности:
- Информацию о текущем использовании дискового пространства каждого из подключенных устройств;
- Характеристики носителей – имя, идентификатор, размер и т. д.;
- Тип устройства – диск, раздел и т. д.;
- Информацию о всех разделах и установленных на них файловых системах;
- Способ подключения и точку монтирования.
На основе полученной информации можно в дальнейшем принимать решения о возможных путях коррекции, изменения или развития структуры хранилища.
Для начала, получим интересующую нас информацию о текущем использовании всего дискового пространства нашей системы, находящейся под управлением ОС Ubuntu 22.04. Для этого воспользуемся командой df с параметром –h, который выводит информацию в удобном для нас виде. Наберём в терминале
$ df -h
С целью удобства анализа, ниже мы вывели результат выполнения команды.
Filesystem | Size | Used | Avail | Use% | Mounted on |
---|---|---|---|---|---|
tmpfs | 193M | 2.5M | 191M | 2% | /run |
/dev/vda2 | 24G | 9.9G | 14G | 44% | / |
tmpfs | 964M | 0 | 964M | 0% | /dev/shm |
tmpfs | 5.0M | 0 | 5.0M | 0% | /run/lock |
tmpfs | 193M | 4.0K | 193M | 1% | /run/user/0 |
Как видим, в системе установлено только одно физическое устройство хранения данных с именем vda; общая его ёмкость составляет 24 Gb; использовано 9,9 Gb (44%); свободно – 14 Gb; точка монтирования – корневой каталог.
Все остальные носители являются псевдоустройствами, то есть, временными с символическим именем tmpfs. Каждый из них смонтирован в своём каталоге и выполняет определённые системные функции. Ёмкость каждого из них не превышает 1 Gb.
Для эффективного отслеживания характеристик, связанных с блочными устройствами целесообразно использовать команду lsblk, являющуюся своеобразным аналогом хорошо известной команды ls для исследования каталога. Эту команду лучше запускать с приставкой sudo во избежание получения некорректных результатов, связанных с недостатком полномочий.
Используем её в нашей системе для уточнения данных. Наберём в терминале:
$ sudo lsblk
В результате, мы получили информацию об используемых блочных устройствах, к которой относятся:
- Его имя в /dev;
- Тип;
- Размер;
- Точка монтирования.
Команда вывела все эти данные, а также показала все имеющиеся разделы (vda1 и vda2) физического носителя типа disk. Однако, это ещё не вся информация из той, которой должен владеть Администратор системы. В частности, отсутствуют данные о таких характеристиках носителей, как их идентификатор UUID и метка. Для их получения воспользуемся дополнительным параметром --fs этой же команды:
$ sudo lsblk --fs
Ниже выведен результат выполнения команды.
NAME | FSTYPE | FSVER | LABEL | UUID | FSAVAIL | FSUSE% | MOUNTPOINTS |
---|---|---|---|---|---|---|---|
loop0 | squashfs | 4.0 | 0 | 100% | /snap/core20/1828 | ||
loop1 | squashfs | 4.0 | 0 | 100% | /snap/core20/2015 | ||
loop2 | squashfs | 4.0 | 0 | 100% | /snap/lxd/22923 | ||
loop3 | squashfs | 4.0 | 0 | 100% | /snap/lxd/24322 | ||
loop5 | squashfs | 4.0 | 0 | 100% | /snap/snapd/20092 | ||
loop6 | squashfs | 4.0 | 0 | 100% | /snap/snapd/20290 | ||
sr0 | |||||||
vda | |||||||
├─vda1 | |||||||
└─vda2 | ext4 | 1.0 | 3cd87dc4-371e-4264-9b09-0058cf3bbe6e | 13G | 41% | / |
В результате, мы получили нужную нам информацию о физическом носителе – тип его файловой системы (ext4) и её версию (1.0); значение UUID (3cd87dc4-371e-4264-9b09-0058cf3bbe6e) и др. Эта информация может нам понадобиться в дальнейшем для изменения конфигурации накопителя.
Теперь узнаем топологию нашего диска с помощью параметра –t:
$ sudo lsblk -t
Программные средства создания дисковых разделов и их форматирование
Есть множество утилит для Linux, основная задача которых – работа с дисковыми разделами и их форматирование. Наиболее известные из них – GNOME Disks, KDE Partition Manager, GNU Parted ну и, конечно же, Fdisk – встроенное средство для работы в режиме командной строки.
Используем программу GNU Parted для решения нашей задачи – объединения двух разделов нашего диска в один. Для этого наберём в терминале:
$ sudo parted /dev/vda mklabel gpt
Здесь gpt – формат размещения таблиц дисковых разделов, составляющая часть технологии EFI.
Во время выполнения программы, в терминале будет выведено ряд вопросов, на которые нужно будет ответить. В частности, это сообщение об удалении данных с удаляемых разделов. Вопросы и ответы на них приведены ниже.
Теперь можно приступать к созданию единого загрузочного раздела ёмкостью на весь диск. Наберём в терминале:
$ sudo parted -a opt /dev/vda mkpart primary ext4 0% 100%
Здесь также придётся ответить на ряд вопросов.
В итоге, был создан новый раздел. Убедимся в этом с помощью соответствующей команды:
$ lsblk
Так и есть. В нашем устройстве присутствует только один раздел вместо двух, как было раньше. Теперь нам осталось отформатировать его под файловую систему ext4. Наберём в терминале:
$ sudo mkfs.ext4 -L datapartition /dev/vda2
Раздел успешно отформатирован.
Команды монтирования файловых систем
Основной командой Linux для выполнения операций монтирования файловых систем является mount, которая обычно используется с рядом параметров.
Формат команды следующий:
sudo mount {Набор параметров} {Полное имя монтируемого раздела} {Точка монтирования}
Вообще же, стандартом рекомендовано в качестве точки монтирования использовать либо /mnt, либо вложенный в него каталог, хотя, конечно же, это не принципиально.
Для примера, смонтируем раздел /dev/vda2 в каталоге /mnt/experiment. Для этого вначале создадим каталог experiment:
$ sudo mkdir -p /mnt/experiment
Команда монтирования будет иметь следующий вид:
$ sudo mount -o defaults /dev/vda2 /mnt/experiment
Любую смонтированную файловую систему всегда можно размонтировать. Например, в нашем случае команда размонтирования будет следующей:
$ sudo umount /mnt/experiment
Следует иметь ввиду, что все команды монтирования, выполненные вручную, действуют только на период времени текущего сеанса работы и, поэтому, целесообразно вписывать их в один из конфигурационных файлов, что гарантирует автоматическое монтирование любого количества устройств.
Отредактируем этот файл с помощью редактора nano:
$ sudo nano /etc/fstab
Вставим в конец файла следующую строку:
UUID=3cd87dc4-371e-4264-9b09-0058cf3bbe6e /mnt/experiment ext4 defaults 0 2
Здесь мы указали идентификатор нашего устройства, точку монтирования, тип файловой системы и выставили стандартные значения остальных параметров. После этого содержимое файла станет следующим:
Сохраним внесённые изменения и выйдем из редактора.
Теперь при каждой загрузке будет происходить монтирование файловой системы, согласно установленных нами параметров. И таких записей можно вставлять столько сколько нужно для работы Администратора.