Перейти к основному содержанию
Рецепты Linux

Main navigation

  • Основы
  • Система
  • Команды
  • Программы
  • Дистро
  • Интерфейсы
  • Устройства
  • Доки
User account menu
  • Войти

Строка навигации

  1. Главная
  2. Linux: Введение
  3. Работа с внешними устройствами

Файловая система

Из лекции Структура файловой системы Мефодий узнал, как пользоваться файловой системой и какую структуру она имеет с точки зрения программы, работающей с файлами в ней. Про то, как огранизована файловая система изнутри, что именно находится от начала устройства hda5 до его конца, существует немало больших статей, защищено немало кандидатских (и более одной докторской) диссертаций. Разработка файловой системы — сложный и интересный процесс, требующий одновременно владения высшей математикой, статистикой, умения безошибочно программировать и полного знания того, как работает то или иное дисковое устройство. Поэтому файловых систем не так много, и каждая из них устроена по-особому, в соответствии с тем, как решал тот или иной творческий коолектив задачу быстрого и надёжного доступа к файлам.

Принципы организации данных на диске

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

Различают устройство последовательного доступа (например, накопители на магнитных лентах) и устройства прямого доступа (например, жёсткие диски). Чтение (и запись) данных на устройствах последовательного доступа идёт последовательно: если сейчас записан первый блок носителя, то следующим будет доступен второй, за ним — третий и т. д. Если доступен пятый блок, а нужен первый или тысячный, выполняется длительная операция позиционирования, причём она тем длиннее, чем дальше отстоит нужный блок от текущего: лента перематывается. Работа с устройствами прямого доступа легче: каков бы ни был текущий прочитанный блок, время, за которое будет прочтан любой другой примерно одинаково.

Файлы на магнитной ленте удобнее хранить целиком, каждый файл — одним длинным куском. У такого способа есть один существенный недостаток: если на ленту объёмом в гигабайт записать 1024 мегабайтных файла, а потом удалить каждый второй, то образуется полгигабайта свободного места, но кусочками по мегабату каждый. Тогда запись, скажем, двухмегабайтного файла потребует трёх операций: сначала надо переписать какой-нибудь мегабайтный файл на свобоное место, затем удалить старую его копию, и только затем записать на образовавшееся место большой файл.

На устройстве прямого доступа можно избежать этой неприятной ситуации, если постановить, что файл может размещаться на нём в области данныхпо частям, а карта размещения этих частей будет записана в системную область. Если, не мудрствуя особо, предположить, что в системную область записываются номера полукилобайтных секторов, в которых лежит файл (по 32 бита каждый номер), то выходит, что размер системной области, который может потребоваться, всего в 16 раз меньше файловой. Но в Linux в системную область записываются индексные дескрипторы, размер которых существенно больше. Количество индексных дескрипторов может быть намного меньше количества блоков, но всё же системная область занимает примерно такую же (от пяти до десяти процентов) долю общего дискового пространства.

индексный дескриптор
Внутренний объект файловой системы Linux, однозначно определяющий принадлежащий ей файл. Индексный дескриптор содержит атрибуты файла, размер, указывает расположение файла на диске и т. п. Каждому индексному дескриптору соответвтует единственный в данной файловой системе идентификатор-целое число.

На самом деле, даже на жёстком диске блоки, расположенные подряд, считываются (и записываются) быстрее, чем блоки, расположенные как попало. Эффект связан с механическим устройством жестких дисков, пояснять которое Мефодию Гуревич не стал, ссылаясь на общеизвестность. Суть его в том, что задержки при чтении данных, находящихся на разных цилиндрах диска, растут линейно, как для ленты (чем дальше, тем дольше). Один из остроумных способов оптимизировать работу с диском состоит в том, чтобы разбить все цилиндры на группы, а внутри каждой группы выделить свою системную область и область данных. Тогда сами файлы и их индексные дескрипторы будут лежать, если это возможно, на соседних цилиндрах, и доступ ускорится.

