В этой статье рассматриваются такие темы:
- Проверка целостности файловых систем.
- Отслеживание свободного дискового пространства и индексных дескрипторов (inodes).
- Устранение мелких проблем файловой системы.
В этой статье рассматриваются как стандартные, так и журналируемые файловые системы. Основной акцент сделан на файловых системах ext2 и ext3, но инструменты для работы с другими файловыми системами также будут рассмотрены. Большая часть материала этой статьи применима как к ядру версии 2.4, так и к ядру версии 2.6. Основная часть примеров была выполнена в операционной системе Fedora 12 с ядром версии 2.6.32. При выполнении примеров в других операционных системах полученные результаты могут отличаться.
Эта статья поможет вам подготовиться к сдаче экзамена LPI 101 на администратора начального уровня (LPIC-1) и содержит материалы цели 104.2 темы 104. Цель имеет вес 2.
Чтобы извлечь наибольшую пользу из наших статей, необходимо обладать базовыми знаниями о Linux и иметь работоспособный компьютер с Linux, на котором можно будет выполнять все встречающиеся команды. Иногда различные версии программ выводят результаты по-разному, поэтому содержимое листингов и рисунков может отличаться от того, что вы увидите на вашем компьютере.
Также вы должны быть знакомы с материалом статьи "Изучаем Linux 101: создание разделов и файловых систем".
В случае сбоя или отключения электропитания 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 выводит информацию о смонтированных файловых системах. Если добавить опцию -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% / |
Для файловых систем семейства 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, которую выводит 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 |
Команда 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 в Твиттере или подпишитесь на твиты Linux на сайте developerWorks (EN).