Резервное копирование и восстановление данных

Резервное копирование и восстановление данных

Статья включает:

Общие сведения
Стратегии резервного копирования
Выбор носителя и места размещения копируемых данных
Выбор формата резервного копирования
Управление резервным копированием
Архивация данных
Создание архива
Извлечение файлов из архива
Компрессия архива
Декомпрессия архива
Выбор средства для хранения
Сменные носители
Резервное копирование физических жестких дисков
Образы типа Ghost
Резервное копирование на удаленную систему
Удаленные файловые системы
Другие способы создания удаленных резервных копий
Дисковая структура файловой системы QNX4
Компоненты раздела
Каталоги
Ссылки
Блоки экстентов
Файлы
Утилиты для обслуживания файлов
Утилита fdisk
Утилита dinit
Утилита chkfsys
Утилита dcheck
Утилита zap
Утилита spatch
Восстановление дисков и файлов
Использование утилиты chkfsys для файловой системы QNX4
Восстановление при наличии поврежденного блока в середине файла
Что делать, если система больше не загружается?
Если утилита mount завершается с ошибкой
Если диск не восстанавливается
Если файловая система не повреждена

Общие сведения

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

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

Расширение файла Утилита
.tar pax или tar
.cpio pax или cpio
.gz gzip или gunzip
.bz2 bzip2 или bunzip2
.xz xz
.tar.gz или .tgz tar -z
.tar.bz2 tar -j
.tar.xz tar -J

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

Файловая система QNX4 была построена с учетом возможности возникновения таких катастрофических событий. Основным принципом, положенным в основу структуры файловой системы, является то, что при любых обстоятельствах должна сохраняться целостность файловой системы. В то время как большая часть данных проходит через буферную кэш-память и записывается с небольшой задержкой, запись критических данных файловой системы происходит немедленно. Обновления блоков каталога, блоков индексных дескрипторов (inode blocks), блоков экстентов (extent blocks) и блоков битовой карты (bitmap) сразу же записываются на диск, чтобы гарантировать сохранность структуры файловой системы (т.е. данные на диске никогда не должны быть внутренне противоречивыми).


Note: Файловая система Power-Safe сконструирована таким образом, что ее невозможно испортить; у пользователя всегда есть доступ к текущей версии данных. Некоторые сведения о восстановлении данных действительны только для файловых систем QNX4.

При возникновении аварийной ситуации можно использовать различные утилиты: fdisk, dinit, chkfsys и spatch. Они помогут обнаружить и восстановить поврежденные файлы, которые были открыты на запись в момент возникновения аварии. Во многих случаях удается полностью восстановить файловую систему.

Иногда характер повреждений может быть более серьезным. Например, вполне возможно, что поврежденный сектор (bad block) окажется в середине файла, записанного на жесткий диск, либо (что еще хуже) в середине каталога или какого-нибудь критического блока данных.

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

Стратегии резервного копирования

Стратегия резервного копирования состоит в проведении одной или нескольких операций копирования данных. Резервное копирование можно проводить периодически или по отдельной команде запуска процедуры. Для каждой включенной в вашу стратегию процедуры резервного копирования необходимо выбрать:

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

Выбор носителя и места размещения копируемых данных

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

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

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

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

Среда Локально/Нейтрино Удаленно
Гибкий диск (флоппи) Да Да
Устройство LS-120 Да Да
Магнитная лента Нет Да
CD-диски Да Да
DVD-диски Нет Да
Жесткий диск Да Да
Флэш-память Да Да
Память большой емкости с интерфейсом USB Да Да

Выбор формата резервного копирования

При резервном копировании данных нужно решить, будет ли отдельно копироваться каждый файл и каталог или будет создаваться архив с набором файлов. Также нужно решить, будет ли проводиться операция компрессии данных для уменьшения требований к объему хранилища для резервных копий.

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

Управление резервным копированием

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

Архивация данных

Резервные копии можно создавать отдельно для каждого файла, а можно сохранять резервные копии нескольких файлов в архиве. Файлы, помещенные в архив, проще идентифицировать по принадлежности к определенному времени создания или компьютеру (например, можно присваивать архиву соответствующее имя). Архив проще передавать целиком в другие системы (передается единственный файл архива), а иногда архив оказывается быстрее сжать по сравнению с компрессией разрозненных файлов.