Другое, более общее решение — использование кеширования, при котором данные с диска частично дублируются в памяти. Если какой-то процесс прочитал данные из файла, эти данные некоторое время находятся в памяти, на случай, если они ему (или кому-нибудь другому) опять понадобятся. Повторное обращение уже не дойдёт до диска, система вернёт процессу данные из кеша, раз уж они ничем не отличаются от тех, что на диске. Если процесс записал данные на диск, содержимое кеша обновляется, оставаясь актуальным.

Ещё эффективней кеш на запись: операции записи накапливаются в памяти, а до диска добираются не сразу, и в том порядке, в каком быстрее пройдёт запись, а не в том, в каком были выполнены. Если запись шла во временный файл, который, в конце концов, удалили, обращений к диску может и вообще не случиться. Однако с кешированием операций записи следует обращаться бережно: а вдруг сбой в электроснабжении произойдёт именно тогда, когда часть данных уже записана, а часть — ещё нет? А если не полностью, кусочками, обновилась системная область, состояние файловой системы после того, как питание опять включат, может оказаться совсем плачевным — настолько, что даже умная утилита восстановления fsck может оказаться бессильной. Поэтому системные области либо вообще не кешируются на запись, либо исключительно с помощью будущих кандидатов и докторов наук, что рассчитывают безопасные алгоритмы обновления файловой системы из кеша на запись...

Работа с файловыми системами

Итак, Linux свободно работает (и даже предпочитает работать) с несколькими разделами диска, содержащими, возможно, разные типы файловых систем.

Монтирование и размонтирование

Из лекции Структура файловой системы Мефодий знает, что файловые системы на различных разделах «прививаются» в виде ветвей общего дерева каталогов, растущего из «/». Делается это при помощи команды mount -o настройки_монтирования устройство точка_монтирования, где устройство — это имя блочного файла-дырки, точка_монтирования (mountpoint) — полный путь к каталогу, а настройки_монтирования определяют особые параметры, разные для разных файловых систем. После выполнения этой команды содержимое файловой системы, размещённой на устройстве (как правило, дисковом разделе), становится доступным в виде дерева подкаталогов точки_монтирования. Посмотреть список всех смонтированных фаловых систем можно с помощью команды mount без параметров:

[root@localhost root]# mount
 /dev/hda5 on / type ext3 (rw)
 /dev/hda7 on /home type ext3 (rw)
 /dev/fd0 on /mnt/floppy type subfs (rw,nosuid,nodev,sync)
 /dev/hdc on /mnt/cdrom type subfs (ro,nosuid,nodev)
 proc on /proc type proc (rw,gid=19)
 devpts on /dev/pts type devpts (rw,gid=5,mode=0620)
[root@localhost root]# umount /home
[root@localhost root]# ls /home
[root@localhost root]# mount /dev/hda7 /home
[root@localhost root]# ls /home
 methody  shogun  tmpuser

Пример 7. Просмотр списка смонтированных файловых систем

Оба Linux-раздела смонтированы при старте системы: /dev/hda5 образует корневую файловую систему, а /dev/hda7 используется для хранения пользовательских домашних каталогов.

Мефодий заметил, что /tmp и /var не смонтированы никуда, и, следовательно, корневая файловая система, вопреки рекомендациям FHS, слишком часто используется на запись.

Суперпользователь может размонтировать файловую систему вручную с помощью команды umount точка_монтирования, если на ней не открыто никаких файлов и никто не использует какой-либо её каталог в качестве текущего. Для того, чтобы файловые системы монтировались при загрузке системы, их описывают в файле /etc/fstab:

/dev/hda5 / ext3 defaults 1 1
devpts /dev/pts devpts gid=5,mode=0620 0 0
/dev/hda7 /home ext3 defaults 1 2
proc /proc proc gid=19 0 0
/dev/hda6 swap swap defaults 0 0
/dev/fd0 /mnt/floppy subfs   fs=floppyfss,sync,nodev,nosuid
/dev/cdrom /mnt/cdrom subfs   fs=cdfss,nodev,nosuid

Пример 8. Содержимое /etc/fstab

