Контроль свободного пространства
Сначала – краткий обзор. Из руководства к теме 103, “Подготовка к экзамену LPI 101: команды GNU и UNIX”, вы узнали, что файл или каталог размещаются в группе блоков, а информация о файле или каталоге содержится в inode.
И блоки данных, и блоки inode занимают место в файловой системе, поэтому необходимо контролировать используемое пространство, чтобы быть уверенным в наличии свободного места на диске для расширения файловой системы.
df
Команда df выводит информацию о монтированных файловых системах. Если добавить опцию -T, к выводу будет добавлен тип файловой системы. Результат выполнения команды df в системе Ubuntu, установленной на файловые системы, созданные в предыдущем разделе, показан в листинге 17.
Листинг 17. Вывод информации об использовании файловых систем
ian@pinguino:~$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/hda6 reiserfs 20008280 1573976 18434304 8% /
tmpfs tmpfs 1034188 0 1034188 0% /dev/shm
tmpfs tmpfs 1034188 12588 1021600 2% /lib/modules/2.6.12-10-386/volatile
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
/dev/hda2 ext3 101105 19173 76711 20% /boot
/dev/hda8 vfat 2004156 8 2004148 1% /dos
/dev/hda7 xfs 9998208 3544 9994664 1% /home
/dev/hda1 ntfs 20967416 9594424 11372992 46% /media/hda1
Заметьте, что вывод содержит общее число блоков, а также число используемых и свободных блоков. Также указывается файловая система, например, /dev/hda7, и ее точка монтирования: /home для /dev/hda7. Две записи tmpfs относятся к файловым системам в виртуальной памяти. Они существуют только в оперативной памяти или пространстве подкачки и создаются в момент монтирования без использования команды mkfs.
Если необходимо вывести данные об использовании inode, применяется команда df c опцией -i. Можно исключить вывод данных по определенной файловой системе, используя опцию -x, или ограничить информацию определенными типами файловых систем, использую опцию -t. При необходимости их можно использовать несколько раз. Примеры представлены в листинге 18.
Листинг 18. Просмотр inode
ian@pinguino:~$ df -i -x tmpfs
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hda6 0 0 0 - /
/dev/hda2 26208 34 26174 1% /boot
/dev/hda8 0 0 0 - /dos
/dev/hda7 10008448 176 10008272 1% /home
/dev/hda1 37532 36313 1219 97% /media/hda1
ian@pinguino:~$ df -iT -t vfat -t ext3
Filesystem Type Inodes IUsed IFree IUse% Mounted on
/dev/hda2 ext3 26208 34 26174 1% /boot
/dev/hda8 vfat 0 0 0 - /dos
Возможно, вас не удивит то, что для системы FAT32 не отображаются inodes, но неожиданностью может стать то, что и для ReiserFS их тоже нет в выводе. ReiserFS содержит метаданные о файлах и каталогах в объектах stat items. Вследствие того, что в ReiserFS используется сбалансированная древовидная структура, в ней нет заранее определенного числа inodes, в отличие, например, от файловых систем ext2, ext3 или xfs.
Кроме того, существуют некоторые другие опции команды df, используемые для ограничения вывода локальными файловыми системами или для контроля формата вывода. Например, используйте опцию -H для вывода результатов в удобном для пользователя формате (например, 1K для 1024), или опцию -h (или – –si) для отражения размеров в десятичном представлении (1К=1000).
Если вы не знаете точно, какая файловая система используется для определенной части вашего дерева каталогов, можно применить команду df с указанием пути или даже имени файла в качестве параметра, как показано в листинге 19.
Листинг 19. Удобочитаемый формат вывода результатов df
ian@pinguino:~$ df --si ~ian/index.html
Filesystem Size Used Avail Use% Mounted on
/dev/hda7 11G 3.7M 11G 1% /home
du
Команда df выводит информацию только о файловой системе в целом. Иногда необходимо узнать, сколько места занимает каталог home, или какой размер раздела потребуется, чтобы разместить каталог /usr в отдельной файловой системе. Для решения этих задач используется команда du.
Команда du выводит информацию о файле (файлах), имена которых заданы в качестве параметров. Если задано имя каталога, то du определяет размер всех файлов и подкаталогов этого каталога на всех уровнях вложения. Результат работы команды может быть очень объемным. К счастью, существует опция -s для вывода сводной информации по каталогу. Если использовать du для получения информации о нескольких каталогах, можно добавить опцию -c для вывода суммарных данных. Также можно задавать формат вывода. Для этого применяются опции, аналогичные используемым в команде df (-h, -H, –si и т.п.). Листинг 20 показывает два варианта вывода для моего каталога home во вновь установленной системе Ubuntu.
Листинг 20. Использование du
ian@pinguino:~$ du -hc *
0 Desktop
16K index.html
16K total
ian@pinguino:~$ du -hs .
3.0M .
Причина различия между результатом команды du -c *, насчитавшей 16 КБ, и команды du -s, получившей объём 3 MБ, в том, что последняя включает файлы и каталоги, начинающиеся с точки, такие как .bashrc, которые не просматриваются первой.
Еще следует отметить, что для использования du вы должны иметь права чтения каталогов, к которым вы ее применяете.
Теперь применим du для просмотра общего объема, занимаемого каталогом /usr и всеми его подкаталогами первого уровня. Результат представлен в листинге 21. Чтобы с гарантией иметь соответствующие права доступа, используйте полномочия root.
Листинг 21. Использование du для каталога /usr
root@pinguino:~# du -shc /usr/*
66M /usr/bin
0 /usr/doc
1.3M /usr/games
742K /usr/include
0 /usr/info
497M /usr/lib
0 /usr/local
7.3M /usr/sbin
578M /usr/share
0 /usr/src
14M /usr/X11R6
1.2G total
Проверка файловых систем
Иногда в системе может произойти сбой или отключиться питание. В этих случаях Linux не может аккуратно размонтировать файловые системы, и они могут оказаться в несогласованном состоянии. Работать с поврежденной файловой системой не следует, поскольку это скорее всего приведет к усугублению имеющихся ошибок.
Основной инструмент для проверки файловых систем – команда fsck, которая, аналогично mkfs, является интерфейсом доступа к командам проверки различных типов файловых систем. Несколько примеров таких команд приведено в листинге 22.
Листинг 22. Примеры программ fsck.
ian@pinguino:~$ ls /sbin/*fsck*
/sbin/dosfsck /sbin/fsck.ext3 /sbin/fsck.reiser4 /sbin/jfs_fscklog
/sbin/e2fsck /sbin/fsck.jfs /sbin/fsck.reiserfs /sbin/reiserfsck
/sbin/fsck /sbin/fsck.minix /sbin/fsck.vfat
/sbin/fsck.cramfs /sbin/fsck.msdos /sbin/fsck.xfs
/sbin/fsck.ext2 /sbin/fsck.nfs /sbin/jfs_fsck
Процесс загрузки системы с помощью команды fsck проверяет корневую файловую систему и другие файловые системы, указанные в управляющем файле /etc/fstab. Если файловая система не была размонтирована корректно, проводится проверка целостности системы. Это определяется значением поля pass (или passno) (шестое поле записи /etc/fstab). Файловые системы со значением pass, установленным в ноль, не тестируются во время загрузки. Корневая файловая система имеет значение pass, равное 1, и тестируется первой. Другие файловые системы обычно имеют значение pass от двух и выше, которое указывает, в каком порядке их надо проверять. Несколько операций fsck могут выполняться параллельно, поэтому различные файловые системы могут иметь одинаковые значения pass, как в нашем примере системы /boot и /home.
Листинг 23. Тестирование системы при загрузке на основании данных fstab.
#
/dev/hda6 / reiserfs defaults 0 1
/dev/hda2 /boot ext3 defaults 0 2
/dev/hda8 /dos vfat defaults 0 0
/dev/hda7 /home xfs defaults 0 2
Следует отметить, что некоторые журналируемые файловые системы, такие как ReiserFS и xfs, могут иметь значение pass, установленное в 0, поскольку проверку и восстановление файловой системы производит программа журналирования, а не fsck.
Восстановление файловых систем
Если автоматическая проверка при загрузке не может восстановить согласованность файловой системы, обычно происходит переход в однопользовательскую командную оболочку и выводится сообщение с указаниями по ручному запуску fsck. В системе ext2, которая не журналируется, вам может быть представлена серия вопросов для подтверждения операций по восстановлению файловой системы. Как правило, рекомендуется следовать предложениям fsck по восстановлению системы, выбирая y (для подтверждения операции). Когда система перезагрузится, проверьте, не пропала ли какая-либо информация или файлы.
Если вы заподозрили порчу данных или хотите запустить проверку вручную, большинство программ требуют сначала размонтировать файловую систему. Поскольку размонтировать корневую файловую систему работающей системы невозможно, максимум, что можно сделать – перейти в однопользовательский режим (используя telinit 1), а затем перемонтировать корневую файловую систему в режиме «только чтение»; после этого можно провести проверку согласованности.Наилучший способ проверки файловых систем – загрузиться в резервную систему с CD-диска или USB- накопителя и провести проверку ваших файловых систем в размонтированном виде.
Преимущества журналирования
Для проверки системы ext2 с помощью команды fsck может потребоваться значительное время, поскольку при этом необходимо полное чтение внутренней структуры данных (метаданных). Поскольку файловые системы становятся все больше и больше, это занимает все больше и больше времени; несмотря на то, что быстродействие дисков растет, полная проверка может занять до нескольких часов.
Эта проблема побудила к созданию журналируемых файловых систем. Такие файловые системы хранят недавние изменения в метаданных. После сбоя, чтобы определить, в каких частях файловой системы в результате сбоя могли возникнуть ошибки, драйвер файловой системы просматривает журнал. Это позволяет сократить время проверки целостности файловой системы до нескольких секунд, независимо от ее размера. Более того, драйвер файловой системы обычно проверяет файловую систему на этапе монтирования, поэтому дополнительная проверка с помощью fsck, как правило, не требуется. Фактически в файловой системе xfs команде fsck делать нечего!
Перед инициированием проверки файловой системы вручную следует уточнить параметры конкретной команды fsck по документации. В примерах, представленных в листинге 24, команда fsck запускается с рабочего компакт-диска Ubuntu.
Листинг 24. Ручной запуск fsck
root@ubuntu:~# fsck -p /dev/hda6
fsck 1.38 (30-Jun-2005)
Reiserfs super block in block 16 on 0x306 of format 3.6 with standard journal
Blocks (total/free): 5002224/4608416 by 4096 bytes
Filesystem is clean
Replaying journal..
Reiserfs journal '/dev/hda6' in blocks [18..8211]: 0 transactions replayed
Checking internal tree..finished
root@ubuntu:~# fsck -p /dev/hda2
fsck 1.38 (30-Jun-2005)
BOOT: clean, 34/26208 files, 22488/104420 blocks
root@ubuntu:~# fsck -p /dev/hda7
fsck 1.38 (30-Jun-2005)
root@ubuntu:~# fsck -a /dev/hda8
fsck 1.38 (30-Jun-2005)
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
/dev/hda8: 1 files, 2/501039 clusters
«Продвинутые» инструменты
Также существуют более функциональные средства для проверки и восстановления файловых систем. Правила использования можно найти в документации man, а практические рекомендации – в Linux Documentation Project (см. Ресурсы). Почти все эти команды требуют, чтобы файловая система была размонтирована, хотя некоторые функции могут использоваться в файловых системах, смонтированных в режиме «только чтение». Некоторые из этих команд описаны далее.
Прежде чем предпринимать какие-либо исправления, обязательно создавайте резервную копию файловой системы.
Инструменты для файловых систем ext2 и ext3
tune2fs
Настраивает параметры файловых систем ext2 и ext3. Используется для добавления журнала к системе ext2, делая, таким образом, из нее ext3, а также выводит или устанавливает максимальное число монтирований, после которого необходима проверка. вы также можете задать метку и назначить или запретить выполнение дополнительных опций.
dumpe2fs
Выводит информацию о дескрипторах суперблоков и групп блоков в файловых системах ext2 и ext3.
debugfs
Команда для интерактивной отладки файловой системы. Используйте ее для проверки или изменения состояния файловых систем ext2 или ext3.
Инструменты для файловых систем ReiserFS
reiserfstune
Выводит и настраивает параметры файловой системы ReiserFS.
debugreiserfs
Выполняет функции, аналогичные dumple2fs и debugfs, для файловой системы ReiserFS.
Инструменты для файловой системы XFS
xfs_info
Выводит информацию о системе XFS.
xfs_growfs
Расширяет файловую систему XFS (если имеется дополнительный раздел).
xfs_admin
Изменяет параметры файловой системы XFS.
xfs_repair
Восстанавливает файловую систему XFS, когда проверок при монтировании установке недостаточно для восстановления системы.
xfs_db
Проверяет или отлаживает файловую систему XFS.
Взято с ibm developerworks
One Comment