В ЗОСРВ «Нейтрино» для архива можно использовать несколько форматов, включая pax и tar. В ЗОСРВ «Нейтрино» поддерживается также формат cpio (*.cpio), но мы рекомендуем его выбирать лишь в том случае, когда архив предназначен для других систем, использующих именно формат cpio.

Создание архива

Самым простым способом создания резервной копии в системе является индивидуальное дублирование файлов с помощью команд cp или pax. Например, дублирование единственного файла может быть сделано так:

cp -t мой_файл каталог_для_копии

или

echo мой_файл | pax -rw каталог_для_копии

Для резервного копирования целого каталога нужно ввести:

cp -Rt мой_каталог каталог_для_копии

или

find мой_каталог -print | pax -rw каталог_для_копии

Для копирования только определенных файлов, соответствующих некоторому критерию, нужно использовать утилиту find или другое средство для идентификации копируемых файлов и перенаправить вывод утилите pax -rw, например, так:

find мой_каталог -name '*.[ch]' | pax -rw каталог_для_копии

Для объединения отдельных файлов в единый архив можно использовать программы tar или pax. Эти утилиты берут все передаваемые им файлы и помещают их в один большой непрерывный файл. Эти же утилиты могут использоваться для извлечения отдельных файлов из архива.


Note: В файловой системе не поддерживаются архивы (или отдельные файлы) размером больше 2 Гбайт.

Когда в качестве архиватора используется утилита pax (режим -w), то создаваемые ей архивы имеют формат TAR. Какую из команд использовать, определяется тем синтаксисом командной строки, который вам больше нравится, поскольку создаваемые архивы будут идентичны. Утилита pax была создана как часть стандарта POSIX для обеспечения совместимого механизма для обмена архивами (pax расшифровывается как Portable Archive eXchange — обмен переносимыми архивами). Это позволило избежать конфликтов, возникающих при работе с различными вариантами программы tar, при которых наблюдалось их разное поведение.

Далее приведены возможные варианты структуры архива:

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

Извлечение файлов из архива

Для извлечения файлов из архива можно использовать утилиту pax с ключом -r:

pax -rf my_archive.tar

Или можно использовать команду tar с ключами -x (от англ. extract — извлечь), -v (от англ. verbose — вывод информации о ходе работы программы) и -f (от англ. filename — имя файла):

tar -xvf my_archive.tar


Note: Чтобы просмотреть содержимое архива без извлечения из него файлов, можно в программе tar вместо ключа -x использовать ключ -t.

Компрессия архива

Архив может иметь достаточно большой размер, особенно если архивируется целый раздел диска. Для уменьшения занимаемого архивом места можно сжать архив, хотя для компрессии при сохранении и для декомпрессии при извлечении файлов требуется некоторое время. В ЗОСРВ «Нейтрино» имеются следующие программы компрессии/декомпрессии:

Обычно лучше всего использовать программу gzip, потому что ее поддержка осуществляется во многих операционных системах, тогда как программа xz используется, главным образом, для обеспечения максимальной степени компрессии. Существует также много других программ для компрессии от сторонних производителей.

Например, для сжатия архива my_archive.tar с получением результата в файле my_archive.tar.gz нужно ввести:

gzip my_archive.tar

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


Note: По умолчанию сжатый файл получает расширение .tar.gz, но может встретиться и расширение .tgz. Для задания этого суффикса нужно при вызове программы gzip использовать ключ -S.

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

Например, для сжатия архива my_archive.tar с получением результата в файле my_archive.tar.xz нужно ввести:

xz my_archive.tar

Декомпрессия архива

Для декомпрессии архива используется соответствующая утилита. В случае файлов с расширениями .gz или .tgz необходимо использовать программу gunzip таким образом:

gunzip my_archive.tar.gz

или

gunzip my_archive.tgz

В обоих случаях происходит декомпрессия файла в результирующий файл my_archive.tar. Для извлечения файла из архива без предварительной декомпрессии можно также запустить программу tar с ключом -z:

tar -xzf my_archive.tgz

Декомпрессия архива с расширением .xz:

xz -d my_archive.tar.xz

Для извлечения файла из архива .xz без предварительной декомпрессии через утилиту tar:

tar -xf my_archive.tar.xz