Первое поле каждой строки этого файла — устройство или название виртуальной файловой системы, второе — точка монтирования, третье — тип файловой системы, четвёртое — настройки монтирования, а пятое и шестое относятся к организации резервного копирования и процедуре проверки цельности. Содержимое fstab практически повторяет выдачу mount (dev/cdrom на этой машине — ссылка на /dev/hdc). Здесь указывается и область подкачки, которую ядро не монтирует, а использует напрямую. Утилита mount поддерживает усечённый вариант командной строки mount точка_монтирования, при котором она самостоятельно ищет в /etc/fstab, каким способом должна быть смонтирована точка_монтирования. Для того, чтобы при загрузке системы какое-либо устройство не монтировалось, а усечённым mount его можно было смонтировать вручную, в поле «настройки монтирования» добавляется ключевое слово noauto.

Две последних строки относятся к монтированию съёмных (removable) носителей: лазерного и гибкого дисков. Съёмные носители приходится монтировать гораздо чаще несъёмных, не во время загрузки системы, а всякий раз, когда носитель сменился, и содержимое нового необходимо пользователю. Мало того, надо разрешить выполнять операцию mountпользователю, который принёс дискету и желает поработать с ней. С другой стороны, нельзя всем и каждому давать право запускать mount и особенно umount с любыми параметрами! Есть четыре способа разрешить возникающее противоречие:

  1. Воспользоваться усечённым вариантом mount (запись с настройкой noauto в fstab) и утилитой sudo, при помощи которой позволить пользователю выполнять, скажем, только команды mount /cdrom и umount /cdrom.
  2. Воспользоваться усечённым вариантом mount и настройкой owner в fstab, которая позволяет выполнять операцию монтирования хозяину устройства; при этом /dev/hdc отдаётся во владение первому зарегистрированному пользователю так же, как /dev/audio и прочие устройства персонального использования. Этот способ лучше предыдущего тем, что исключает ситуацию, когда один пользователь монтирует диск, а другой немедленно его размонтирует.
  3. Воспользоваться специальным демоном из пакета autofs, который отслеживает обращения пользователей к некоторому каталогу (например, /mnt/cdrom/auto), и самостоятельно выполняет операцию mount, а если к содержимому носителя долгое время никто не обращался — umount. Этот способ лучше предыдущего тем, что пользователю вообще никаких дополнительных команд подавать не приходится.
  4. Воспользоваться специализированным модулем ядра (в примере — subfs), который всегда сообщает программе пользователя, что устройство смонтировано и готово к работе, а с тем, поменялся ли носитель, разбирается самостоятельно. Этот способ лучше предыдущего тем, что пользователю не приходится ждать «долгое время», пока система не соизволит размонтировать и «отдать» лазерный диск. Кроме того, subfs может снабжать пользователя данными из кеша, даже если диск давно уже вынут (речь идёт, разумеется, об операциях чтения).

Во всех случаях, когда диск монтирует не системный администратор, стоит предпринять некоторые дополнительные действия. Например, диск должен монтироваться так, чтобы с него не работал запуск с подменой идентификатора (setUID), и чтобы на нём нельзя было создавать файлы-дырки (чтобы не потворствовать хулиганству, вроде запуска setUID-оболочки или записи прямо в устройство, соответствующее hda). За это отвечают настройки nosuid и nodev, упомянутые в /etc/fstab.

Кроме того, лазерные приводы имеют «защёлку», не позволяющую извлечь диск, пока он используется, а дисководы или устройства USB Flash — нет (хотя, казалось бы, она нужнее там, где происходит запись). Единственная надежда — на то, что пользователь не будет выдёргивать дискету из дисковода, пока он занимается записью, и на нём горит зелёная лампочка. Чтобы каждая операция записи немедленно приводила к передаче данных, необходимо полностью отключить кеш записи, то есть использовать синхронный режим работы файловой системы. Это делается при помощи настройки sync.

Поддерживаемые Linux файловые системы

Если бы на компьютере из примера использовался способ монтирования лазерного диска 1 или 2, то в поле «тип» fstab было бы написано iso9660. Так называется тип файловой системы, обычно используемой на лазерных дисках. Что же касается жёстких дисков, то на них может использоваться несколько типов файловых систем, даже на одном Linux-компьютере.

