📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Linux: диски, разделы, файловая система.

ИТ-Видео28:06

Transcription

Добрый день, коллеги! Я всех приветствую. Вы смотрите канал "Найти видео". Меня зовут Илья Русь, и сегодня мы поговорим про идеологию хранения данных в Linux. Чем эта идеология отличается от Windows, и о том, как устроена работа с дисковой системой в операционной системе Linux.

Данное видео — это продолжение серии видео про Linux для начинающих, поэтому, если вам интересна данная тема, смотрите плейлист на канале, а эти видео, которые так и называются "Linux".

Пока мы не начали, позвольте сделать короткое объявление. Каждый год перед сентябрем я делаю акцию "Back to School", где предлагаю практически максимальные скидки на собственные курсы, и в этом году не будет исключение. Запускается акция "Back to School 2020-2025". В ближайшие две недели вы сможете купить курсы на сайте courseforet.com с максимальной скидкой. Основная пачка курсов продается со скидкой 40 процентов. Если вы хотите купить курс, используйте купон "back40" на сайте courseforet. На два последних курса, самых новых, которые вышли этим летом, действует скидка 15 процентов. Я долго думал, делать или не делать на данные курсы скидку, но для того, чтобы народ не путать, на эти курсы также доступна скидка, но с купоном "back15" — 15 процентов. Так что, если кто-то хотел купить какой-то курс или подобрать себе в коллекцию новый, сейчас самое время.

Давайте начнем. К чему мы привыкли в Windows? Ну, прежде всего, мы можем подключить несколько физических дисков. На диске мы создаем один или несколько разделов. Разделам даются буквы. При формировании раздела вы определяете файловую систему. На один из разделов мы ставим систему, и обычно этот раздел обозначается буквой C. Система после установки дает нам определенную структуру каталогов, ну то есть у вас есть Windows, Program Files и так далее, и дальше вы добавляете свои каталоги на ваши разделы и, собственно говоря, так и живете.

На самом деле, в Linux приблизительно все то же самое. Одно из самых существенных и серьезных отличий то, что в операционной системе Linux файловая система представляется единым корневым каталогом, обозначаемым как слэш. Если в Windows мы пишем букву диска, двоеточие, обратный слэш, Windows, то в Linux мы пишем прямой слэш, название директории, еще один слэш, вложенная директория, еще один слэш, еще одна вложенная директория, еще один слэш и, возможно, файл. Ну, как вы понимаете, количество слэшей, директорий, файлов зависит от того, где вы находитесь.

Я думаю, что все хотя бы раз выполняли команду `ls`, которая вам показывает директории. Если мы выполним команду `ls` в корне, то увидим определенную структуру каталогов или директорий. Вы должны понимать, что вот этот вывод вообще никак нам не говорит о том, где это все располагается, на каком диске и на каком разделе. Все потому, что раздел может быть подмонтирован к директории, и по сути, каждая директория физически будет лежать на отдельном разделе и, возможно, даже на отдельном диске.

При этом стандартные директории, которые вы видите в корне, назначение этих директорий регламентируется стандартом иерархии файловой системы FHS (File System Hierarchy Standard). Стандарт, который упрощает, унифицирует расположение файлов, каталогов, файлов в системе в Linux. То есть, вот эти директории они должны быть. Linux-дистрибутивы разные, в той или иной степени придерживаются этого стандарта. Поэтому, если вы зайдете в корень и выполните `ls -la`, вы увидите приблизительно одну и ту же картинку, один и тот же набор директорий. Сделано это все для того, чтобы, работая с легионом различных дистрибутивов, вы не офигели от названия директорий, от их количества и так далее. То есть корень один, а если у вас много дисков и разделов, то разделители дисков просто будут подмонтированы к определенным директориям, и выходя по своему перевернутому дереву, можете ходить абсолютно по разным дискам. Хотя по перевернутому дереву я имею в виду использование `cd` и вход в определенную директорию.

Я не вижу особого смысла рассказывать о том, что в какой директории должно храниться, так как все это очень хорошо описано в таблице, и зазубривать это нет никакого смысла. Просто забейте в Google и Википедия FHS, и вы получите таблицу с описанием всех директорий. В процессе работы вы уже просто знаете, где что находится.