Выбор средства для хранения

Сменные носители

В ЗОСРВ «Нейтрино» поддерживаются устройства типа LS-120, магнитооптические дисководы, встроенные ZIP-дисководы и устройства для хранения массивов данных с интерфейсом USB. У каждого из этих устройств есть свои достоинства и недостатки. Поэтому принятие окончательного решения по использованию для резервного копирования конкретного устройства остается за вами. Инструкции по установке этого оборудования приведены в разделе Подключение оборудования.

Резервное копирование физических жестких дисков

Идентичные образы жестких дисков можно делать с помощью простых утилит, входящих в состав ЗОСРВ «Нейтрино». Эта процедура выполняет полное копирование "сырых данных" (raw copy) с диска.

Если у вас имеются идентичные жесткие диски (одинаковые производители, размеры, номер модели), то можно просто присоединить этот диск к системе. Убедитесь, что вы знаете установки для диска (например, первичный ведомый диск для интерфейса EIDE).

После присоединения диска загрузите систему ЗОСРВ «Нейтрино». После загрузки должен быть автоматически обнаружен жесткий диск, и для него будет создана запись в каталоге /dev. Если в системе имеются всего два диска, то новая запись появится в виде /dev/hd1. Если же имеется более двух дисков (дисководов), то, соответственно, вновь установленный диск может получить имя hd1, hd2 и т.д. В этом случае для идентификации конкретного диска придется использовать программу fdisk. Вновь установленный диск не должен иметь никаких разделов и быть чистым.


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

После идентификации дисков выполните команду:

ср -V /dev/hd0 /dev/hd1

где hd0 — исходный жесткий диск с данными, а hd1 — новый чистый диск, на который копируются данные.

По этой команде содержимое первого диска полностью копируется на второй диск, включая таблицы разделов, начальные загрузчики и т.д. Чтобы убедиться в идентичности дисков, нужно просто отключить исходный диск и поставить на его место диск-копию. После этого перезагрузить систему. Должна произойти загрузка ЗОСРВ «Нейтрино», и все должно выглядеть и работать, как на исходном диске. Сохраните резервную копию в безопасном месте.

Образы типа Ghost

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

Резервное копирование на удаленную систему

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

Удаленные файловые системы

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


Note: Если вы размещаете файл в файловой системе, не относящейся к типу «Нейтрино», то могут быть утеряны существующие права доступа к файлу. Файлы в среде ЗОСРВ (как и во всех системах типа UNIX) имеют специальные права доступа (см. раздел Файлы и каталоги), которые теряются, если отдельные файлы сохраняются в файловых системах типа Windows. Если создается архив (см. раздел "Архивация данных" ранее в этой статье), то права доступа к файлам, записанным внутри архива, сохраняются.

Другие способы создания удаленных резервных копий

Существуют другие версии систем для удаленного резервного копирования, которые доступны в ЗОСРВ «Нейтрино» как продукты сторонних производителей. Многие из них являются бесплатными. Попробуйте поискать в Интернете инструменты, которые подойдут для использования в вашей компании и ее проектах.

Дисковая структура файловой системы QNX4

Если вы когда-нибудь сталкивались с проблемами при работе в файловой системе QNX4, то вам нужно представлять, как в этой файловой системе данные сохраняются на диске. Такое знание поможет распознать и, возможно, предотвратить повреждение данных, если вы захотите перестроить файловую систему. В заголовочном файле <sys/fs_qnx4.h> содержатся определения, касающиеся структуры данных, о чем пойдет речь в данном разделе.

С полным описанием файловой системы QNX4 можно ознакомиться в разделе Работа с файловыми системами.

Компоненты раздела

Файловая система QNX4 может занимать целый диск (например, в случае флоппи-дисков) или один из разделов жесткого диска. В пределах раздела жесткого диска в состав файловой системы QNX4 входят следующие компоненты (рис. 1):

18_1.png
Рисунок 1. Компоненты файловой системы QNX4 в разделе диска

Указанные структуры создаются при инициализации файловой системы утилитой dinit.

Блок загрузчика

Первый физический блок раздела диска является блоком загрузчика. В нем содержится начальный код, который загружается программой BIOS и выполняет дальнейшую загрузку ОС с данного раздела. Если на диске отсутствуют разделы (например, это флоппи-диск), то блоком загрузчика является первый физический блок диска.