Основная файловая система в Linux называется «Ext2». Имя происходит от слова «extended» (расширенная) и появилось после того, как самая первая версия файловой системы ранних Linux, повторяющая возможности одного из вариантов файловой системы UNIX, окончательно устарела. Пришлось переписать соответствующую часть ядра, расширив уже имеющиеся возможности. Так появилась «ExtFS». Когда и она устарела, возможности снова расширили, и к названию добавилось число «2». Повсеместно используемая в дистрибутивах Linux файловая система «Ext3» — «трижды расширенная»! — отличается от Ext2 поддержкой журнализации.

Журналируемая файловая система ведёт постоянный учёт всех операций записи на диск. Получающийся журнал обращений сам, в свою очередь, записывается на диск. Разница между записью журнала и записью самих данных в том, что данные следует записывать в строго определённое место, а журнал устроен так, чтобы записываться как можно быстрее. Выгода от такой двухступенчатой процедуры особенно остро ощущается после сбоя электропитания: все операции, записи, которые ещё не успели завершиться, записаны в журнале, так что стоит после включения компьютера «проиграть» их ещё раз, и файловая система войдёт в норму! Если часть данных уже была записана на диск, повторная (по требованию журнала) запись тех же самых данных на то же самое место ничем повредить не может. Наконец, если операция записи не попала даже в журнал (что бывает редко), то файловая система всё равно останется в рабочем состоянии, каким оно было до начала этой операции.

Журналирование поддерживается и другими файловыми системами, используемыми в Linux — XFS и ReiserFS. ReiserFS вообще похожа скорее на базу данных: внутри неё используется своя собственная система индексации и быстрого поиска данных, а индексные дескрипторы и каталоги в стиле Linux выполнены в виде одной из возможных надстроек над этой системой. Традиционно считается, что ReiserFS отлично подходит для хранения огромного числа маленьких файлов (что было одной из целей проекта), а XFS — для хранения очень больших файлов, в котороых постоянно что-нибудь дописывается или изменяется.

В Linux поддерживается, кроме собственных, немало форматов файловых систем, используемых другими ОС. Если способ записи на эти файловые системы известен и не слишком замысловат, то работает и запись, и чтение, в противном случае — только чтение (чего нередко бывает достаточно). Полностью поддерживаются файловые системы FAT12/FAT16/FAT32 (тип vfat), используемые в MS-DOS и Windows, ранние версии UFS, используемые в системах семества BSD. Новые версии UFS (например, UFS2 из FreeBSD5, обладающая свойствами, которые не входят в стандарт Linux) поддерживаются только на чтение, как и созданная на основе DEC VMS, но впоследствии многократно переработанная файловая система NTFS из Windows.

Для того, чтобы смонтировать файловую систему, имеющую заданный тип, команде mount необходимо указать его с помощью ключа «-t»:

[root@localhost root]# fdisk -l
  . . .
    Device Boot      Start         End      Blocks   Id  System
 /dev/hda1   *           1          25      100768+   6  FAT16
 /dev/hda2              26         520     1995840    5  Extended
 /dev/hda5              26         282     1036192+  83  Linux
 /dev/hda6             283         334      209632+  82  Linux swap
 /dev/hda7             335         520      749920+  83  Linux
[root@localhost root]# mount -t vfat /dev/hda1 /mnt/disk
[root@localhost root]# ls /mnt/disk
 autoexec.bat  config.sys    fdconfig.sys  freedos.bss
 command.com   fdconfig.old  fdos          kernel.sys

Пример 9. Монтирование файловой системы FAT16

Виртуальные и сетевые файловые системы

В /etc/fstab Мефодий сразу заметил две строки, начинающися не с имени устройства, а с названия виртуальной файловой системы, содержимое которой доступно в соответствующей точке монтирования. Виртуальная файловая система обычно не обращается ни к какому внешнему устройству, а «придумывает» всё дерево каталогов и находящиеся в них файлы сама. Такова, например, файловая система в памяти (ROMFS, или аналогичная ей TMPFS, поддерживающая операции записи), используемая в стартовом виртуальном диске. Как правило, виртуальные файловые системы используются для того, чтобы предоставить доступ по чтению/записи к некоторой иерархической структуре данных.

