Изучаем Linux, 101: Oбеспечение целостности файловой системы

Отслеживание свободной емкости на жестком диске

Из этой статьи вы узнаете, как можно проверить целостность файловых систем Linux®, отслеживать свободное дисковое пространство и устранять мелкие проблемы (возникающие, например, после сбоя системы или отключения электропитания). Вы можете использовать этот материал для подготовки к экзамену LPI 101 программы сертификации на администратора Linux начального уровня или просто для общего развития.

Об этой серии

Эта серия статей поможет вам освоить задачи администрирования операционной системы Linux. Вы также можете использовать материал этих статей для подготовки к экзаменам первого уровня сертификации профессионального института Linux (LPIC-1).

Описания статей этой серии и ссылки на них вы найдете в перечне материалов для подготовки к экзаменам LPIC-1. Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит самые последние (по состоянию на апрель 2009 года) цели экзаменов сертификации LPIC-1. Если какая-либо статья отсутствует в перечне, можно найти ее более раннюю версию, соответствующую предыдущим целям LPIC-1 (до апреля 2009 года), обратившись к нашим руководствам для подготовки к экзаменам института Linux Professional Institute.

Краткий обзор

В этой статье рассматриваются такие темы:

  • Проверка целостности файловых систем.
  • Отслеживание свободного дискового пространства и индексных дескрипторов (inodes).
  • Устранение мелких проблем файловой системы.

В этой статье рассматриваются как стандартные, так и журналируемые файловые системы. Основной акцент сделан на файловых системах ext2 и ext3, но инструменты для работы с другими файловыми системами также будут рассмотрены. Большая часть материала этой статьи применима как к ядру версии 2.4, так и к ядру версии 2.6. Основная часть примеров была выполнена в операционной системе Fedora 12 с ядром версии 2.6.32. При выполнении примеров в других операционных системах полученные результаты могут отличаться.

Эта статья поможет вам подготовиться к сдаче экзамена LPI 101 на администратора начального уровня (LPIC-1) и содержит материалы цели 104.2 темы 104. Цель имеет вес 2.

Необходимые условия

Чтобы извлечь наибольшую пользу из наших статей, необходимо обладать базовыми знаниями о Linux и иметь работоспособный компьютер с Linux, на котором можно будет выполнять все встречающиеся команды. Иногда различные версии программ выводят результаты по-разному, поэтому содержимое листингов и рисунков может отличаться от того, что вы увидите на вашем компьютере.

Также вы должны быть знакомы с материалом статьи "Изучаем Linux 101: создание разделов и файловых систем".


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

Как связаться с Яном

Ян – один из наших наиболее популярных и плодовитых авторов. Ознакомьтесь со всеми статьями Яна (EN), опубликованными на сайте developerWorks. Вы можете найти контактные данные в профиле Яна и связаться с ним, а также с другими авторами и участниками ресурса My developerWorks.

В случае сбоя или отключения электропитания Linux может не успеть корректно демонтировать файловую систему и в результате она будет испорчена - некоторые изменения были выполнены, а некоторые нет. Лучше всего прекратить работу с поврежденной файловой системой, поскольку это может лишь усугубить возникшие ошибки.

Основным инструментом, предназначенным для проверки файловых систем, является команда fsck, которая, как и mkfs, фактически является интерфейсом к программам проверки различных типов файловых систем. Некоторые из них представлены в листинге 1.