Кстати, если вы думаете, что вот такой один корень и разделы, которые монтируются к разным директориям, это дичь, то я вас разочарую. То же самое работает и в Windows, просто далеко не всегда и не все это используют. Давайте покажу фокус. У меня есть виртуальная машина, у нее есть основной диск, который побит на несколько разделов, и есть раздел с буквой C — система. И к этой виртуальной машине подключен еще один диск, но он онлайн, но еще не отформатирован. Так вот, когда вы создаете новый раздел, то вы можете выполнить монтирование этого раздела к пустой интерфейсной папке. То есть выбрать какую-нибудь папку, например, "Data". Давайте сейчас создам новую директорию, назову ее "disk", и к этой директории подмонтирую мой раздел. Он, естественно, будет отформатирован NTFS. Если я зайду на диск C, то увижу мой диск. Соответственно, зайдя в него, и все, что создам я здесь, оно будет храниться на том диске, который был подмонтирован к этой папке. Так что идеология монтирования она есть везде, и в интерфейсе Windows в том числе.

Давайте с вами переключимся на Linux. В данном случае я использую CentOS. Абсолютно чистый. И сейчас я сразу хочу понять, а какие диски подключены к моему серверу. Для этого вы, для того чтобы получить эту информацию, можете использовать утилиту, программу, которая называется `lsblk`. Как ее легко запомнить? `ls` — это "list", то есть вывести список. `blk` — это "block", то есть блочное устройство. Ну, а блочные устройства, в свою очередь, это могут быть диски, это могут быть CD-ROM, может быть, флешки.

И так, я выполнил `lsblk` на своем сервере и вижу следующее. Я вижу, что у меня есть три жестких диска: SDA, SDB и SDC. SR0 — это мой CD-ROM, его я сразу откидываю. Есть три диска, но однозначно здесь уже можно сказать, что сейчас в системе нормально используется только диск SDA, почему? Потому что этот диск побит на разделы. Есть разделы SDA1, SDA2, SDA3, и каждый из этих разделов подмонтирован определенным образом. Например, SDA1 подмонтирован к папке `/boot/efi`. SDA2 подмонтирован к директории `/boot`. А SDB и SDC — они вообще сейчас не имеют разделов, но я вижу, что один диск размером 50 гигабайт, другой размером 60 гигабайт.

Вы можете задать мне вопрос: а почему под SDA3 есть три дополнительных элемента: LVM, root, swap? Эти элементы — это порождение такой технологии, как LVM (Logical Volume Manager). Данный LVM добавляет дополнительный уровень абстракции между физическими и логическими дисками. То есть, говоря простым языком, вы можете взять LVM и определенный раздел побить еще на дополнительные блоки, и каждый из этих блоков подмонтировать к определенной директории. Вы можете сказать: а зачем это вообще, в принципе, нужно? Ведь мы можем взять раздел и подмонтировать к нужной директории. Если нам нужно несколько разделов к разным директориям, то мы можем просто, в принципе, сделать несколько разделов, подмонтировать к разным директориям. Да, абсолютно верно. Но этот менеджер логических дисков он используется в Red Hat, и в данном случае в CentOS используется по умолчанию. То есть, когда вы ставите систему, он уже изначально этот раздел побил и порезал LVM и подмонтировал так, как ему нужно. LVM, в свою очередь, дает кучу разных возможностей, включая снапшоты. Но нас сейчас LVM не интересует. Просто сделайте для себя пометку, что у нас есть диск SDA, соответственно, он побит на три раздела, ну и третий раздел еще дополнительно сегментирован с помощью LVM.

Вывод `lsblk` абсолютно ничего не говорит вам о том, сколько места занято. Да, вы можете понять общий размер раздела или диска, но не, но не поймете, сколько у вас места занято, сколько еще осталось. Для того, чтобы понять или получить информацию о свободном месте, вы можете использовать утилиту `df -h`. Расшифровывается как "disk free", то есть свободное место. Сразу может броситься в глаза, что у нас есть информация до по файловой системе tmpfs, tmpfs и так далее. Что это вообще такое? Отбрасывайте tmpfs, потому что это временное файловое хранилище в Linux. Это так называемый RAM-диск, диск, который размещается в оперативной памяти. В принципе, это тоже в Windows можно сделать с помощью различных утилит. Вы можете в оперативной памяти создать диск и к нему обращаться как к файловой системе. То есть, нас это сейчас не интересует.

Мы видим, что у нас есть раздел SDA1, который подмонтирован к `/boot/efi`, и видим, что на нем используется всего 6,8 мегабайт и куча свободного места. Есть SDA2 — раздел, который подмонтирован к `/boot`, видим, что там используется 15 процентов. И есть SDA3, который, в свою очередь, делится на LVM, root, корень. Там 50 гигабайт. Давайте посмотрим, насколько он занят. То есть корень сейчас и все, что в корне находится, занято всего на 4 процента.