Корневой блок

Корневым является второй блок раздела файловой системы QNX4. Его структура соответствует структуре стандартного каталога, и в ней содержится поле метки и информация по индексным дескрипторам (inode) для таких специальных файлов, как:

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

Обычно для ЗОСРВ «Нейтрино» загружается образ, хранящийся в файле /.boot. Однако если имеется непустой файл /.altboot, то можно загрузить хранящийся в этом файле образ. Подробнее об этом см. раздел Управление запуском ЗОСРВ «Нейтрино».

Блоки битовой карты

За корневым блоком последовательно располагается несколько блоков. Эти битовые блоки формируют битовую карту (матрицу) раздела файловой системы QNX4. Каждому физическому блоку раздела соответствует один бит карты. Таким образом, один блок битовой карты используется для каждых 4096 физических блоков диска (это соответствует дисковому пространству 2 Мбайт).

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

Назначение битов происходит, начиная с самого младшего бита нулевого байта первого блока битовой карты – это в файловой системе QNX4 соответствует блоку с номером 1.

Корневой каталог

Корневой каталог располагается после блоков битовой карты. Корневой каталог – это обычный каталог (см. подраздел "Каталоги" далее в этой статье) с двумя исключениями:

Корневой каталог изначально создается с помощью утилиты dinit размером в 4 блока, что обеспечивает достаточно места для записей на 32 каталога.

В корневом каталоге (/) имеются записи для нескольких специальных файлов (рис. 2), которые всегда присутствуют в файловой системе QNX4. Эти файлы также создаются с помощью утилиты dinit во время первой инициализации файловой системы.

Файл Описание
/. Ссылка на корневой каталог /
/.. Ссылка на корневой каталог /
/.bitmap Файл с атрибутом "только чтение", в котором хранится битовая карта для всех блоков диска. Каждый бит указывает, используется ли соответствующий блок
/.inodes Обычный файл, состоящий, по крайней мере, из одного блока для флоппи- или RAM-диска и из 16 блоков для других дисков. В файле /.inodes содержится набор записей индексных дескрипторов (inode). Первая запись является зарезервированной, это сигнатурная/информационная область. Первые байты файла .inode содержат текст IamTHE.inodeFILE
/.longfilenames Дополнительный файл, в котором сохраняется информация о файлах, чьи имена имеют длину более 48 символов. См. подраздел Файловая система QNX4
/.boot Это файл образа ОС, который будет загружен в память во время процесса стандартной загрузки. Если файл загрузки отсутствует, то этот файл будет иметь нулевую длину
/.altboot Это файл образа ОС, который будет загружен в память во время процесса альтернативной загрузки. Если файл загрузки отсутствует, то этот файл будет иметь нулевую длину

18_2.png
Рисунок 2. Содержимое корневого каталога /

Каталоги

Каталог представляет собой файл, имеющий в файловой системе специальное назначение. В нем содержится коллекция элементов каталога (рис. 3).

18_3.png
Рисунок 3. Элемент каталога

Биты в поле i_status указывают тип элемента каталога.

QNX4FS_FILE_LINK QNX4FS_FILE_USED Тип элемента
0 0 Неиспользуемый элемент каталога
0 1 Обычный, используемый элемент каталога
1 0 Ссылка на соответствующую запись в файле /.inodes (которую следует использовать)
1 1 Некорректный тип элемента

Первый элемент каталога всегда используется для ссылки с именем . ("точка") и включает сигнатуру каталога ("I♥KPDA"). Шестнадцатеричный эквивалент символа ♥ равен 0x03. Этот элемент ссылается на сам каталог, указывая на элемент внутри родительского каталога, который описывает данный каталог.

Второй элемент каталога всегда имеет запись о связи с именем .. ("две точки"). Этот элемент ссылается на родительский каталог, указывая на первый блок родительского каталога.

Каждый элемент каталога либо определяет файл, либо указывает на запись внутри файла /.inodes. Индексные записи inode используются в случае, когда имя файла оказывается длиннее 16 символов или когда одно или более имен связаны в один файл. Если включена поддержка длинных имен, то в корневом каталоге файловой системы присутствует также файл .longfilenames, в котором сохраняется информация о файлах, чьи имена имеют длину более 48 символов.

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

