Выбор файловой системы
Подобно Windows, Linux за свою жизнь повидала несколько разных файловых систем. Ubuntu «понимает» файловые системы Windows, но не установится на них. Ubuntu может сразу же записывать и считывать из разделов FAT16, FAT32 и VFAT и NTFS. Однако Windows не может работать с файловыми системами Linux, и вам придётся передавать файлы в и из Windows из-под операционной системы Ubuntu.
Помимо знакомых файловых систем Windows, вы можете выбрать несколько таких, которые вы, возможно, не знаете. Среди таких файловых систем — ext4. Ext4 в настоящий момент является одной из самых подходящих файловых систем для настольной системы. Файловые системы ext3 и ext2 сейчас используются редко: ext3 — чуть более старая версия ext4, и не имеет никаких преимуществ перед ext4, а ext2 не имеет журналирования, без него при, системном сбое будет трудно восстановить данные. Файловые системы BTRFS, XFS, ReiserFS, Reiser4, JFS и т.д. также можно использовать, однако их стоит выбирать исходя из понимания особенностей этих ФС (стоит почитать немного о разных ФС, что бы сделать правильный выбор). Раздел «swap» предназначен только для виртуальной памяти и в отличие от других файловых систем ему не требуется точка монтирования.
РАЗМОНТИРОВАНИЕ УСТРОЙСТВ В LINUX
Когда вы хотите завершить работу с устройством, особенно с флешкой, его нужно размонтировать. Для этого существует утилита umount. В качестве параметров она принимает точку монтирования или устройство. Например:
Теперь ваше устройство не смонтировано. Но иногда может возникнуть ошибка размонтирования. Система сообщит, что устройство занято: umount: /mnt: target is busy.
Проблему можно решить закрыв все программы, которые могут использовать любой файл в этой папке. Какие именно это программы вы можете узнать с помощью команды lsof:
Здесь вы видите всю необходимую информацию, чтобы понять что происходит и что с этим делать. Утилита вывела название программы, ее PID, и даже файл, с которым она работает. Вы можете завершить все программы, а потом снова повторить попытку или используйте опцию -l, файловая система будет отключена немедленно, несмотря на то, что она занята:
Монтирование файловых систем NFS вручную
Подключение удаленного общего ресурса NFS аналогично монтированию обычных файловых систем.
Чтобы смонтировать файловую систему NFS в заданной точке монтирования, используйте команду в следующей форме:
Выполните следующие действия, чтобы вручную смонтировать удаленный общий ресурс NFS в вашей системе Linux:
-
Сначала создайте каталог, который будет точкой монтирования для удаленного общего ресурса NFS:
Точка монтирования — это каталог на локальном компьютере, где должен быть смонтирован общий ресурс NFS.
-
Подключите общий ресурс NFS, выполнив следующую команду от имени пользователя root или пользователя с привилегиями sudo :
Где — это IP-адрес сервера NFS, — это каталог, который сервер экспортирует, а — локальная точка монтирования.
В случае успеха вывод не производится.
-
Чтобы убедиться, что удаленный том NFS успешно смонтирован, используйте команду или .
После монтирования общего ресурса точка монтирования становится корневым каталогом смонтированной файловой системы.
Когда вы монтируете общий ресурс вручную, подключение общего ресурса NFS не сохраняется после перезагрузки.
Дисковые файловые системы, применяемые в Ubuntu
- Ext4 — журналируемая файловая система, используемая в ОС на ядре Linux. Основана на файловой системе Ext3, но отличается тем, что в ней представлен механизм записи файлов в непрерывные участки блоков (екстенты), уменьшающий фрагментацию и повышающий производительность. В Ubuntu, начиная с версии 9.10, эта файловая система используется по умолчанию при автоматическом разбиении диска инсталлятором.
- Ext3 — журналируемая файловая система, используемая в ОС на ядре Linux. Является файловой системой по умолчанию во многих дистрибутивах. Основана на Ext2, но отличается тем, что в ней есть журналирование, то есть в ней предусмотрена запись некоторых данных, позволяющих восстановить файловую систему при сбоях в работе компьютера.
- Ext2 — файловая система, используемая в операционных системах на ядре Linux. Достаточно быстра для того, чтобы служить эталоном в тестах производительности файловых систем. Она не является журналируемой файловой системой и это её главный недостаток.
- BTRFS — Достаточно новая универсальная ФС, используемая в операционных системах на ядре Linux. Ее особенностями являются: индексное хранение структур данных (в В-деревьях), возможность создания снепшотов, и многие другие интересные вещи.
- XFS — высокопроизводительная журналируемая файловая система. Распределение дискового пространства — екстентами, храниение каталогов в B-деревьях. Автоматическая аллокация и высвобождение I-node. Дефрагментируется «на лету». Невозможно уменьшить размер существующей файловой системы. При сбое питания во время записи возможна потеря данных (хотя этот недостаток нельзя относить к одной только XFS, он свойственен любой журналируемой ФС, но, вместе с тем, XFS, по умолчанию, достаточно активно использует буферы в памяти).
- Fat16 — файловая система, сейчас широко используемая в картах памяти фотоаппаратов и других устройств.
- Fat32 — файловая система основанная на Fat16. Cоздана, чтобы преодолеть ограничения на размер тома в Fat16.
- NTFS — файловая система для семейства операционных систем Microsoft Windows. Поддержка в Ubuntu осуществляется специальным драйвером — NTFS-3G.
- HFS — файловая система, разработанная Apple Inc. для использования на компьютерах, работающих под управлением операционной системы Mac OS.
- HSF+ — файловая система, разработанная Apple Inc. для замены HFS. Является улучшенной версией HFS, с поддержкой файлов большого размера и использует кодировку Unicode для имён файлов и папок.
- JFS — журналируемая файловая система. В отличие от Ext3, в которую добавили поддержку журналирования, JFS изначально была журналируемой. На момент выхода в свет JFS была самой производительной из существовавших файловых систем. На текущий момент сохраняет за собой одно из лидирующих мест по этому показателю.
- SWAP — раздел жёсткого диска, предназначенная для виртуальной памяти (файла/раздела подкачки).
- ReiserFS — журналируемая файловая система, разработанная специально для Linux. Обычно под словом ReiserFS понимают третью версию (последняя — 3.6.21), а четвёртую называют Reiser4. В настоящий момент разработка Reiser3 прекращена.
- Reiser4 — журналируемая файловая система ReiserFS (4-я версия), разработанная специально для Linux. Одна из самых быстрых файловых систем для Linux (с включённым плагином-архиватором — самая быстрая).
- UFS — файловая система, созданная для операционных систем семейства BSD. Linux поддерживает UFS на уровне чтения, но не имеет полной поддержки для записи UFS. Родной Linux ext2 создан по подобию UFS.
О всех существующих файловых системах можно прочитать в этой статье.
Размонтирование файловых систем NFS
Команда отсоединяет (размонтирует) смонтированную файловую систему от дерева каталогов.
Чтобы отсоединить смонтированный общий ресурс NFS, используйте команду за которой следует либо каталог, в котором он был смонтирован, либо удаленный общий ресурс:
Если для монтирования NFS есть запись в , удалите ее.
Команда не сможет отсоединить общий ресурс, когда смонтированный том используется. Чтобы узнать, какие процессы обращаются к общему ресурсу NFS, используйте команду :
Как только вы найдете процессы, вы можете остановить их с помощью команды и отключить общий ресурс NFS.
Если у вас все еще есть проблемы с ресурса, используйте параметр ( ), который позволяет вам отключать загруженную файловую систему, как только она больше не занята.
Если удаленная система NFS недоступна, используйте параметр ( ) для принудительного размонтирования.
Как правило, не рекомендуется использовать опцию принудительного выполнения, так как это может повредить данные в файловой системе.
Как смонтировать файл образа диска (раздела)
Общий вид команды монтирования файлов образов следующий:
mount ОПЦИИ ОБРАЗ ДИРЕКТОРИЯ
В ней:
- ОПЦИИ — опции утилиты mount или опции монтирования
- ОБРАЗ — файл с образом диска
- ДИРЕКТОРИЯ — папка, где будут доступны файлы со смонтированного устройства
По сути, синтаксис монтирования образов с помощью mount отличается от монтирования диска тем, что вместо УСТРОЙСТВА указывается путь до ОБРАЗА. ОПЦИИ указывать необязательно, тип файловой системы будет определён автоматически.
К примеру, нужно смонтировать образ диска disk.ntfs, расположенный по пути /mnt/disk_d/disk.ntfs.
Начнём с создания временной точки монтирования в /tmp:
mkdir /tmp/disk
Монтируем образ /mnt/disk_d/disk.ntf в папку /tmp/disk:
sudo mount /mnt/disk_d/disk.ntfs /tmp/disk
Просмотрим содержимое образа disk.ntfs:
ls -l /tmp/disk
Мы можем видеть файлы, размещённые в образе disk.ntfs, их можно открывать и копировать.
Некоторые файловые системы (например, ISO образы) доступны только для чтения. Но в данном случае мы можем записать любые изменения в папку /tmp/disk и они сохраняться в файле disk.ntfs даже после размонтирования и повторного монтирования диска disk.ntfs.
Для размонтирования образа можно использовать любую из команд:
sudo umount /ПУТЬ/ДО/ОБРАЗА sudo umount /ТОЧКА/МОНТИРОВАНИЯ/
Монтирование ISO-образа
Легко смонтировать ISO-образ, чтобы вы могли получить доступ к его содержимому как части файловой системы.
Это будет работать с любым образом ISO. В этом примере мы используем Tiny Core Linux ISO, потому что он удобно небольшой и быстрый для загрузки. (Небольшой дистрибутив Linux с графическим интерфейсом, размером 18 МБ! Вероятно, у вас больше файлов .mp3.)
В той же директории, что и образ ISO, введите эту команду. Подставьте имя файла ISO, который вы монтируете.
sudo mount -t iso9660 -o loop TinyCore-current.iso / mnt
Поскольку нам нужно использовать вам нужно будет ввести свой пароль.
Опция (type) сообщает какой тип файловой системы мы монтируем. Это файл ISO, поэтому мы предоставляем типа .
Флаг (опции) используется для передачи дополнительных параметров для . Наш параметр это .
Мы используем для принудительного чтобы использовать файл устройства loop для подключения к нашему ISO-образу. Файл устройства цикла позволяет монтировать файл (например, образ ISO) и обрабатывать его так, как если бы он был устройством хранения.
Файлы устройств — это специальные файлы, используемые в качестве интерфейса, поэтому подключенные устройства выглядят так, как если бы они были обычным файлом файловой системы. Это часть всего, что в Linux является философией файлового дизайна.
Существует много разных типов файлов устройств. Мы видели это раньше, когда отметили, что единственная файловая система на этом тестовом компьютере была смонтирована на и называлась .
Чтобы быть более точным, эта файловая система находится на устройстве хранения, подключенном к файловой системе через файл устройства и файловую систему на этом устройстве хранения, смонтированную в .
Конечно, мы должны указать имя ISO-образа и сообщить , где мы хотим файловую систему. Мы выбрали .
ISO-образ смонтирован. Напоминание о том, что ISO-образы всегда монтируются в режиме только для чтения, появляется в окне терминала.
Монтирование Samba Share
Samba — это набор программных сервисов, которые обеспечивают взаимозаменяемость общего доступа к сетевым ресурсам между Linux и Unix-подобными операционными системами и операционными системами Windows.
Настройка Samba выходит за рамки этой статьи. Но если у вас есть авторизованный доступ к общему ресурсу Samba, который был предоставлен вам, вы можете подключить его в Linux.
Raspberry Pi, подключенный к той же сети, что и тестовая машина, имеет общий ресурс Samba. Это каталог с именем Backup, которому Samba присвоено имя «share». Давайте создадим SSH- подключение к нему и посмотрим на содержимое общего каталога. Общий каталог находится на USB-накопителе, смонтированном на Pi.
Имя пользователя — а сетевое имя Raspberry Pi — .
ssh pi@marineville.local
ls / media / pi / USB64 / Backup
выход
Пользователь команду и запрашивает пароль Raspberry Pi.
Они предоставляют свой пароль и проходят проверку подлинности. окна терминала меняется на потому что он подключен к Raspberry Pi.
Они перечисляют содержимое общего каталога в . Содержимое — это две директории, одна называется а другая — . Итак, теперь мы знаем, чего ожидать, когда мы монтируем общий ресурс Samba.
Они чтобы отключиться от Raspberry Pi, и приглашение меняется на .
Чтобы использовать Samba, вы должны установить пакет .
Используйте для установки этого пакета в вашу систему, если вы используете Ubuntu или другой дистрибутив на основе Debian. В других дистрибутивах Linux используйте инструмент управления пакетами вашего дистрибутива Linux.
sudo apt-get установить cifs-utils
После завершения установки подключите общий ресурс с помощью команды, подобной следующей, изменив IP-адрес, имя общего ресурса и точку подключения (которая уже должна существовать) в соответствии с вашими обстоятельствами.
sudo mount -t cifs -o учетные данные = / etc / samba / creds, uid = 1000, gid = 1000 //192.168.4.13/share / media / dave / NAS
Давайте разберем части этой команды.
- -t cifs : тип файловой системы — cifs.
- -o учетные данные = / etc / samba / creds, uid = 1000, gid = 1000 : параметры параметров — это путь к файлу с именем который защищен и содержит имя пользователя и пароль для пользователя Raspberry Pi; идентификатор пользователя (UID) и идентификатор группы (GID), которые используются для установки владельца и группы корня файловой системы.
- //192.168.4.13/share : сетевое расположение устройства с общим ресурсом Samba и имя Samba общего каталога. Корнем общего ресурса является каталог с именем , но его общее имя Samba настроено на .
- / media / dave / NAS : имя точки монтирования. Вы должны создать свою точку монтирования заранее.
Получив доступ к нашей точке монтирования в мы получаем доступ к общему каталогу на Raspberry Pi по всей сети. Мы можем видеть две папки на Raspberry Pi, которые называются и .
cd / media / dave / NAS
Как узнать имена дисков, как просмотреть все диски в системе
Начать нужно с того, чтобы узнать имя диска, который мы будем изменять. В Linux совсем непохожая на Windows система обозначения дисков. Вместо привычных дисков C, D, E и так далее, в Linux диски это устройства в папке /dev/. В dev вообще все возможные устройства, даже весьма экзотические, не существующие в Windows.
Чтобы посмотреть доступные диски, выполните команду:
sudo fdisk -l
Как видно из скриншота, имеется диск /dev/nvme0n1. Затем перечислены два устройства /dev/nvme0n1p1 и /dev/nvme0n1p2. По совпадающему части названия nvme0n1 можно понять, что это разделы, на которые разделён диск /dev/nvme0n1.
Также имеется диск /dev/sda, который не разделён ни на какие разделы — именно его я и буду подключать.
Практический пример использования файловых систем
Владельцы мобильных гаджетов для хранения большого объема информации используют дополнительные твердотельные накопители microSD (HC), по умолчанию отформатированные в стандарте FAT32. Это является основным препятствием для установки на них приложений и переноса данных из внутренней памяти. Чтобы решить эту проблему, необходимо создать на карточке раздел с ext3 или ext4. На него можно перенести все файловые атрибуты (включая владельца и права доступа), чтобы любое приложение могло работать так, словно запустилось из внутренней памяти.
Операционная система Windows не умеет делать на флешках больше одного раздела. С этой задачей легко справится Linux, который можно запустить, например, в виртуальной среде. Второй вариант — использование специальной утилиты для работы с логической разметкой, такой как MiniTool Partition Wizard Free. Обнаружив на карточке дополнительный первичный раздел с ext3/ext4, приложение Андроид Link2SD и аналогичные ему предложат куда больше вариантов.
Флешки и карты памяти быстро умирают как раз из-за того, что любое изменение в FAT32 вызывает перезапись одних и тех же секторов. Гораздо лучше использовать на флеш-картах NTFS с ее устойчивой к сбоям таблицей $MFT. Небольшие файлы могут храниться прямо в главной файловой таблице, а расширения и копии записываются в разные области флеш-памяти. Благодаря индексации на NTFS поиск выполняется быстрее. Аналогичных примеров оптимизации работы с различными накопителями за счет правильного использования возможностей файловых систем существует множество.
Надеюсь, краткий обзор основных ФС поможет решить практические задачи в части правильного выбора и настройки ваших компьютерных устройств в повседневной практике.
Из чего состоят записи в /etc/fstab
Первое поле (fs_spec).
Это поле описывает специальное блочное устройство, удалённую файловую систему или образ файловой системы для loop устройства, которое нужно смонтировать, или файл подкачки, или раздел подкачки, который нужно включить.
Для обычных монтирований он будет содержать (ссылку на) узел специального блочного устройства (созданный утилитой mknod) для монтируемого устройства, например, «/dev/cdrom» или «/dev/sdb7». Для монтирования NFS это поле — <host>:<dir>, например, «knuth.aeb.nl:/». Для файловых систем без хранилища можно использовать любую строку, которая будет отображаться, например, в выводе df. Обычно для procfs используется «proc»; а для tmpfs используются «mem», «none» или «tmpfs». Другие специальные файловые системы, такие как udev и sysfs, обычно не указываются в fstab.
Вместо имени устройства можно указать LABEL=<label> или UUID=<uuid>. Это рекомендуемый метод, поскольку имена устройств часто совпадают с порядком обнаружения оборудования и могут измениться при добавлении или удалении других дисков. Например, «LABEL=Boot» или «UUID=3e6be9de-8139-11d1-9106-a43f08d823a6». (Используйте инструмент, специфичный для файловой системы, например e2label, xfs_admin или fatlabel, чтобы установить LABEL в файловых системах).
Также можно использовать ARTUUID= и PARTLABEL=. Эти идентификаторы разделов поддерживаются, например, для таблицы разделов GUID (GPT).
Чтобы узнать UUID всех дисков используйте любую из следующих команд:
findmnt --real -o TARGET,SOURCE,FSTYPE,UUID mount | grep "^/dev" blkid lsblk -o NAME,MAJ:MIN,RM,SIZE,RO,TYPE,UUID
Чтобы узнать UUID определённого диска, используйте любую из следующих команд:
findmnt --real -o TARGET,SOURCE,FSTYPE,UUID /dev/ДИСК blkid /dev/ДИСК lsblk -o NAME,MAJ:MIN,RM,SIZE,RO,TYPE,UUID /dev/ДИСК
Второе поле (fs_file).
Это поле описывает точку монтирования (цель) для файловой системы. Для разделов подкачки это поле должно быть указано как «none». Если имя точки монтирования содержит пробелы или табуляции, их можно использовать как «\040» и «\011» соответственно.
Третье поле (fs_vfstype).
Это поле описывает тип файловой системы. Linux поддерживает множество типов файловых систем: ext4, xfs, btrfs, f2fs, vfat, ntfs, hfsplus, tmpfs, sysfs, proc, iso9660, udf, squashfs, nfs, cifs и многие другие.
Запись подкачки в этом поле должна содержать «swap».
Запись «none» полезна для привязки или перемещения монтирований.
Можно указать несколько типов в списке, разделённом запятыми.
mount и umount поддерживают подтипы файловых систем. Подтип определяется суффиксом «.subtype». Например, «fuse.sshfs». Рекомендуется использовать нотацию подтипа, а не добавлять префикс в первое поле fstab (например, «sshfs#example.com» является устаревшим).
Четвёртое поле (fs_mntops).
В этом поле описаны параметры монтирования, связанные с файловой системой.
Поле отформатировано как список параметров, разделённых запятыми. Оно содержит как минимум тип монтирования (ro или rw), а также любые дополнительные параметры, соответствующие типу файловой системы (включая параметры настройки производительности).
defaults
использовать параметры по умолчанию: rw, suid, dev, exec, auto, nouser и async.
noauto
не монтировать при использовании команды «mount -a» (например, во время загрузки)
user (пользователь)
позволяет монтировать указанному пользователю
owner (владелец)
позволяет монтировать указанному владельцу устройства
комментарий
или x-<name> для использования программами поддержки fstab
nofail
не сообщает об ошибках для этого устройства, если оно не существует.
Пятое поле (fs_freq).
Это поле используется dump, чтобы определить, какие файловые системы нужно выгрузить. По умолчанию, если не присутствует, — ноль (не выгружать).
Шестое поле (fs_passno).
Это поле используется fsck для определения порядка, в котором выполняется проверка файловых систем во время загрузки. Корневая файловая система должна быть указана с fs_passno равным 1.
Для других файловых систем значение fs_passno должно быть равно 2. Файловые системы на диске будут проверяться последовательно, но файловые системы на разных дисках будут проверяться одновременно, чтобы использовать параллелизм, доступный на оборудовании. По умолчанию нулевое значение (не использовать fsck), если оно отсутствует.
Реализация
Мы можем повторить в коде то, что делали выше, заменив команду соответствующим системным вызовом. Сначала мы создаем наш команды процесс в новом mount namespace, добавляя флаг для .
Затем мы создаём функцию которая, получив путь до каталога, содержащего системные файлы (), настраивает текущий mount namespace посредством pivoting’а корневого каталога текущего процесса на , что мы создали ранее.
Нам нужно вызвать эту функцию из нашего кода и это должно быть выполнено нашим командным процессом в (поскольку он работает в новом mount namespace) до фактического начала выполнения команды.
Давайте попробуем это:
Этот вывод показывает что-то странное: мы не можем проверить список монтирования, за который так тяжело боролись, и говорит нам, что нет процессов, запущенных в системе (нет даже текущего процесса или самого ?). Более вероятно, что мы что-то сломали при настройке mount namespace.
Отключение общего ресурса Windows
Команда отсоединяет (размонтирует) смонтированную файловую систему от дерева каталогов.
Чтобы отсоединить смонтированный общий ресурс Windows, используйте команду за которой следует либо каталог, в котором он был смонтирован, либо удаленный общий ресурс:
Если для CIFS-монтирования есть запись в , удалите ее.
Команда не сможет отсоединить общий ресурс, когда он используется. Чтобы узнать, какие процессы обращаются к общему ресурсу Windows, используйте команду :
Как только вы найдете процессы, вы можете остановить их с помощью команды и отключить общий ресурс.
Если у вас все еще есть проблемы с ресурса, используйте параметр ( ), который позволяет вам отключить занятую файловую систему, как только она больше не будет занята.
Как посмотреть список дисков в Linux
В Linux все отображается в файловом виде, в том числе и устройства. Все подключённые к операционной системе Linux устройства размещаются в каталоге /dev/ здесь вы найдете микрофоны, камеры, жёсткие диски, флешки, одним словом, все внешние и внутренние устройства.
Жёсткие диски имеют особенные названия. В зависимости от интерфейса, через который подключён жёсткий диск, название может начинаться на:
- sd — устройство, подключённое по SCSI;
- hd — устройство ATA;
- vd — виртуальное устройство;
- mmcblk — обозначаются флешки, подключённые через картридер;
В наше время большинство блочных устройств Linux подключаются через интерфейс SCSI. Сюда входят жёсткие диски, USB-флешки, даже ATA-диски теперь тоже подключаются к SCSI через специальный переходник. Поэтому в большинстве случаев вы будете иметь дело именно с дисками sd.
Третья буква в имени диска означает его порядковый номер в системе. Используется алфавитная система. Например sda — первый диск, sdb — второй диск, sdc — третий и так далее. Дальше следует цифра — это номер раздела на диске — sda1, sda2.
Самый простой способ увидеть все подключённые диски — это посмотреть содержимое каталога /dev/ и отфильтровать устройства sd:
Как видите, в моей системе сейчас есть только один диск и два раздела. Дальше мы можем посмотреть, куда примонтирован каждый из разделов:
Здесь отображается уже подробная информация. Но вы можете узнать ещё больше с помощью команды lsblk:
В этом случае список примонтированных дисков Linux включает ещё и информацию о точке монтирования, типе раздела (диск, раздел, привод) и его мажорном и минорном номере, по которым можно понять, что это за устройство. Если вам нужна информация о размере, то лучше использовать fdisk:
Это все утилиты, которыми вы можете воспользоваться, чтобы просмотреть список дисков Linux. Но есть ещё и графические утилиты.