Во многих версиях UNIX программа ps работает непосредственно с устройством /dev/kmem (памятью ядра), чтобы добыть оттуда информацию о таблицах процессов; это — сложная и даже опасная программа, имеющая доступ к святая святых системы. В Linux ps может быть переписана чуть ли что не на shell, потому что таблица процессов и масса другой информации о системе доступны в виде дерева подкаталогов /proc:

[root@localhost root]# ls -F /proc
 1/     585/  793/  882/     es1371       irq/     modules     stat
 1041/  598/  794/  acpi/    execdomains  kcore    mounts@     swaps
 16/    6/    795/  bus/     fb           kmsg     mtrr        sys/
 2/     681/  796/  cmdline  filesystems  ksyms    net/        sysrq-trigger
 3/     697/  797/  cpufreq  fs/          loadavg  partitions  sysvipc/
 4/     7/    798/  cpuinfo  ide/         locks    pci         tty/
 492/   725/  8/    devices  interrupts   mdstat   scsi/       uptime
 5/     751/  840/  dma      iomem        meminfo  self@       version
 572/   784/  844/  driver/  ioports      misc     slabinfo
[root@localhost root]# ls -l /proc/1
 total 0
 -r--r--r--  1 root proc 0 Dec  4 16:15 cmdline
 lrwxrwxrwx  1 root proc 0 Dec  4 16:15 cwd -> /
 -r--------  1 root proc 0 Dec  4 16:15 environ
 lrwxrwxrwx  1 root proc 0 Dec  4 16:15 exe -> /sbin/init
 dr-x------  2 root proc 0 Dec  4 16:15 fd
 -r--r--r--  1 root proc 0 Dec  4 16:15 maps
 -rw-------  1 root proc 0 Dec  4 16:15 mem
 -r--r--r--  1 root proc 0 Dec  4 16:15 mounts
 lrwxrwxrwx  1 root proc 0 Dec  4 16:15 root -> /
 -r--r--r--  1 root proc 0 Dec  4 16:15 stat
 -r--r--r--  1 root proc 0 Dec  4 16:15 statm
 -r--r--r--  1 root proc 0 Dec  4 16:15 status
[root@localhost root]# cat /proc/1/environ ; echo
 OME=/TERM=linux

Пример 10. Виртуальная файловая система PROCFS

В частности, подкаталоги /proc с числовыми именами содержат информацию о процессах с соответствующими PID. Файл exe такого подкаталога — символьная ссылка на запущенную программу, файл cmdline содержит командную строку, а environ — окружение процесса. Мефодий углубился в чтение man proc, руководства по PROCFS, и, как всегда, убедился, что для полного понимания всего, что есть в /proc, ему пока не хватает званий.

Файловая система devpts — шаг навстречу динамическому именованию устройств. Она предназначена для эмуляторов терминала, таких как sshd, xterm или screen. Задача эмулятора терминала — предоставить пользователю полноценный интерфейс командной строки (с запуском командного интерпретатора, с распознаванием и передачей сигналов и т. п.) в отсутствие терминального оборудования — по сети или из графической подсистемы, или при необходимости сымитировать несколько терминалов. Раньше для этого использовались пары устройств /dev/pty## — /dev/tty##, где ## — двухсимвольный идентификатор. Программа-эмулятор начинала обмениваться данными (от пользователея или из сети) с первым свободным устройством (скажем, ptya2, которое, в свою очередь, было привязано к соответствующему терминальному устройству (ttya2). Именно с этим устройством и взаимодействовал командный интерпретатор и прочие процессы Linux, находясь в полной уверенности, что это — полноценный терминал.

Выходило, что пар tty##-pty## при статическом именовании устройств могло не хватить, даже если создать их очень много (достаточно запустить ещё больше эмуляторов терминала). Поэтому придумали завести одно устройство типа pty — /dev/ptmx и виртуальную файловую систему /dev/pts для терминальных файл-дырок. Каждая программа, открывающая ptmx, получает свой дескриптор), а в pts/ заводится очередное терминальное устройство, имя которого совпадает с порядковым номером. Когда дескриптор закрывается, терминальное устройство исчезает.