Для того, чтобы убедиться, что данная информация корректна, сделаем небольшой эксперимент. Для этого в корне создадим директорию, назовем ее "test". Захожу в эту директорию "test" и внутри этой директории создаю файл. Файл, ну, какой-нибудь достаточно большой. Создать файл можно с помощью программки `fallocate`, указать размер 1 гигабайт и, ну, соответственно, название файла. То есть, если мы сейчас с вами посмотрим, то увидим, что действительно есть такой файл, и у него определенный размер. То есть, если мы сейчас выполним с вами `df -h` еще раз, мы увидим, что количество свободного места в корне уменьшилось. Почему? Потому что появился файл размером 1 гигабайт. Давайте создадим с вами еще один файл, назовем его "test2", и еще раз выполним `df -h`. И теперь у нас в корне 6 процентов использовано, а уже 8. То есть, свободное место уменьшается. Понятно, почему я создал директорию, которую назвал "test", директорию положил в корень, следовательно, у меня директория создается вот в этой файловой системе на диске SDA3, в разделе LVM, root, который создан с помощью LVM. И так, у меня сейчас абсолютно никак не используются вот эти два диска. Я хочу их, во-первых, задействовать и подмонтировать каждый диск к определенной директории.

Как это сделать? Сделать можно несколькими способами. Я использую два разных способа. Я думаю, все многократно слышали такое, такой термин, фразу, что "все в Linux является файлом". Она не до конца верна, но в то же время в большинстве случаев это действительно так. И если мы говорим про диски, то для каждого диска есть свой файл, который находится в директории `/dev`. То есть, если мы с вами зайдем в директорию `/dev`, давайте сейчас вот так сделаем, то увидим здесь кучу разных файлов. Но куча разных меня не интересует. Меня интересуют файлы, которые представляют определенные диски. А я вам напоминаю, что у меня есть диск SDB и SDC. Поэтому, если я хочу сейчас SDB диск использовать, то я должен создать на нем раздел.

Как создать? Можно использовать специальную утилиту `cfdisk`. Для того, чтобы создать раздел через эту утилиту, вам достаточно просто скормить путь к файлу с вашим диском, и в данном случае это будет `/dev/sdb`. Ну, естественно, если мы хотим работать с дисками здесь, надо писать `/dev/sdc` и так далее. Далее он стандартно спрашивает меня тип, что я буду использовать GPT. Сколько свободного места будет задействовано. Здесь такой полуграфический интерфейс. Я выбираю 50 гигабайт, то есть целиком. И в конце, когда я все выбрал, все сделал, я нажимаю "write", то есть записать эту информацию. Действительно ли я хочу записать данные? "y" — то есть, если вы "write" и, соответственно, сохранить не сделаете, то все это будет сброшено.

И так, замечательно. Мы видим, что мы сейчас только что создали раздел через `cfdisk`. Давайте еще раз выполним команду `lsblk`. Для начала очищу экран. `lsblk`. Что мы видим? Мы видим, что у диска SDB появился раздел 50 гигабайт — SDB1. Если бы мы нарезали несколько разделов, был бы SDB1, SDB2 и так далее. Но если вы выполните `df -h`, то вы не увидите здесь информации о этих 50 гигабайтах. Почему? Потому что пока этот раздел не подмонтирован ни к одной директории, и более того, там не отформатирована под определенную файловую систему.

И так, что мы с вами сделаем? И в каком порядке? Мы сейчас в начале возьмем этот раздел и отформатируем его под файловую систему ext4. Файловая система ext4 является одной из самых современных и то, журнале руемая файловая система. Поддерживается всеми Linux-ами, и, в принципе, если вы начнете сейчас смотреть, какие вообще файловые системы существуют под Linux, вы увидите, что их там больше десятка. Но есть золотое правило: если вы не знаете, какая файловая система вам нужна, используйте ext4. Но это, в принципе, как и в Windows, там тоже есть FAT, FAT32 и так далее, но, в принципе, все используют NTFS, потому что если вы не знаете, зачем вам, условно, RAID, используйте NTFS. Здесь тоже самое. Есть золотой стандарт ext4. Все, в принципе, на нем абсолютно нормально живут, как минимум, пока вы не знаете, зачем вам другая.

Так вот, мне сейчас нужно отформатировать под файловую систему ext4 мой раздел, а потом его подмонтировать к определенному диску. Как отформатировать? Используется вот такая конструкция: `mkfs.ext4`. Ну, это имеется в виду "make filesystem". Далее через точку ставим, какая нам файловая система нужна, и указываем путь к файлу нашего раздела. Раздел у нас `/dev/sdb1`. Это именно раздел, не диск. И так, все замечательно. Теперь у нас есть файловая система ext4 на нашем разделе. Но чтобы это использовать, нужно куда-нибудь этот раздел подмонтировать.