Листинг 1. Примеры некоторых программ fsck
[ian@echidna ~]$ ls /sbin/*fsck*
/sbin/btrfsck  /sbin/fsck         /sbin/fsck.ext3     /sbin/fsck.msdos
/sbin/dosfsck  /sbin/fsck.cramfs  /sbin/fsck.ext4     /sbin/fsck.vfat
/sbin/e2fsck   /sbin/fsck.ext2    /sbin/fsck.ext4dev  /sbin/fsck.xfs

Некоторые из этих файлов на самом деле являются символическими ссылками на один и тот же файл, как видно из листинга 2. Помните о том, что эти команды могут выполняться на самых ранних этапах загрузки компьютера, когда файловые системы еще не смонтированы, а поддержка символических ссылок отсутствует. Подробнее о жестких и символических ссылках можно узнать из другой статьи этой серии "Изучаем Linux, 101: работа с жесткими и символическими ссылками".

Листинг 2. Различные формы fsck
[ian@echidna ~]$ find /sbin -samefile /sbin/e2fsck
/sbin/fsck.ext4dev
/sbin/e2fsck
/sbin/fsck.ext3
/sbin/fsck.ext4
/sbin/fsck.ext2

При загрузке системы выполняется команда fsck с опцией -A для проверки корневой файловой системы и всех других файловых систем, отмеченных в управляющем файле /etc/fstab. Если файловая система не была корректно демонтирована, то выполняется проверка ее целостности, а также безопасные операции по восстановлению. Этим процессом управляет поле pass (или passno) – шестое поле в файле /etc/fstab, определяющее очередность проверки файловых систем. Файловые системы со значением поля pass равным 0 не проверяются во время загрузки. Для корневой файловой системы это значение равно 1, поэтому она проверяется первой. Для других файловых систем поле pass обычно содержит значение 2 (или выше).

При необходимости несколько операций fsck могут выполняться параллельно, поэтому различные файловые системы могут иметь одинаковое значение поля pass, как в случае файловых систем /grubfile и //mnt/ext3test (см. листинг 3). Заметьте, что команда fsck будет избегать одновременной проверки нескольких файловых систем, расположенных на одном физическом диске. Дополнительную информацию о структуре файла /etc/fstab вы найдете на man-страницах команды fstab.

Листинг 3. Проверка файловых систем при загрузке на основе записей в /etc/fstab
filesystem                           mount point  type   options    dump pass
UUID=a18492c0-7ee2-4339-9010-3a15ec0079bb /              ext3    defaults        1   1
UUID=488edd62-6614-4127-812d-cbf58eca85e9 /grubfile      ext3    defaults        1   2
UUID=2d4f10a6-be57-4e1d-92ef-424355bd4b39 swap           swap    defaults        0   0
UUID=ba38c08d-a9e7-46b2-8890-0acda004c510 swap           swap    defaults        0   0
LABEL=EXT3TEST                            /mnt/ext3test  ext3    defaults        0   2
/dev/sda8                                 /mnt/xfstest   xfs     defaults        0   0
LABEL=DOS                                 /dos           vfat    defaults        0   0
tmpfs                   /dev/shm                         tmpfs   defaults        0   0
devpts                  /dev/pts                         devpts  gid=5,mode=620  0   0
sysfs                   /sys                             sysfs   defaults        0   0
proc                    /proc                            proc    defaults        0   0

Значением поля pass некоторых журналируемых файловых систем (например, ReiserFS и XFS) может являться 0, поскольку для проверки их целостности и восстановления используется логика журналирования, а не fsck. С другой стороны, некоторые файловые системы (например, /proc) создаются во время инициализации и, следовательно, их проверять не нужно.

Можно выполнять проверку файловых систем и после загрузки компьютера. Для этого нужны права суперпользователя, а проверяемую файловую систему следует предварительно демонтировать. В листинге 4 показана проверка двух файловых систем с использованием имени устройства, метки и идентификатора UUID. Чтобы узнать, какая метка или идентификатор назначен устройству (и наоборот), используйте команду blkid.

Листинг 4. Проверка файловых систем с помощью fsck
[root@echidna ~]# # find the device for LABEL=EXT3TEST
[root@echidna ~]# blkid -L EXT3TEST
/dev/sda7
[root@echidna ~]# # Find label and UUID for /dev/sda7
[root@echidna ~]# blkid /dev/sda7
/dev/sda7: LABEL="EXT3TEST" UUID="7803f979-ffde-4e7f-891c-b633eff981f0" SEC_TYPE="ext2" 
 TYPE="ext3" 
[root@echidna ~]# # Check /dev/sda7
[root@echidna ~]# fsck /dev/sda7
fsck from util-linux-ng 2.16.2
e2fsck 1.41.9 (22-Aug-2009)
EXT3TEST: clean, 11/7159808 files, 497418/28637862 blocks
[root@echidna ~]# # Check it by label using fsck.ext3
[root@echidna ~]# fsck.ext3 LABEL=EXT3TEST
e2fsck 1.41.9 (22-Aug-2009)
EXT3TEST: clean, 11/7159808 files, 497418/28637862 blocks
[root@echidna ~]# # Check it by UUID using e2fsck
[root@echidna ~]# e2fsck UUID=7803f979-ffde-4e7f-891c-b633eff981f0
e2fsck 1.41.9 (22-Aug-2009)
EXT3TEST: clean, 11/7159808 files, 497418/28637862 blocks
[root@echidna ~]# # Finally check the vfat partition
[root@echidna ~]# fsck LABEL=DOS
fsck from util-linux-ng 2.16.2
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
/dev/sda9: 1 files, 1/513064 clusters

Если вы попытаетесь выполнить проверку смонтированной файловой системы, то скорее всего, вы получите предупреждение, аналогичное предупреждению из листинга 5 (в этом примере мы попытались проверить корневую файловую систему). Прислушайтесь к этому предупреждению и остановитесь!

Листинг 5. Не пытайтесь выполнить проверку смонтированной файловой системы
[root@echidna ~]# fsck UUID=a18492c0-7ee2-4339-9010-3a15ec0079bb 
fsck from util-linux-ng 2.16.2
e2fsck 1.41.9 (22-Aug-2009)
/dev/sdb9 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.

Также мы рекомендуем предоставить выбор всех необходимых действий по проверке файловой системы программе fsck, поскольку ваша ошибка может привести к повреждению файловой системы. Если вы хотите видеть, какие действия намерена выполнять программа fsck для указанной файловой системы (или нескольких файловых систем), используйте опцию -N, как показано в листинге 6.

Листинг 6. Просмотр запланированных fsck действий по проверке файловых систем /dev/sda7, /dev/sda8 и /dev/sda9
[root@echidna ~]# fsck -N /dev/sda7 /dev/sda[89]
fsck from util-linux-ng 2.16.2
[/sbin/fsck.ext3 (1) -- /mnt/ext3test] fsck.ext3 /dev/sda7 
[/sbin/fsck.xfs (2) -- /mnt/xfstest] fsck.xfs /dev/sda8 
[/sbin/fsck.vfat (3) -- /dos] fsck.vfat /dev/sda9

До сих пор мы проверяли только файловые системы ext и vfat. Теперь проверим файловую систему XFS на устройстве /dev/sda8. Как видно из листинга 7, fsck просто говорит нам о том, что следует использовать команду xfs_check. В случае отсутствия ошибок команда xfs_check ничего не выводит на экран. Подробный вывод можно включить с помощью опции –v, однако для простой проверки он будет слишком подробным.

Листинг 7. Использование fsck для работы с файловой системой XFS
[root@echidna ~]# fsck /dev/sda8
fsck from util-linux-ng 2.16.2
If you wish to check the consistency of an XFS filesystem or
repair a damaged filesystem, see xfs_check(8) and xfs_repair(8).
[root@echidna ~]# xfs_check /dev/sda8

Отслеживание свободного дискового пространства

Файлы и директории располагаются на устройствах хранения в виде набора блоков. Информация о файле (такая, как владелец файла, время последнего обращения к файлу, размер файла, права на чтение или запись, является ли элемент файлом или директорией) хранится в индексном дескрипторе inode. Номер inode, известный также как порядковый номер файла, является уникальным в пределах отдельной файловой системы. Подробнее о файлах и директориях можно узнать из другой статьи этой серии "Изучаем Linux, 101: управление файлами и директориями".

Блоки данных и индексные дескрипторы занимают в файловой системе определенное пространство, поэтому необходимо следить, чтобы на диске оставалось свободное место.

Команда df

Команда df выводит информацию о смонтированных файловых системах. Если добавить опцию -T, то также будет отражена информация о типе каждой файловой системы (в противном случае эта информация не выводится). Вывод команды df в операционной системе Fedora 12 показан в листинге 8.

Листинг 8. Вывод информации об использовании файловых систем
[ian@echidna ~]$ df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sdb9     ext3    45358500  24670140  18384240  58% /
tmpfs        tmpfs     1927044       808   1926236   1% /dev/shm
/dev/sda2     ext3      772976     17760    716260   3% /grubfile
/dev/sda8      xfs    41933232      4272  41928960   1% /mnt/xfstest
/dev/sda7     ext3   112754024    192248 106834204   1% /mnt/ext3test
/dev/sda9     vfat     2052256         4   2052252   1% /dos

Обратите внимание на то, что в листинге отображается общее количество блоков, а также количество используемых и свободных блоков. Также выводится имя файловой системы, например, /dev/sbd9, и ее точка монтирования: / для /dev/sdb9. Запись tmpfs относится к файловой системе виртуальной памяти. Эти файловые системы существуют только в ОЗУ или в области подкачки и создаются при монтировании без использования команды mkfs. Подробнее о файловой системе tmpfs можно узнать из статьи "Common threads: Advanced filesystem implementor's guide, Part 3" (EN).

Для получения конкретной информации об использовании inode используйте команду df с опцией -i. Можно исключить вывод информации об определенных файловых системах (опция –x) или же выводить информацию только о файловых системах определенного типа (опция -t). При необходимости используйте эти опции несколько раз. Несколько примеров приведено в листинге 9.

Листинг 9. Вывод информации об использовании индексных дескрипторов
[ian@echidna ~]$ df -i -x tmpfs
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sdb9            2883584  308920 2574664   11% /
/dev/sda2              48768      41   48727    1% /grubfile
/dev/sda8            20976832       3 20976829    1% /mnt/xfstest
/dev/sda7            7159808      11 7159797    1% /mnt/ext3test
/dev/sda9                  0       0       0    -  /dos
[ian@echidna ~]$ df -iT -t vfat -t ext3
Filesystem    Type    Inodes   IUsed   IFree IUse% Mounted on
/dev/sdb9     ext3   2883584  308920 2574664   11% /
/dev/sda2     ext3     48768      41   48727    1% /grubfile
/dev/sda7     ext3   7159808      11 7159797    1% /mnt/ext3test
/dev/sda9     vfat         0       0       0    -  /dos

Вероятно, вас не удивило отсутствие у файловой системы FAT32 индексных дескрипторов inode. Однако информация о файловой системе ReiserFS также не содержит никаких сведений о inode. Метаданные для файлов и директорий файловой системы ReiserFS хранятся в записях stat items. А поскольку в файловой системе ReiserFS используется структура B-дерева, то в ней нет заранее определенного числа дескрипторов, как, например, в файловых системах ext2, ext3 или xfs.

Существуют и другие опции команды df, ограничивающие вывод только локальными файловыми системами или управляющие форматированием вывода. Например, для вывода информации в удобочитаемом формате можно использовать опцию –H (вместо 1024 будет выводиться 1K и т. д.) или опцию -h (или --si) для представления объема файлов в виде степеней с десятичным показателем (1K=1000).

Если вы не знаете точно, какие файловые системы расположены в определенных ветвях вашего дерева каталогов, то запустите команду df, указав в качестве параметра имя директории или даже имя файла, как показано в листинге 10.

Листинг 10. Вывод команды df в удобном для чтения формате
[ian@echidna ~]$ df --si ~ian/index.html
Filesystem             Size   Used  Avail Use% Mounted on
/dev/sdb9               47G    26G    19G  58% /

Команда tune2fs

Для файловых систем семейства ext существует утилита под названием tune2fs, которая также предназначена для получения информации о количестве блоков и о том, является ли файловая система журналируемой (ext3 или ext4) или нет (ext2). Эту команду можно также использовать для установки многочисленных параметров или для преобразования файловой системы ext2 в ext3 путем добавления журнала. В листинге 11 показан пример вывода для практически незаполненной файловой системы ext3 с использованием опции –l; в результате просто выводится актуальная информация.

Листинг 11. Использование команды tune2fs для вывода информации о файловой системе ext4
[root@echidna ~]# tune2fs -l /dev/sda7
tune2fs 1.41.9 (22-Aug-2009)
Filesystem volume name:   EXT3TEST
Last mounted on:          <not available>
Filesystem UUID:          7803f979-ffde-4e7f-891c-b633eff981f0
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype 
 needs_recovery sparse_super large_file
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              7159808
Block count:              28637862
Reserved block count:     1431893
Free blocks:              28140444
Free inodes:              7159797
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1017
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Filesystem created:       Mon Aug  2 15:23:34 2010
Last mount time:          Tue Aug 10 14:17:53 2010
Last write time:          Tue Aug 10 14:17:53 2010
Mount count:              3
Maximum mount count:      30
Last checked:             Mon Aug  2 15:23:34 2010
Check interval:           15552000 (6 months)
Next check after:         Sat Jan 29 14:23:34 2011
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:	          256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      2438df0d-fa91-4a3a-ba88-c07b2012f86a
Journal backup:           inode blocks

Команда xfs_info

Информация о файловой системе XFS, которую выводит mkfs.xfs при ее создании, может быть получена с помощью команды xfs_info, как показано в листинге 12. Команду xfs_info необходимо использовать для смонтированной файловой системы.

Листинг 12. Использование команды xfs_info для вывода информации о файловой системе XFS
[root@echidna ~]# xfs_info /dev/sda8
meta-data=/dev/sda8              isize=256    agcount=4, agsize=2622108 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=10488429, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=4096   blocks=5121, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Команда du

Команда df выводит информацию о файловой системе в целом. Иногда возникает необходимость узнать, сколько дискового пространства занимает та или иная директория, или какого размера должен быть раздел, чтобы на него можно было перенести, например, директорию /usr. Ответы на эти вопросы позволяет получить команда du.

Команда du выводит информацию о файле или файлах, имена которых указаны в качестве параметров. Если в качестве параметра указано имя директории, команда du последовательно вычисляет размер каждого ее файла и поддиректории. В результате может выводиться большой объем информации. К счастью, у команды du имеется опция -s, при использовании которой выводится только суммарная информация для директории. Если команда du используется для получения информации о нескольких директориях, следует добавить опцию -c для получения общего суммарного объема. Также имеется возможность управлять форматированием вывода с указанием тех же опций (-h, -H, --si и т. д.), что и для команды df. В листинге 13 показаны два примера просмотра домашней директории нового пользователя, который один раз вошел в систему и создал файл index.html.

Листинг 13. Использование команды du
[testuser1@echidna ~]$ du -hc *
4.0K	Desktop
4.0K	Documents
4.0K	Downloads
16K	index.html
4.0K	Music
4.0K	Pictures
4.0K	Public
4.0K	Templates
4.0K	Videos
48K	total
[testuser1@echidna ~]$ du -hs .
1.1M	.

Команда du -c * вывела суммарный объем в 48 Кб, а команда du -s – объем в 1.1 Мб из-за того, что в последнем случае также учитываются все записи, начинающиеся с точки, например, .bashrc.

Следует также отметить, что у вас должны быть права на чтение тех директорий, для которых запускаете команду du.

Итак, давайте применим команду du для вывода общего объема, занимаемого директорией /usr и всеми ее поддиректориями первого уровня. Результат показан в листинге 14. Запускайте команду du с полномочиями пользователя root, чтобы убедиться в том, что у вас имеются необходимые права доступа.

Листинг 14. Использование команды du для директории /usr
[root@echidna ~]# du -shc /usr/*
394M	/usr/bin
4.0K	/usr/etc
4.0K	/usr/games
156M	/usr/include
628K	/usr/kerberos
310M	/usr/lib
1.7G	/usr/lib64
110M	/usr/libexec
136K	/usr/local
30M	/usr/sbin
2.9G	/usr/share
135M	/usr/src
0	/usr/tmp
5.7G	total

Восстановление файловых систем

Иногда (и я надеюсь, очень и очень редко) может произойти самое худшее, и вам потребуется восстановить файловую систему; это может произойти после серьезного сбоя или возникновения другой проблемы, приведшей к некорректному демонтированию файловой системы. Рассмотренная ранее команда fsck позволяет не только выполнять проверку файловых систем, но и восстанавливать их. Обычно в процессе загрузки системы выполняется автоматическая проверка и восстановление файловых систем, после чего вы можете продолжать работу.

Если во время автоматической проверки согласованное состояние файловой системы восстановить не удается, то обычно система переводится в однопользовательский режим, в котором пользователю выдаются инструкции по ручному запуску fsck. В случае работы с нежурналируемой файловой системой ext2 система может задать ряд запросов на подтверждение выполнения действий по восстановлению определенных блоков файловой системы. Обычно следует соглашаться с предложениями команды fsck, набирая y. После перезагрузки системы проверьте, не потерялись ли какие-то файлы и данные.

Если вы подозреваете, что файловая система была повреждена или хотите выполнить проверку вручную, то следует учитывать, что большинство программ требуют, чтобы файловая система была демонтирована или, по крайней мере, была смонтирована в режиме «только для чтения». Поскольку корневую файловую систему работающей системы демонтировать невозможно, максимум, что можно сделать – это перейти в однопользовательский режим (команда telinit 1) и заново смонтировать корневую файловую систему в режиме "только для чтения", что позволит выполнить проверку ее целостности. Самый лучший способ выполнить проверку файловых систем – это загрузить операционную систему для аварийного восстановления (например, с Live-CD или USB-накопителя) и выполнить проверку демонтированных файловых систем уже из этой ОС.

Если программа fsck не помогла решить проблему, можно воспользоваться другими доступными средствами; в этом случае для успешного восстановления файловой системы необходимо иметь четкое представление о ее разметке.

Для чего нужно журналирование?

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

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

Если вы выполняете ручную проверку файловой системы, обратитесь к man-страницам соответствующей команды fsck ( fsck.ext3, e2fsck, reiserfsck и т. д.) для получения информации о соответствующих параметрах. Опция -p, используемая при работе с файловыми системами ext2, ext3 или ext4, указывает команде fsck автоматически исправлять все ошибки, если это безопасно. Фактически, именно это и происходит при загрузке компьютера.

Далее будет показан пример использования команд e2fsck и xfs_check; сначала запустим команду e2fsck для работы с файловой системой XFS, а затем команду xfs_check – для ее восстановления. Я советую использовать интерфейс fsck, чтобы быть уверенными в том, что используется правильная программа проверки (имейте в виду, что при использовании неправильной программы проверки файловая система может быть повреждена).

В листинге 15 мы запускаем команду e2fsck для раздела /dev/sda8, содержащего файловую систему XFS. После выполнения нескольких действий мы завершаем работу с помощью Ctrl-Break, но уже поздно. Внимание! Не делайте этого, если только вы не хотите уничтожить вашу файловую систему.

Листинг 15. Ручной запуск e2fsck для файловой системы XFS
[root@echidna ~]# e2fsck /dev/sda8
e2fsck 1.41.9 (22-Aug-2009)
/dev/sda8 was not cleanly unmounted, check forced.
Resize inode not valid.  Recreate<y>? yes

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
Free blocks count wrong for group #0 (31223, counted=31224).
Fix<y>? ctrl-Break

/dev/sda8: e2fsck canceled.

/dev/sda8: ***** FILE SYSTEM WAS MODIFIED *****

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

Теперь давайте восстановим файловую систему XFS с помощью команды xfs_check. Эта команда выводит довольно много сообщений, но если использовать опцию -s, она будет сообщать только о серьезных ошибках. Вывод команды xfs_check показан в листинге 16.

Листинг 16. Восстановление файловой системы XFS с помощью xfs_check
[root@echidna ~]# xfs_check -s /dev/sda8
cache_node_purge: refcount was 1, not zero (node=0x1cf3ee0)
xfs_check: cannot read root inode (117)
cache_node_purge: refcount was 1, not zero (node=0x1cf7400)
xfs_check: cannot read realtime bitmap inode (117)
bad magic # 0x1040000 in btbno block 0/1
bad magic # 0x4000 in btcnt block 0/2
bad magic # 0x58465342 in inobt block 0/0

Для восстановления файловой системы XFS можно также использовать команду xfs_repair. Так же, как и xfs_check, эта команда выводит подробную информацию, но не имеет опции -s. Чтобы просто посмотреть, какие ошибки могут быть исправлены (но не исправлять их), запустите команду xfs_repair -n.

Суперблоки

Возможно, вы захотите узнать, как инструменты и утилиты по восстановлению файловых систем узнают о том, откуда начать работу? Файловые системы Linux и UNIX обычно содержат суперблок, который описывает метаданные файловой системы, т. е. данные, описывающие саму файловую систему. Обычно эти данные хранятся в известном месте (часто в самом начале файловой системы) и реплицируются в другие места. Чтобы посмотреть все местоположения суперблока существующей файловой системы, используйте команду mke2fs с опцией -n. Если вы указали параметры, например, размер индексного дескриптора inode в байтах, следует запускать команду mke2fs с теми же параметрами, что и при использовании опции -n. В листинге 17 показаны местоположения суперблоков на устройстве /dev/sda7.

Листинг 17. Поиск местоположений суперблоков
[root@echidna ~]# mke2fs -n /dev/sda7
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
7159808 inodes, 28637862 blocks
1431893 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
874 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Продвинутые инструменты

Существуют и другие, более мощные инструменты для проверки и восстановления файловых систем. Узнать о них можно из материалов Linux Documentation Project (см. раздел Ресурсы). Почти все команды, представленные в этом разделе, требуют, чтобы перед работой файловая система была демонтирована, хотя некоторые функции можно использовать в файловых системах, смонтированных в режиме «только для чтения». Ниже я кратко расскажу о нескольких таких командах.

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

Инструменты для работы с файловыми системами ext2 и ext3

tune2fs
Настраивает параметры файловых систем ext2 и ext3. Используется для добавления журнала к файловой системе ext2 (таким образом, делая из нее ext3), а также для отображения или установки максимального числа монтирований, после которого выполняется принудительная проверка. Также может использоваться для присвоения меток и включения либо отключения различных дополнительных возможностей.
dumpe2fs
Выводит информацию о дескрипторах суперблока и группы блоков для файловых систем ext2 и ext3.
debugfs
Интерактивный отладчик файловой системы. Используется для проверки или изменения состояния файловых систем ext2 и ext3.

Инструменты для работы с файловой системой Reiserfs

reiserfstune
Отображает или настраивает параметры файловой системы ReiserFS.
debugreiserfs
Выполняет те же действия, что и dumpe2fs и debugfs, для файловой системы ReiserFS.

Инструменты для файловой системы XFS

xfs_info
Выводит информацию о файловой системе XFS.
xfs_growfs
Расширяет файловую систему XFS (предполагается, что имеется доступный дополнительный раздел).
xfs_admin
Изменяет параметры файловой системы XFS.
xfs_repair
Восстанавливает файловую систему XFS, когда проверок, выполняющихся при ее монтировании, оказывается недостаточно.
xfs_db
Выполняет проверку или отладку файловой системы XFS.

Мы закончим наш краткий обзор примером использования инструмента debugfs, для анализа внутреннего устройства файловых систем семейства ext. По умолчанию этот инструмент открывает файловую систему в режиме "только для чтения", а поскольку он содержит множество команд, позволяющих восстанавливать файлы и директории, а также выполнять другие операции, требующие доступа на запись, то следует специально предоставить этот доступ с помощью опции -w. Используйте debugfs очень аккуратно. В листинге 18 показано, как открыть корневую файловую систему моего компьютера, перейти в мою домашнюю директорию, показать информацию (включая номер inode) о файле с названием index.html и, наконец, сопоставить этот номер inode полному имени файла.

Листинг 18. Использование debugfs
[root@echidna ~]# debugfs /dev/sdb9
debugfs 1.41.9 (22-Aug-2009)
debugfs:  cd home/ian
debugfs:  pwd
[pwd]   INODE: 165127  PATH: /home/ian
[root]  INODE:      2  PATH: /
debugfs:  stat index.html
Inode: 164815   Type: regular    Mode:  0644   Flags: 0x0
Generation: 2621469650    Version: 0x00000000
User:  1000   Group:  1000   Size: 14713
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 32
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x4bf1a3e9 -- Mon May 17 16:15:37 2010
atime: 0x4c619cf0 -- Tue Aug 10 14:39:44 2010
mtime: 0x4bf1a3e9 -- Mon May 17 16:15:37 2010
Size of extra inode fields: 4
Extended attributes stored in inode body: 
  selinux = "unconfined_u:object_r:user_home_t:s0\000" (37)
BLOCKS:
(0-2):675945-675947, (3):1314836
TOTAL: 4

debugfs:  ncheck 164815
Inode	Pathname
164815	/home/ian/index.html
debugfs:  q

Заключение

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

Ресурсы

Научиться

  • Оригинал статьи: Learn Linux, 101: Maintain the integrity of filesystems (EN).
  • Используйте перечень материалов для подготовки к экзаменам LPIC-1 (EN) для поиска статей developerWorks, которые помогут вам подготовиться к сдаче экзаменов программы сертификации LPIC-1, основанной на целях по состоянию на апрель 2009 года.
  • На Web-сайте программы сертификации LPIC (EN) вы найдете подробные цели, списки задач и примерные вопросы всех трех уровней сертификации на администратора Linux-систем профессионального института Linux. В частности, на этом сайте представлены цели экзаменов LPI 101 и LPI 102 по состоянию на апрель 2009 года. Всегда обращайтесь к Web-сайту программы сертификации LPIC, чтобы узнать последние цели.
  • Просмотрите всю серию статей для подготовки к экзаменам института LPI (EN) на сайте developerWorks, основанных на предыдущих целях, определенных до апреля 2009 года, чтобы изучить основы администрирования Linux и подготовиться к экзаменам для получения сертификата администратора Linux.
  • Узнайте больше о файловой системе tmpfs из статьи "Common threads: Advanced filesystem implementor's guide, Part 3" (EN) (developerWorks, сентябрь 2001 г.).
  • Web-сайт Linux Documentation Project (EN) содержит большое количество полезной документации, в особенности, HOWTO-руководств.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы в первый раз заходите в developerWorks. Выберите данные в своем профиле (имя, страна/регион, компания) которые будут общедоступными и будут отображаться, когда вы публикуете какую-либо информацию. Вы можете изменить данные вашего ИБМ аккаунта в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=776269
ArticleTitle=Изучаем Linux, 101: Oбеспечение целостности файловой системы
publish-date=11222011