Среди файловых систем есть и такие, что не выдумывают содержимое сами, а обращаются за ним ещё куда-нибудь, например, в сеть. Так работают удалённые файловые системы, например, NFS (network file system), стандартная для всех UNIX-подобных ОС. Вместо поля «устройство» обычно указывается сетевой адрес компьютера-сервера и имя ресурса (название каталога), который необходимо смонтировать по сети. Поддерживается и работа с удалёнными файловыми системами Windows, причём как на уровне модулей ядра, с помощью mount -t smbfs), так и без монтирования, с помощью утилиты smbclient. Linux и сам может служить сервером, предоставляющим удалённый доступ к файлам, причём служба samba, занимающаяся файловыми системами для Windows под управлением Linux, работает зачастую быстрее, чем Windows, запущенный на том же компьютере для тех же целей.

Возможности файловых систем этим не исчерпываются! Например, можно смонтировать образ устройства из файла, если вызвавть команду mount с ключом -o loop. Образ устройства — это файл, содержимое которого в точности повторяет содержимое устройства; его можно, например, получить с помощью команды cat устройство образ. Именно образами устройств манипулируют программы записи на лазерные носители. Смонтировать образ бывает нужно для проверки или изменения содержимого перед записью, или для хранения содержимого нескольких дисков в исходном виде:

[root@localhost root]# ls -l floppy.flp 
 -rw-r--r--  1 root root 1474560 Dec  4 16:53 floppy.flp
[root@localhost root]# mount -t vfat -o loop floppy.flp /mnt/disk/
[root@localhost root]# ls /mnt/disk/
 command.com  kernel.sys
[root@localhost root]# mount | grep disk  
 /root/floppy.flp on /mnt/disk type vfat (rw,loop=/dev/loop0)

Пример 11. Монтирование содержимого файла при помощи mount -o loop

Как заметил Мефодий, mount создаёт для такого способа монтирования специальное устройство — /dev/loop0, и уже с его помощью работает с файлом.

Обширное поле для экспериментов — т. н. пользовательская файловая система (linux userland file system, LUFS). Это — модуль ядра и набор библиотек, позволяющий организовать файловую систему, обращающуюся за информацией к обычному процессу Linux. Так организованы разнообразные сетевые «эмуляторы» файловых систем с использованием протокола FTP или Secure Shell. Так работает и доступ на запись к файловой системе NTFS: некоторая программа обращается к устройству, содержащему файловую систему, задействует драйвер NTFS, взятый из лицензионной копии самой Windows (это можно сделать с помощью библиотек wine, подсистемы, распознающей исполняемые форматы Windows), и обменивается данными с модулем LUFS, который и предоставляет обычный файловый доступ процессам.

Проверка файловой системы

Если доступная на запись файловая система не была размонтирована перед выключением компьютера, после включения она окажется в нештатном состоянии, независимо от того, испортилось на ней что-либо или нет. Проверкой цельности файловой системы занимается утилита fsck (file system check). На самом деле таких утилит несколько — по одной для каждого из основных типов файловых систем (есть fsck даже для VFAT). Как уже говорилось в лекции Этапы загрузки системы, fsck запускается при старте Linux, если файловая система находится в нештатном состоянии, или для профилактики, если файловую систему просто давно не проверяли.

В самом лучшем случае fsck не находит ничего подозрительного, и система продолжает загрузку. Чаще всего, даже если в файловой системе не всё в порядке, её журнал не испорчен, и fsck «проигрывает» его, после чего всё опять приходит в норму. Запустить fsck можно и вручную, в виде fsck устройство или fsck точка_монтирования, однако прежде следует размонтировать файловую систему:

[root@localhost root]# fsck -fy /home
 fsck 1.35 (28-Feb-2004)
 /dev/hda7 is mounted.  

 WARNING!!!  Running e2fsck on a mounted filesystem may cause
 SEVERE filesystem damage.

 Do you really want to continue (y/n)? no

 check aborted.