Давайте с вами сделаем в корне директорию, которая будет называться "new_disk". Итак, я делаю "new_disk1", пусть называется вот так, в корне создал папочку. Давайте с вами в корень перейдем и посмотрим, появилась ли там эта папочка. Да, "new_disk1" есть. А теперь я хочу выполнить монтирование. Монтирование выполняется очень легко. Вы берете команду `mount`, далее указываете путь к файлу вашего раздела `/dev/sdb1`, и далее указываете директорию, к которой вы хотите выполнить монтирование. То есть, в моем случае "new_disk1". Нажимаю. Все замечательно, смонтировано.

Теперь берем с вами `df -h` с ключиком `-h`, и видим, что у нас появилась файловая система, путь к файлу данного раздела `/dev/sdb1`, 49 гигабайт, и подмонтировано к директории "new_disk1". Это один из вариантов, как можно создать раздел, создать файловую систему и подмонтировать к к директории.

Есть альтернативный вариант, который вы также можете использовать. Этот альтернативный вариант — использование отдельной программы `fdisk`. То есть, вы берете `fdisk`, далее указываете путь к файлу вашего диска. Тут всегда будет одно и то же: `/dev/`, потом аббревиатура. То есть, в данном случае будет `/dev/sdc`. Это мой третий диск. Запускаете. И первый раз, когда я запускал, меня эта команда загнала в ступор, не понял, что он от меня хочет. На самом деле, она хочет, чтобы вы командовали через видение букв. И если вы букв не знаете, какие команды, какие буквы, то просто нажмите `m`, и он вам скажет, какие варианты вообще есть. Но если так присмотреться, мы видим, что нам нужно создать новый partition — это "new partition", буковка `n`. Нажимаем буковку `n`. Замечательно. Он нас спрашивает: primary partition или extended? В нашем случае, естественно, primary. Дальше он спрашивает номер partition, но поскольку это здесь, мы можем создать до четырех разделов на одном диске, это нормально. Спрашивает первый сектор, последний сектор. Ну, то есть, если я хочу сейчас создать раздел, который займет весь диск, я, естественно, не должен выбирать ни первый сектор, ни последний. Я просто нажимаю Enter, он дефолтно наберет самый первый, дефолтно наберет самый последний, и был создан раздел размером 60 гигабайт. Все замечательно. Теперь мне нужно сохранить эту информацию. Ввожу `w`, все, вышел. То есть, можно пойти через вариант с диска на диск. Опять же, не сделает вам файловую систему. То есть, если мы выберем `df -h`, мы увидим, что у нас файловая система не появилась. Почему? Потому что то же самое нужно выполнить форматирование в файловую систему ext4 и потом какой-то директории это все смонтировать. То есть, уже по аналогии: берем `mkfs.ext4`, указываем путь до файла с разделом. Замечательно. Потом создаем директорию, ну, назовем ее "new_disk2", и дальше монтируем наш файл с разделом к директории "new_disk2". Все замечательно.

То есть, сейчас у меня используются оба диска, и они подмонтированы к разным директориям. Давайте в этом убедимся. Я сейчас возьму и выведу на экран `lsblk`. Мы видим, что у нас есть два диска, на каждом диске создана, потому и сразу видно, куда эти тома подмонтированы: на "new_disk1" и "new_disk2". Если мы хотим получить информацию по файловой системе, в частности, по свободному месту, мы берем `df -h`, и видим, что у нас сейчас SDB1 подмонтирован к "new_disk1", `/dev/sdc1` подмонтирован к "new_disk2". Естественно, используя команду `umount`, вы можете точно так же выполнить размонтирование.

А теперь давайте с вами взглянем на LVM, на общую его идеологию. Но поскольку оно используется в том же, например, CentOS, то есть еще раз, LVM — это дополнительный менеджер. То есть, он работает отдельно и позволяет вам управлять вашей дисковой системой, используя идеологию LVM. А как выглядит идеология LVM? Она состоит из нескольких компонентов. Первое — PV, это Physical Volume, под физическим томом понимается определенное блочное устройство, то есть целый диск, раздел на диске и так далее. Далее вы эти блочные устройства объединяете в Volume Group. Volume Group — это группа томов, которые можно использовать как банк дисковых ресурсов. То есть, у вас есть диски, вы их объединяете в Volume Group, а дальше на основе этой Volume Group нарезаете Logical Volume, то есть, на логических томов, на Logical Volume, по сути, размещаются файловые системы. И когда вы нарезаете Logical Volume, они оторваны от физики, от Physical Volume. То есть, вы должны поднять самое главное — это еще один уровень абстракции при работе с вашими дисками. И так далее. То есть, берутся диски, записываются в Volume Group, а дальше уже на базе этого дискового пула нарезаются логические тома и точно так же под монтируются к определенным директориям. Собственно говоря, CentOS это по умолчанию и делает. Да, это CentOS делает по умолчанию, но в реальной жизни вы с LVM можете не работать. Все, что я показал вам сейчас до этого, это работа без всякого использования LVM.