Ссылки

Файлы с длиной имени более 16 символов и файлы, которые являются ссылками (link) на другие файлы, имеют специальную форму записи в элементе каталога. Для этих записей в поле i_status устанавливается бит QNX4FS_FILE_LINK (0x08).

Для таких файлов часть элемента каталога перемещается в файл /.inodes (рис. 4).

18_4.png
Рисунок 4. Запись индексного дескриптора

Если имя файла оказывается длиннее 48 символов, то:

Блоки экстентов

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

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

18_5.png
Рисунок 5. Блок экстентов

Каждый блок экстентов содержит:

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

Файлы

Файлы или экстенты файлов представляют собой группы блоков, указанные в элементах каталога или в записях inode. Для них в файловой системе QNX4 нет какой-либо специальной структуры.

18_6.png
Рисунок 6. Файловая структура в QNX4

Утилиты для обслуживания файлов

Если случаются какие-либо аварийные отказы, то для восстановления системы и файлов можно использовать следующие утилиты:

В этом разделе дается краткое описание перечисленных утилит.

Утилита fdisk

С помощью утилиты fdisk можно создавать и обслуживать блок раздела на жестком диске. Этот блок совместим с другими операционными системами, и работа с ним может осуществляться с помощью программ fdisk от других ОС (однако преимуществом нашей версии программы является то, что она распознает специфическую для ЗОСРВ «Нейтрино» информацию). Если загрузчик раздела отсутствует или поврежден, то утилита fdisk может создать его.


Note: Мы рекомендуем сохранять в виде печатной копии информацию о таблице разделов каждого из дисков в сети.

Утилита dinit

С помощью утилиты dinit создаются следующие компоненты файловой системы QNX4:

Если первые несколько блоков вашей файловой системы оказываются поврежденными, то можно попытаться их восстановить с помощью сначала утилиты dinit с ключом -r, а затем утилиты chkfsys. Более подробно см. в описании утилиты dinit.

Утилита chkfsys

Утилита chkfsys является главным инструментом, необходимым для обслуживания файловой системы.


Note: Утилита chkfsys запрашивается при повреждении файловой системы устойчивой к сбоям питания; для этого типа файловой системы необходимо использовать chkqnx6fs.

С ее помощью можно выполнить следующее:

При запуске утилиты chkfsys предполагается, что корневой блок имеет нормальную рабочую структуру. Если структура корневого блока нарушена, то выдается сообщение об этом, и утилита chkfsys прекращает работу. Восстановление структуры корневого блока производится с помощью утилиты dinit.

Утилита dcheck

С помощью утилиты dcheck происходит поиск на диске поврежденных секторов, предпринимающий попытку прочесть каждый сектор. Если при запуске утилиты указывается ключ -m, то поврежденный сектор изымается из использования с помощью соответствующей отметки в битовой карте (файл /.bitmap).

Если во время работы утилиты обнаруживается файл /.bad_blks, то происходит обновление битовой карты и воссоздание файла /.bad_blks. Утилиту dcheck можно запускать несколько раз для увеличения надежности распознавания поврежденных секторов и их добавления в файл /.bad_blks.

Утилита zap

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

Восстановление ошибочно стертого файла

Если вы по ошибке стерли файл, то иногда стертый файл можно восстановить с помощью утилиты zap, если использовать ключ -u и запустить утилиту немедленно после удаления. Восстановление удаленного файла с помощью утилиты zap возможно при выполнении следующих условий:

Утилита spatch

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

Утилита spatch дает возможность просканировать весь диск напрямую и устранить мелкие проблемы. Иногда удается устранить временно возникающие проблемы на диске путем чтения и перезаписи сбоящего блока с помощью утилиты spatch.


Note: Перед тем как использовать утилиту spatch, убедитесь в том, что вы понимаете тонкости структуры файловой системы QNX4. Обратитесь еще раз к подразделу "Дисковая структура файловой системы QNX4" ранее в этой статье.

Восстановление дисков и файлов

Использование утилиты chkfsys для файловой системы QNX4

Утилита chkfsys является вашим основным инструментом для проверки и восстановления потенциально поврежденной файловой системы. С ее помощью можно идентифицировать и откорректировать массу небольших проблем, а также проверить целостность всей дисковой системы.

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