[root@localhost root]# umount /home
[root@localhost root]# fsck /home                                                      
 fsck 1.35 (28-Feb-2004)
 e2fsck 1.35 (28-Feb-2004)
 /dev/hda7: clean, 168/93888 files, 7269/187480 blocks
[root@localhost root]# fsck -f /home
 fsck 1.35 (28-Feb-2004)
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
 Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 /dev/hda7: 168/93888 files (0.6% non-contiguous), 7269/187480 blocks

Пример 12. Использование fsck

Со второго раза fsck работать тоже не захотела, ссылаясь на то, что файловая система и так находится в штатном систоянии (её аккуратно размонтировали).

Мефодий заметил, что для файловой системы Ext3 запустиласть специализированная версия e2fsck, подходящая также и для Ext2.

>Пришлось применить ключ «-f» (force), который заставляет fsck работать — конечно же, никаких ошибок найдено не было. Сама процедура проверки довольно сложна, она состоит из пяти этапов, каждый из которых отнюдь не тривиален, и в этой лекции не описывается. Кстати сказать, для того, чтобы проверить корневую файловую систему, её приходится сначала монтировать только на чтение, находить там /sbin/fsck, проверять, и только после этого монтировать на чтение-запись. Если корневая файловая система испорчена настолько, что /sbin/fsck в ней найти невозможно, остаётся пробовать загрузку с других носителей (например, с установочного CD), и разбираться.

Если какая-то порча файловой системы всё-таки обнаружилась, fsck может поступить двояко. Во-первых, все ошибки, которые не приводят к изменению данных на диске, можно попробовать исправить автоматически. Например, индексные дескрипторы, на которые не ссылается ни одно имя (т. н. потерянные файлы, unref files), помещаются в специальный каталог /lost+found под именами, соответствующими номерам этих индексных дескрипторов. Впоследствии администратор может посмотреть в эти файлы и решить, нужны они или нет. Во-вторых, когда fsck встречается с ошибкой, исправление которой приведёт к изменению данных на диске, загрузка Linux останавливается, и система переходит в однопользовательский режим. Предполагается, что администратор сам запустит fsck: либо интерактивно, тогда каждому изменению в файловой системе будет требоваться подтверждение с клавиатуры, либо пакетно, с ключом «-y», тогда считается, что на все такие запросы администратор заранее ответил «yes».

Когда-то такие вот запуски fsck -y производили катастрофические разрушения по вине неумелых администраторов, а нынче Мефодий, как ни нажимал «Reset» на многострадальной двухсистемной машине, не смог добиться ничего, кроме двух-трёх мнговенных воспроизведений журнала и жестокого нагоняя от Гуревича.

Перекрёстные ссылки книги для Файловая система

  • Разметка диска и именование устройств
  • Вверх
  • Конфигурационные файлы

Book navigation

  • Предисловие
  • Сеанс работы в Linux
  • Терминал и командная строка
  • Структура файловой системы
  • Работа с файловой системой
  • Доступ процессов к файлам и каталогам
  • Права доступа
  • Работа с текстовыми данными
  • Возможности командной оболочки
  • Текстовые редакторы
  • Этапы загрузки системы
  • Работа с внешними устройствами
    • Представление устройства в системе
    • Разметка диска и именование устройств
    • Файловая система
  • Конфигурационные файлы
  • Управление пакетами
  • Сеть TCP/IP в Linux
  • Сетевые и серверные возможности
  • Графический интерфейс (X11)
  • Прикладные программы
  • Политика свободного лицензирования

Последние материалы

  • Файловый менеджер Thunar
    12 hours 51 minute ago
  • Эмулятор терминала Terminator
    5 days 14 hours ago
  • Приложение scanimage
    1 week 4 days ago
  • Утилита sensors
    2 weeks 1 day ago
  • Сканер Rkhunter
    3 weeks 2 days ago
RSS feed

Secondary menu

  • О проекте

© 2008–2025 Олег Меньшенин mensh@yandex.ru