Несмотря на то, что мы сейчас не будем разговаривать про LVM, давайте общую информацию посмотрим. Есть несколько простых команд. Например, `pvs`, то есть, она показывает диски либо тома, которые используются LVM. И мы видим, что у меня LVM используется только один раздел, который находится на диске SDA. Дальше вы можете вывести информацию по Logical Volume. Для этого используется опять же команда из трех букв: `lvdisplay` (или `lvs`). И мы видим, что здесь присутствует три Logical Volume: `root`, `swap`. И `root`, как вы понимаете, эта информация абсолютно не расходится с тем, что вам показывает `lsblk`. Поэтому, да, LVM в CentOS используется по умолчанию. Вот так. Но при этом, когда вы добавляете новые диски, вы не обязаны использовать LVM.

Теперь один небольшой момент. Давайте с вами переключимся на Ubuntu. А вся ли информация, которую я говорил, справедлива для другого дистрибутива и вообще из другой ветки? Давайте с вами воспользуемся `lsblk` и `df -h` с ключиком `-h`. И видим информацию. И первое, что бросается в глаза, когда вы когда вы вводите `lsblk`, кроме нашего диска SDA, на котором создано два раздела, и кроме нашего CD-ROM, есть ещё куча дисков с именем `loop`. И вот это может вас ввести в легкий ступор.

И так, еще раз. На этом сервере Ubuntu есть один диск SDA. Этот диск имеет два раздела без всяких LVM. Два раздела. Один раздел размером 120 гигабайт подмонтирован к корню. Второй раздел подмонтирован к директории `/boot/efi`. Плюс CD-ROM. Если мы посмотрим на свободное место, мы увидим, что SDA1 здесь занято только два процента. И SDA2, который подмонтирован к корню, там используется 6 процентов. То есть, место довольно много. Так что такое `loop`? Чтобы оно у вас не пугало. Помните, в операционной системе Windows довольно давно существует такой функционал, когда вы создаете VHD или VHDX-файл, он хранится у вас на файловой системе и подмонтируется как файловая система. То есть, вы можете создать VHDX-файл, его же подмонтировать как диск, отформатировать и так далее. То есть, можно сделать вид, что у вас на сервере там 50 дисков, на самом деле это 50 файлов, которые лежат на одном диске, но операционная система это видит как огромное количество, как множество дисков. То есть, это обычное под монтирование VHD или VHDX файла. `loop` — это то же самое, один в один. Просто они по умолчанию используются в Ubuntu. То есть, что такое `loop`? `loop` — это файл, который был создан, и который впоследствии был подмонтирован как файловая система. То есть, это не диски, это не разделы, это файлы, которые хранятся на вашей файловой системе и просто под монтированы как отдельные блочные устройства. Поэтому, пусть вас это не пугает. `loop` можете откидывать. Это просто вот Ubuntu так подняла и настроила, видимо, они ей для чего-то нужны.

И когда мы смотрим `df -h`, здесь та же самая `tmpfs`. Вы можете смело откидывать, потому что это RAM-диски, которые были созданы. То есть, по сути, здесь можно откинуть все, что касается `loop` — этих файлов. Здесь можно откинуть все, что касается `tmpfs`. Она нам не нужна. И останется только две строчки: раз — `/dev/sda1` и два — строчка `/dev/sda2`. Один раздел, второй раздел. Один подмонтирован к корню, второй к `/boot/efi`.

Поэтому, если вы научитесь пользоваться такими утилитами, как `lsblk`, `df -h`, `fdisk` и `cfdisk`, то, в принципе, вам никто не будет страшен. Вы всегда поймете, какие диски есть, какие разделы созданы, сколько места свободного, куда они под монтированы, к каким директориям.

Я очень надеюсь, что информация из этого видео было вам полезно, и самое главное, было вам понятно. Я постарался максимально кратко и максимально понятно объяснить. Большое спасибо, коллеги, за внимание и до новых встреч в эфире!