Для запуска утилиты chkfsys в точке монтирования введите команду:

chkfsys точка_монтирования

Утилита выполнит сканирование всего раздела диска, начиная с корневой области и далее вниз по структуре каталогов, выполняя построение внутренней копии битовой карты и проверяя целостность всех найденных в процессе сканирования файлов и каталогов.

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

В дополнение к верификации выделения блоков (битовой карты) при работе утилиты chkfsys делается попытка исправить любые возникающие в процессе сканирования проблемы. Например, с помощью утилиты chkfsys можно:

Когда нужно запускать утилиту chkfsys

Весьма полезно запускать утилиту chkfsys при проведении регулярно выполняемых процедур технического обслуживания — это позволит убедиться в том, что данные на диске не повреждены. Например, хорошо бы запускать утилиту chkfsys на сетевых серверах при каждой их загрузке. Автоматическая проверка файловой системы в момент загрузки гарантирует, что во время сканирования будет сделана попытка устранить все обнаруженные проблемы. Для автоматизации этого процесса добавьте chkfsys в файл re.local на сервере (см. раздел Управление запуском ЗОСРВ «Нейтрино»).

Утилиту chkfsys особенно важно запускать после системного сбоя, аварийного отключения источника питания, после неожиданного перезапуска системы. Это позволит проверить, не были ли повреждены какие-нибудь файлы. Утилита проверяет на диске состояние флага "целостности" файловой системы ("clean" flag), чтобы определить, находится ли в настоящее время система в целостном, непротиворечивом состоянии.

Флаг "целостности" хранится на диске, его установка или сброс производится системой. Сброс этого флага происходит в момент окончания монтирования файловой системы, а установка — при размонтировании файловой системы. При установленном флаге "целостности" подразумевается, что файловая система не повреждена. Если при запуске утилиты chkfsys флаг "целостности" сброшен, то делается попытка устранить проблему.

Для утилиты chkfsys можно использовать ключ -u, при котором установленный флаг "целостности" игнорируется, и утилита запускается безусловно. Такая необходимость может возникнуть, когда:

Использование утилиты chkfsys на работающей системе

Для проведения всесторонней верификации диска с помощью утилиты chkfsys обычно требуется эксклюзивное использование файловой системы.


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

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

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


Если запущено приложение, для которого невозможна приостановка работы, или невозможно запустить утилиту chkfsys, потому что файлы были открыты для обновления, то попробуйте при запуске утилиты chkfsys использовать ключ -f:

chkfsys -f /dev/hd0t79

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

Восстановление при наличии поврежденного блока в середине файла

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

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

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

В то же самое время при перезаписи восстанавливается правильное значение CRC (Cyclic Redundancy Check, контроль при помощи циклического избыточного кода), что может снова сделать блок неповрежденным (хотя, возможно, и с ошибочными данными).

После этого можно скопировать файл в другое место и применить к ранее поврежденному файлу утилиту zap. Для завершения процедуры ненадежный блок помечается как поврежденный (путем добавления его в файл /.bad_blks), после чего запускается утилита chkfsys для восстановления остальных неповрежденных блоков.

Если такая процедура не поможет, то можно воспользоваться утилитой spatch для копирования в другой файл как можно большего числа блоков поврежденного файла. После этого нужно применить к поврежденному файлу утилиту zap, а затем запустить утилиту chkfsys.

Что делать, если система больше не загружается?

Если ранее работавшая система на основе ЗОСРВ «Нейтрино» неожиданно перестает работать и не загружается, то это может быть следствием следующего:

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

  1. Попробуйте загрузиться с CD-диска или по сети.

  2. Запустите драйвер жесткого диска. Например, для запуска драйвера SCSI-адаптера типа Adaptec 4 введите команду:

    devb-aha4 ключи &

    Если используется другой тип адаптера, введите его имя, например:

    devb-eide ключи qnx4 ключи &

    В этом случае будет создан блочно-ориентированный файл с именем /dev/hd0, который представляет весь жесткий диск.

  3. Запустите утилиту fdisk.

    Запуск этой утилиты сразу же даст вам полезную информацию о состоянии жесткого диска. Утилита fdisk может выдать информацию, касающуюся одной из нескольких типов проблем.

    Ошибка при чтении блока 1
    Вероятная причина: Произошел отказ контроллера диска или самого диска.
    Рекомендации по устранению: Если жесткий диск исправен, то замена контроллера, возможно, позволит продолжить работу с тем же диском. В противном случае придется заменить жесткий диск, переустановить ЗОСРВ «Нейтрино» и восстановить файлы из резервной копии.
    Неправильные параметры диска
    Вероятная причина: Возможно, потеряна информация о данном жестком диске. Одна из вероятных причин — разряд батареи питания CMOS-памяти.
    Рекомендации по устранению: Обычно перезапуск процедуры настройки оборудования (или (для PS/2) программируемой процедуры выбора настройки) дает положительный результат. Конечно же, замена батареи даст более надежное решение проблемы.
    Неверная информация о разделах
    Вероятная причина: Если утилита fdisk показывает правильный размер диска, но неверно отображается информация о разделах, это значит, что почему-то были разрушены данные в блоке 1 физического диска.
    Рекомендации по устранению: Используйте утилиту fdisk для восстановления правильной информации о разделах. Очень полезно записать заранее или распечатать правильные данные о разделах в блоке 1 жесткого диска. Это значительно облегчит задачу восстановления информации при реализации данного шага.

  4. Произведите монтирование раздела и файловой системы.

    К этому моменту было установлено, что оборудование работает (по крайней мере, это касается блока 1) и что для ЗОСРВ «Нейтрино» определено правильное разделение на разделы. Теперь нужно создать блочно-ориен­тированный файл для самого раздела QNX4 и смонтировать его в качестве файловой системы QNX4:

    mount -e /dev/hd0 mount /dev/hd0t79 /hd

    После этого будет создан том с именем /dev/hd0t79. В зависимости от состояния раздела файловой системы QNX4 монтирование может быть успешным или неудачным. Если информация о разделе правильна, то проблем не будет. Поскольку корневой каталог (/) уже существует (на компакт-диске или на удаленном диске сети), то мы смонтировали раздел локального жесткого диска как файловую систему с именем /hd.

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


Note: Если загрузка происходила с компакт-диска, и не ожидается, что есть какие-либо неисправности в файловой системе на жестком диске (например, система не могла загрузиться из-за простой ошибки в загрузочном файле или в системном файле инициализации), то можно просмотреть символическую связь с разделом вашего жесткого диска в префиксном дереве в памяти администратора процессов:

ln -sP /hd /

Если вы запустили эту команду, то остальную часть текста в этом разделе можно пропустить.


Если утилита mount завершается с ошибкой

Если не удается выполнить команду монтирования, то, скорее всего, поврежден раздел файловой системы QNX4 (поскольку драйвер откажется монтировать нечто, что рассматривается как некорректная файловая система).

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

dinit -hr /dev/hd0t79

Использование ключа -r является указанием на перезапись следующей информации:

Теперь нужно попробовать снова ввести команду mount и попытаться создать для файловой системы QNX4 точку монтирования с именем /hd.

После успешного монтирования необходимо перестроить битовую карту с помощью утилиты chkfsys, даже для хорошего раздела диска.

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

Если жесткий диск смонтирован как /hd (например, загрузка производилась с компакт-диска), то введите команду:

путь_на_CD/chkfsys /hd

Если жесткий диск смонтирован как / (например, при загрузке по сети), введите команду:

сетевой_путь/chkfsys /

В любом случае выполните следующее:

Если диск не восстанавливается

Если диск окажется совершенно не восстанавливаемым, можно попробовать использовать утилиту spatch (см. ранее в этой статье) для восстановления отдельных файлов и каталогов. В некоторых случаях можно попробовать повторно инсталлировать ЗОСРВ «Нейтрино» и восстановить диск из резервной копии.

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

Если файловая система не повреждена

Если файловая система не повреждена, но компьютер по-прежнему отказывается загружаться с жесткого диска, то, вероятно, повреждения следует искать:

Для перезаписи загрузчика раздела можно воспользоваться утилитой fdisk:

fdisk /dev/hd0 loader

Для перезаписи загрузчика системы можно воспользоваться утилитой dinit:

dinit -b /dev/hd0t79

Теперь ваша система должна успешно загружаться.




Предыдущий раздел: перейти