18. Резервное
копирование и восстановление данных
Общие сведения
Даже если у вас имеется
надежное оборудование и источник электропитания, даже если
вы уверены в том, что никогда случайно не сотрете свои
рабочие файлы, все равно имеет смысл выполнять резервное
копирование файлов. Стратегии резервного копирования
различаются в зависимости от простоты их использования,
скорости работы, устойчивости к внешним воздействиям и
стоимости.
Далее будут отдельно
рассматриваться разные типы архивов, тем не менее, в
табл. 18.1 мы приведем краткие сведения по расширениям
файлов архивов и утилитам, которые могут использоваться для
работы с ними.
Таблица 18.1
|
Расширение
файла
|
Утилита
|
.tar
|
pax или tar
|
.cpio
|
pax или cpio
|
.gz
|
gzip или gunzip
|
.tar.gz
или .tgz
|
tar -z
|
.z
или .F
|
melt
|
Не важно,
насколько устойчивой к внешним воздействиям является
файловая система, в реальной жизни всегда возникают
ситуации, когда искажаются данные на диске. Время от времени
отказывает оборудование, возникают перебои в работе
источника питания и т. д.
Файловая система QNX 4 была
построена с учетом возможности возникновения таких
катастрофических событий. Основным принципом, положенным в
основу структуры файловой системы, является то, что при
любых обстоятельствах должна сохраняться целостность
файловой системы. В то время как большая часть данных
проходит через буферную кэш-память и записывается с
небольшой задержкой, запись критических данных файловой
системы происходит немедленно. Обновления блоков каталога,
блоков индексных дескрипторов (inode blocks), блоков
экстентов (extent blocks) и блоков битовой карты (bitmap)
сразу же записываются на диск, чтобы гарантировать
сохранность структуры файловой системы (т. е. данные на
диске никогда не должны быть внутренне противоречивыми).
Примечание. Файловая
система Power-Safe сконструирована таким образом, что ее
невозможно испортить; у пользователя всегда есть доступ к
текущей версии данных. Дополнительную информацию см. в главе
«Файловые системы» руководства "Описание применения. Часть
1. Системная архитектура" КПДА.10964-01 31 01. Некоторые
сведения о восстановлении данных действительны только для
файловых систем QNX 4.
При возникновении аварийной
ситуации можно использовать различные утилиты: fdisk, dinit, chkfsys и spatch. Они помогут обнаружить и
восстановить поврежденные файлы, которые были открыты на
запись в момент возникновения аварии. Во многих случаях
удается полностью восстановить файловую систему.
Иногда характер повреждений
может быть более серьезным. Например, вполне возможно, что
поврежденный сектор (bad block) окажется в середине файла,
записанного на жесткий диск, либо (что еще хуже) в середине
каталога или какого-нибудь критического блока данных.
Опять же, поставляемые
утилиты помогут определить степень повреждения. Часто можно
перестроить файловую систему таким образом, чтобы избежать
использования поврежденных областей диска. В таком случае
некоторые данные будут потеряны, но путем некоторых усилий
можно будет восстановить большую часть поврежденных данных.
Стратегии резервного копирования
Стратегия резервного
копирования состоит в проведении одной или нескольких
операций копирования данных. Резервное копирование можно
проводить периодически или по отдельной команде запуска
процедуры. Для каждой включенной в вашу стратегию процедуры
резервного копирования необходимо выбрать:
-
среду хранения и место размещения копируемых
данных;
-
способ архивации и (дополнительно) способ
компрессии данных;
-
содержимое данных для копирования, частоту или
условия запуска процедуры резервного копирования;
-
автоматический или ручной способ резервного
копирования;
-
локальный или удаленный способ управления
процедурой копирования.
Очень часто
комплексная стратегия резервного копирования включает в себя
проведения нескольких сеансов копирования на локальной
стороне (т. е. с управлением и размещением архивов на
той же машине, где расположены сами данные), а для ряда
сеансов копируемые данные сохраняются на удаленной машине.
Например, можно ежедневно автоматически копировать данные
разработчика на другой раздел жесткого диска, а один раз в
неделю автоматически сохранять резервную копию тех же данных
на централизованный удаленный сервер.
Выбор носителя и места размещения
копируемых данных
На начальном этапе
определения стратегии резервного копирования нужно, прежде
всего, выбрать место сохранения копируемых данных и
носитель, где эти данные будут сохраняться. Эти факторы, в
первую очередь, влияют на стоимость оборудования и среды
сохранения, связанные с вашей системой.
Для выбора наилучшего
варианта определитесь с тем, что нужно копировать и
как часто. Эти параметры помогут определить емкость
носителя для хранения копируемых данных, скорость передачи
по каналу данных и то, как несколько пользователей смогут
совместно использовать этот ресурс.
Выбор необходимого носителя
для хранения данных зависит от того, создаются ли резервные
копии данных на локальной машине или же данные передаются по
сети на удаленную машину:
-
преимуществом локального размещения копируемых
данных является скорость и потенциально более полный
контроль за процессом со стороны конечного пользователя,
а ограничения касаются технологий резервного копирования
и типов сред, непосредственно поддерживаемых в ОСРВ
Neutrino;
-
резервное копирование на удаленную машину,
рассматриваемое в масштабах компании, часто
предоставляет больше возможностей по оборудованию и
дополнительные возможности по объему и средам хранения
данных; недостатки метода обычно связаны с
необходимостью передачи данных по сети и с тем, что
оборудование совместно используется несколькими
пользователями, а это накладывает ограничения на доступ
к данным и на процесс их извлечения.
В
табл. 18.2 приведен перечень некоторых сред для
хранения резервных данных, а также их доступность при
локальной или удаленной операции копирования.
Таблица
18.2
|
Среда
|
Локально/Neutrino
|
Удаленно
|
Гибкий диск (флоппи)
|
Да
|
Да
|
Устройство LS-120
|
Да
|
Да
|
Магнитная лента
|
Нет
|
Да
|
CD-диски
|
Да
|
Да
|
DVD-диски
|
Нет
|
Да
|
Жесткий диск
|
Да
|
Да
|
Флэш-память
|
Да
|
Да
|
Память большой емкости с интерфейсом
USB
|
Да
|
Да
|
|
Выбор формата резервного
копирования
При резервном копировании
данных нужно решить, будет ли отдельно копироваться каждый
файл и каталог или будет создаваться архив с набором файлов.
Также нужно решить, будет ли проводиться операция компрессии
данных для уменьшения требований к объему хранилища для
резервных копий.
Потеря времени на выполнение
компрессии и декомпрессии данных может компенсироваться
уменьшением времени при чтении/записи сжатых данных на среду
хранения или на передачу по сети. Для уменьшения издержек в
процессе выполнения компрессии данных можно задачу
компрессии резервной копии запустить в фоновом режиме.
Возможно, эта процедура компрессии будет запускаться через
несколько дней или недель для компрессии более поздних
резервных копий (это уменьшит занимаемое ими место), в то
время как последние резервные копии останутся максимально
доступными.
Управление резервным копированием
Операцию резервного
копирования нужно производить настолько часто, чтобы
восстанавливаемые данные были бы достаточно актуальными или
чтобы актуальности можно было бы достичь путем затраты
минимальных усилий. Для группы разработчиков программного
обеспечения периодичность копирования может составлять от
одного дня до недели. Каждый день задержки в копировании,
приводящий к необходимости использования устарелой копии,
будет стоить лишнего дня на восстановление данных. Если
необходимо резервное копирование финансовых данных или
данных по продажам, то эта операция обычно выполняется
ежедневно или дважды в день. Хорошей практикой является
использование хранилища данных на стороне.
Архивация данных
Резервные копии можно создавать
отдельно для каждого файла, а можно сохранять резервные
копии нескольких файлов в архиве. Файлы, помещенные в архив,
проще идентифицировать по принадлежности к определенному
времени создания или компьютеру (например, можно присваивать
архиву соответствующее имя). Архив проще передавать целиком
в другие системы (передается единственный файл архива), а
иногда архив оказывается быстрее сжать по сравнению с
компрессией разрозненных файлов.
В ОСРВ Neutrino для архива
можно использовать несколько форматов, включая pax и tar. В ОСРВ Neutrino
поддерживается также формат 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. Эти утилиты берут все
передаваемые им файлы и помещают их в один большой
непрерывный файл. Эти же утилиты могут использоваться для
извлечения отдельных файлов из архива.
Примечание. В
файловой системе не поддерживаются архивы (или отдельные
файлы) размером больше 2 Гбайт.
Когда в качестве архиватора
используется утилита pax (режим pax -w), то создаваемые ей архивы
имеют формат TAR. Какую из команд использовать, определяется
тем синтаксисом командной строки, который вам больше
нравится, поскольку создаваемые архивы будут идентичны.
Утилита pax была создана как часть
стандарта POSIX для обеспечения совместимого механизма для
обмена архивами (pax расшифровывается как
Portable Archive eXchange — обмен переносимыми
архивами). Это позволило избежать конфликтов, возникающих
при работе с различными вариантами программы tar, при которых наблюдалось их
разное поведение.
Далее приведены возможные
варианты структуры архива.
pax
-wf my_archive.tar code.с
В этой команде
берется файл code.с, и из него создается архив
(который иногда
называется "tarball" — "смоляной шарик") с именем my_archive.tar. Ключ -wf требует от команды pax записи файла.
pax
-wf my_archive.tar code.с header.h readme.txt
Программа pax создает из всех них один
архив с именем my_archive.tar.
pax
-wf my_archive.tar workspace
По этой команде создается архив с именем my_archive.tar, куда включается все
содержимое каталога workspace.
pax
-wf my_archive.tar /fs/hd0-t79
По команде все
содержимое раздела t79 архивируется в один очень большой
архив с именем my_archive.tar.
Архив можно хранить на своей
локальной системе, но мы рекомендуем обязательно делать
копию на удаленной системе. Если вдруг произойдет физическое
разрушение локальной системы или окажется поврежденным
жесткий диск, то локальный архив будет потерян.
Извлечение файлов из архива
Для извлечения файлов из
архива можно использовать утилиту pax с ключом -r:
pax -rf my_archive.tar
Или можно
использовать команду tar с ключами -x (от англ. extract — извлечь), -v (от англ. verbose — вывод информации о
ходе работы программы) и -f (от англ. filename — имя файла):
tar
-xvf my_archive.tar
Примечание. Чтобы просмотреть
содержимое архива без извлечения из него файлов, можно в
программе tar вместо ключа -x использовать ключ -t.
Компрессия архива
Архив может иметь достаточно
большой размер, особенно если архивируется целый раздел
диска. Для уменьшения занимаемого архивом места можно сжать
архив, хотя для компрессии при сохранении и для декомпрессии
при извлечении файлов требуется некоторое время.
В ОСРВ Neutrino имеются
следующие программы компрессии/декомпрессии:
-
bzip2 и bunzip2;
-
freeze и melt;
-
gzip и gunzip.
Обычно лучше
всего использовать программу gzip, потому что ее поддержка
осуществляется во многих операционных системах, тогда как
программа freeze используется, главным
образом, для обеспечения совместимости с системами на базе
ОС QNX 4. Существует также много других программ для
компрессии от сторонних производителей.
Примечание. На утилиту gzip распространяется
общедоступная лицензия Gnu Public License (GPL), которую
нужно принимать во внимание, если вы собираетесь
распространять другим программу gzip в составе разрабатываемого
вами решения для резервного копирования.
Например, для сжатия архива
my_archive.tar с получением результата в
файле my_archive.tar.gz нужно ввести:
gzip
my_archive.tar
Размер сжатого файла будет
гораздо меньше исходного, поэтому его легче хранить. Для
некоторых утилит, включая gzip, имеется множество ключей,
которые позволяют управлять процессом и качеством
компрессии. Обычно, чем лучше сжимается файл, тем больше
времени требуется на эту процедуру.
Примечание. По умолчанию сжатый файл
получает расширение .tar.gz, но может встретиться и
расширение .tgz. Для задания этого суффикса
нужно при вызове программы gzip использовать ключ -S.
18.3.4. Декомпрессия архива
Для декомпрессии архива
используется соответствующая утилита. В случае файлов с
расширениями .gz или .tgz необходимо использовать
программу gunzip таким образом:
gunzip
my_archive.tar.gz
или
gunzip my_archive.tgz
В обоих случаях происходит
декомпрессия файла в результирующий файл my_archive.tar. Для извлечения файла из
архива без предварительной декомпрессии можно также запустить
программу tar с ключом -z:
tar
-xzf my_archive.tgz
Выбор средства для хранения
CD-диски
Для резервного копирования
на CD-диск можно использовать входящую в состав ОСРВ
Neutrino программу записи на CD-диск. Можно также сначала
создать образ в виде файла в формате ISO, а затем
скопировать файл в систему, где есть устройство записи на
CD-диск из ISO-образа.
Для записи на CD-диск в ОСРВ
Neutrino можно использовать программу cdrecord. Для получения этой
программы нужно зайти на сайт http://www.qnx.com/, войти в систему по своей
учетной записи myQNX и перейти на страницу
центра загрузки программного обеспечения (Download Center) в раздел программного
обеспечения сторонних производителей (3rd-Party Software).
В любом случае перед записью
данных на CD-диск необходимо создать ISO-образ этих данных.
Это делается с помощью утилиты mkisofs, входящей в один комплект с
программой cdrecord.
Перед созданием ISO-образа
файлы нужно упорядочить в виде структуры каталогов так, как
вы хотите видеть эти файлы на CD-диске. После этого утилита
вызывается следующим образом:
mkisofs
-l -f -r -joliet -quiet –V"My Label" -о my_iso_image.iso
По этой команде
создается ISO-образ в виде файла my_iso_image.iso с меткой My Label, использующий формат файла
Joliet, с возможностью записи полных имен файлов длиной до
31 символа (ключ -l), проходом всех
символических связей при генерации файловой системы (ключ -f) и генерацией записи SUSP и
RR с помощью протокола Rock Ridge (ключ -r).
После создания ISO-образа
можно послать этот файл в систему, где есть возможность
записи CD-диска из этого образа с помощью программы cdrecord:
cdrecord
-v speed=2 dev=/dev/cd0 my_iso_image.iso
По этой команде
выполняется запись ISO-образа из файла с именем my_iso_image.iso на CD-диск на двойной
скорости (2) с использованием
записывающего дисковода с именем cd0. Подробнее об этом см.
в документации по программе cdrecord.
Примечание. Список поддерживаемых
CD-дисководов приведен в ознакомительном файле (README), который включен в
комплект исходных текстов программы записи cdrecord.
Загрузочные CD-диски
Используя программу cdrecord и связанные с ней утилиты,
можно также создавать загрузочные CD-диски, выполнив указанную далее
последовательность действий.
-
Создайте загрузочный флоппи-диск, где
вызываются нужные сценарии и где присутствуют все
необходимые для образа бинарные файлы.
-
С помощью утилиты dd создайте образ
флоппи-диска, например:
dd
if=/dev/fd0 of=/floppy.img
mkdir
iso_image
cp -Rс /bin iso_image/bin
cp -Rс /etc iso_image/etc
....
-
Проверьте, чтобы в вашей
системе внутри каталога /usr/share/cdburning находился каталог isocatalog.
-
Создайте ISO-образ с помощью утилиты mkisofs, не забыв задать
каталог с помощью ключа -c:
mkisofs
-l -f -r -joliet -quiet –V"My Label" -b floppy.img \
-с
/usr/share/cdburning/isocatalog -о my_iso_image.iso
Сменные носители
Для создания резервных копий
данных подходят также сменные носители других типов. В ОСРВ
Neutrino поддерживаются устройства типа LS-120,
магнитооптические дисководы, встроенные ZIP-дисководы и
устройства для хранения массивов данных с интерфейсом USB. У
каждого из этих устройств есть свои достоинства и
недостатки. Поэтому принятие окончательного решения по
использованию для резервного копирования конкретного
устройства остается за вами. Инструкции по установке этого
оборудования приведены в разделе 15.
Резервное копирование физических
жестких дисков
Примечание. Приводимые в данном
разделе указания распространяются на процедуры копирования
данных с одного жесткого диска на другой с идентичными
свойствами (размер, модель). Если нужно делать копии с
участием дисков разного размера и модели, обратитесь в
службу технической поддержки для получения утилиты QNX_Drive_Copy.
Идентичные образы жестких
дисков можно делать с помощью простых утилит, входящих в
состав ОСРВ Neutrino. Эта процедура выполняет полное
копирование "сырых данных" (raw copy) с диска.
Если у вас имеются
идентичные жесткие диски (одинаковые производители, размеры,
номер модели), то можно просто присоединить этот диск к
системе. Убедитесь, что вы знаете установки для диска
(например, первичный ведомый диск для интерфейса EIDE).
После присоединения диска
загрузите систему Neutrino. После загрузки должен быть
автоматически обнаружен жесткий диск, и для него будет
создана запись в каталоге /dev. Если в системе имеются
всего два диска, то новая запись появится в виде /dev/hd1. Если же имеется более двух
дисков (дисководов), то, соответственно, вновь установленный
диск может получить имя hd1, hd2 и т. д. В этом случае
для идентификации конкретного диска придется использовать
программу fdisk. Вновь установленный диск
не должен иметь никаких разделов и быть чистым.
Предупреждение.
Перед началом выполнения
последующих действий вы должны быть абсолютно уверены в
правильной идентификации дисков. В противном случае можно
скопировать содержимое пустого диска на диск, содержащий
исходные данные. Затертые таким способом данные восстановить
невозможно.
После идентификации дисков
выполните команду:
ср -V
/dev/hd0 /dev/hd1
где hd0 — исходный жесткий диск
с данными, а hd1 — новый чистый диск, на
который копируются данные.
По этой команде
содержимое первого диска полностью копируется на второй
диск, включая таблицы разделов, начальные загрузчики и
т. д. Чтобы убедиться в идентичности дисков, нужно
просто отключить исходный диск и поставить на его место
диск-копию. После этого перезагрузить систему. Должна
произойти загрузка ОСРВ Neutrino, и все должно выглядеть и
работать, как на исходном диске. Сохраните резервную копию в
безопасном
месте.
Образы типа Ghost
Некоторые пользователи ОСРВ
Neutrino выбирают в качестве резервных копий образы типа
Ghost. Мы не рекомендуем делать это. С таких копий может
неправильно восстанавливаться информация о разделах, что
приведет к неправильной загрузке файловой системы. Если вы
снова запустите на таком диске программу fdisk, то появится сообщение о
некорректной информации, и программа fdisk запишет на диск
неправильные данные.
Резервное копирование на удаленную систему
Создание резервной копии на удаленной
системе является более безопасным способом хранения данных,
чем хранение в локальной системе. Это связано с тем, что
удаленный сервер обычно является более надежной системой.
В зависимости от ситуации,
возможно, имеет смысл приобрести хорошую систему с
оборудованием серверного класса, а затем купить обычные
системы для ведения разработок. Не забывайте регулярно
создавать резервные копии сервера.
Система CVS
ОСРВ Neutrino поставляется с
копией клиентской утилиты CVS (Concurrent Versions System,
система управления версиями). Для использования системы CVS
необходимо иметь CVS-сервер (желательно, чтобы
администрирование сервера осуществлялось вашей компанией). С
помощью системы CVS можно безопасно и удаленно управлять
вашими архивами. Более подобно об этом см. раздел 17.
Удаленные файловые системы
Сохранение второй резервной копии на
удаленной системе часто является простым, но эффективным
способом предотвращения потери данных. Например, если
базовый архив ваших программных кодов хранится в отдельном
каталоге на локальной системе, и вдруг по непредвиденной
причине отказывает жесткий диск, то вы потеряете и
локальную, и резервную копию архива. Размещая же копию на
удаленной файловой системе, вы эффективным образом снижаете
шансы потери данных. Поэтому мы настоятельно рекомендуем
использовать этот метод.
Примечание. Если вы
размещаете файл в файловой системе, не относящейся к типу
Neutrino, то могут быть утеряны существующие права доступа к
файлу. Файлы в среде ОСРВ Neutrino (как и во всех системах
типа UNIX) имеют специальные права доступа (см. раздел
6), которые теряются, если отдельные файлы сохраняются
в файловых системах типа Windows. Если создается архив (см.
разд. "Архивация данных" ранее в этом разделе, то
права доступа к файлам, записанным внутри архива,
сохраняются.
Другие способы создания удаленных
резервных копий
Существуют другие версии
систем для удаленного резервного копирования (похожие на
CVS), которые доступны в ОСРВ Neutrino как продукты
сторонних производителей. Многие из них являются
бесплатными. Попробуйте поискать в Интернете инструменты,
которые подойдут для использования в вашей компании и ее
проектах.
Дисковая структура файловой системы QNX 4
Если вы когда-нибудь сталкивались с
проблемами при работе в файловой системе QNX 4, то вам нужно
представлять, как в этой файловой системе данные сохраняются
на диске. Такое знание поможет распознать и, возможно,
предотвратить повреждение данных, если вы захотите
перестроить файловую систему. В заголовочном файле <sys/fs_qnx4.h> содержатся определения,
касающиеся структуры данных, о чем пойдет речь в данном
разделе.
С полным описанием файловой
системы QNX 4 можно ознакомиться в разделе 11.
Компоненты раздела
Файловая система QNX 4 может
занимать целый диск (например, в случае флоппи-дисков) или
один из разделов жесткого диска. В пределах раздела жесткого
диска в состав файловой системы QNX 4 входят следующие
компоненты (рис. 18.1):
Рис. 18.1. Компоненты
файловой системы QNX 4 в разделе диска
Указанные
структуры создаются при инициализации файловой системы
утилитой dinit.
Блок загрузчика
Первый физический блок раздела диска
является блоком загрузчика. В нем содержится начальный код,
который загружается программой BIOS и выполняет дальнейшую
загрузку ОС с данного раздела. Если на диске отсутствуют
разделы (например, это флоппи-диск), то блоком загрузчика
является первый физический блок диска.
Корневой блок
Корневым является второй блок раздела
системы QNX 4. Его структура соответствует структуре
стандартного каталога, и в ней содержится поле метки и
информация по индексным дескрипторам (inode) для таких
специальных файлов, как:
- корневой каталог файловой системы (обычно
/);
-
/.inodes;
-
/.boot;
-
/.altboot;
В файлах /.boot и /.altboot содержатся образы
операционной системы, которые могут быть загружены с помощью
начального загрузчика.
Обычно для QNX загружается
образ, хранящийся в файле /.boot. Однако
если имеется непустой файл
/.altboot, то можно загрузить
хранящийся в этом файле образ. Подробнее об этом см. раздел 8.
Блоки битовой карты
За корневым блоком последовательно
располагается несколько блоков. Эти битовые блоки формируют
битовую карту (матрицу) раздела системы QNX 4. Каждому
физическому блоку раздела соответствует один бит карты.
Таким образом, один блок битовой карты используется для
каждых 4096 физических блоков диска (это соответствует
дисковому пространству 2 Мбайт).
Если значение бита равно
нулю, то соответствующий блок диска не используется.
Неиспользуемые биты в конце последнего блока битовой карты
(для которых нет соответствующих физических блоков на диске)
установлены во включенное состояние.
Назначение битов происходит,
начиная с самого младшего бита нулевого байта первого блока
битовой карты — это в системе QNX 4 соответствует блоку
с номером 1.
Корневой каталог
Корневой каталог
располагается после блоков битовой карты. Корневой
каталог — это обычный каталог (см.
подразд. "Каталоги" далее в этом разделе) с двумя исключениями:
-
каталоги с именами "точка" (.) и "две точки" (..) ссылаются на одну и ту
же индексную информацию, а именно на индексный узел
корневого каталога в корневом блоке;
-
в корневом каталоге всегда имеются записи для
файлов /.bitmap, /.inodes, /.boot и /.altboot; эти записи
организованы таким образом, чтобы программы, которые
передают информацию файловой системы, могли бы работать
с записями как с нормальными файлами.
Корневой
каталог изначально создается с помощью утилиты dinit размером в 4 блока, что
обеспечивает достаточно места для записей на 32 каталога.
В корневом каталоге (/) имеются записи для
нескольких специальных файлов (рис. 18.2,
табл. 18.3), которые всегда присутствуют в файловой
системе QNX 4. Эти файлы также создаются с помощью
утилиты dinit во время первой
инициализации файловой системы.
Таблица
18.3
|
Файл
|
Описание
|
/.
|
Ссылка на
корневой каталог /
|
/..
|
Ссылка на
корневой каталог /
|
/.bitmap
|
Файл с атрибутом "только чтение", в
котором хранится битовая карта для всех блоков
диска. Каждый бит указывает, используется ли
соответствующий блок
|
/.inodes
|
Обычный файл,
состоящий, по крайней мере, из одного блока
для флоппи- или RAM-диска и из 16 блоков для
других дисков. В файле /.inodes содержится
набор записей индексных дескрипторов (inode). Первая
запись является зарезервированной, это
сигнатурная/информационная область. Первые
байты файла .inode содержат
текст IamTHE.inodeFILE
|
/.longfilenames
|
Дополнительный файл, в котором
сохраняется информация о файлах, чьи имена имеют
длину более 48 символов. См.
подразд. "Файловая система QNX 4" раздела
11
|
/.boot
|
Это файл образа ОС, который будет
загружен в память во время процесса стандартной
загрузки. Если файл загрузки отсутствует, то этот
файл будет иметь нулевую длину
|
/.altboot
|
Это файл образа ОС, который будет
загружен в память во время процесса альтернативной
загрузки. Если файл загрузки отсутствует, то этот
файл будет иметь нулевую длину
|

Рис. 18.2. Содержимое
корневого каталога /
Каталоги
Каталог представляет собой
файл, имеющий в файловой системе специальное назначение. В
нем содержится коллекция элементов каталога
(рис. 18.3).
Биты в поле i_status указывают тип элемента
каталога (табл. 18.4).
Таблица
18.4
|
QNX4FS_FILE_LINK
|
QNX4FS_FILE_USED
|
Тип
элемента
|
0
|
0
|
Неиспользуемый элемент каталога
|
0
|
1
|
Обычный, используемый элемент
каталога
|
1
|
0
|
Ссылка на
соответствующую запись в файле /.inodes (которую
следует использовать)
|
1
|
1
|
Некорректный тип элемента
|
Первый элемент каталога всегда используется для ссылки с
именем . ("точка") и включает
сигнатуру каталога ("IQNX"). Шестнадцатеричный эквивалент
символа равен 0x03. Этот элемент ссылается на
сам каталог, указывая на элемент внутри родительского
каталога, который описывает данный каталог.
Рис. 18.3. Элемент
каталога
Второй элемент
каталога всегда имеет запись о связи с именем .. ("две точки"). Этот элемент
ссылается на родительский каталог, указывая на первый блок
родительского каталога.
Каждый элемент каталога либо
определяет файл, либо указывает на запись внутри файла /.inodes. Индексные записи inode используются в случае,
когда имя файла оказывается длиннее 16 символов или когда
одно или более имен связаны в один файл. Если включена
поддержка длинных имен, то в корневом каталоге файловой
системы присутствует также файл .longfilenames, в котором сохраняется
информация о файлах, чьи имена имеют длину более
48 символов.
Первый экстент файла (если
он имеется) описывается в элементе каталога или в записи
индексного дескриптора. Дополнительные экстенты файла
требуют использования связанного списка блоков экстентов,
начало которого находится также в элементе каталога в записи
индексного дескриптора. В каждом блоке экстентов может
содержаться информация, но не более чем 60 экстентов.
Ссылки
Файлы с длиной имени более
16 символов и файлы, которые являются ссылками (link) на другие файлы,
имеют специальную форму записи в элементе каталога. Для этих
записей в поле i_status устанавливается бит
QNX4FS_FILE_LINK (0x08).
Для таких файлов часть
элемента каталога перемещается в файл /.inodes (рис. 18.4).

Рис 18.4. Запись индексного дескриптора
Если имя файла оказывается длиннее 48 символов, то:
Блоки экстентов
Блоки экстентов используются для любого файла,
у которого есть больше чем один экстент. Поле i_xblk в элементе каталога
указывает на один из таких блоков экстентов, в котором, в
свою очередь, определяется, где могут быть найдены второй и
последующие экстенты.
Блок экстентов занимает в
точности один сектор диска размером 512 байтов и имеет
формат, представленный на рис. 18.5.
Рис. 18.5. Блок
экстентов
Каждый блок экстентов
содержит:
-
указатели на предыдущий/следующий блок;
-
счетчик экстентов;
-
счетчик всех блоков во всех экстентах,
определяемых данным блоком экстентов;
-
указатели и счетчики для каждого экстента;
-
сигнатуру (IamXblk).
В первом блоке
экстентов содержится также избыточный указатель на первый
экстент файла (он присутствует также в элементе каталога или
в записи индексного дескриптора). Это позволяет восстановить
все данные в файле, обнаружив только один этот блок.
Файлы
Файлы или экстенты файлов
представляют собой группы блоков, указанные в элементах
каталога или в записях inode. Для них в файловой системе QNX
4 нет какой-либо специальной структуры.
Большинство файлов в ОСРВ
Neutrino имеют структуру, представленную на рис. 18.6.
Рис. 18.6. Файловая
структура в QNX 4
Утилиты для обслуживания
файлов
Если случаются какие-либо
аварийные отказы, то для восстановления системы и файлов
можно использовать следующие утилиты:
-
fdisk;
-
dinit;
-
chkfsys;
-
dcheck;
-
zap;
-
spatch.
В этом разделе
дается краткое описание перечисленных утилит. Более подробно
о них см. в руководстве "Описание программы. Часть 1.
Справочник по утилитам" КПДА.10964-01 13 01.
fdisk
С помощью утилиты fdisk можно создавать и
обслуживать блок раздела на жестком диске. Этот блок
совместим с другими операционными системами, и работа с ним
может осуществляться с помощью программ fdisk от других ОС (однако
преимуществом нашей версии программы является то, что она
распознает специфическую для QNX информацию). Если загрузчик
раздела отсутствует или поврежден, то утилита fdisk может создать его.
Примечание. Мы
рекомендуем сохранять в виде печатной копии информацию о
таблице разделов каждого из дисков в сети.
dinit
С помощью утилиты dinit создаются следующие
компоненты файловой системы QNX 4:
-
блок загрузчика;
-
корневой блок;
-
блоки битовой карты;
-
корневой каталог;
-
файл /.inodes;
-
файл /.longfilenames.
Если первые
несколько блоков вашей файловой системы оказываются
поврежденными, то можно попытаться их восстановить с помощью
сначала утилиты dinit с ключом -r, а затем утилиты chkfsys. Более подробно об утилите
dinit см. в руководстве "Описание
программы. Часть 1. Справочник по утилитам" КПДА.10964-01 13
01.
chkfsys
Утилита chkfsys является главным
инструментом, необходимым для обслуживания файловой системы.
Примечание. Утилита chkfsys запрашивается при
повреждении файловой системы устойчивой к сбоям питания; для
этого типа файловой системы необходимо использовать chkqnx6fs.
С ее помощью можно выполнить
следующее:
-
проверить структуру каталогов для всего раздела
диска, получить сообщения о наличии противоречивых
данных и, если возможно, устранить обнаруженные
противоречия;
-
проверить распределение блоков для всего диска;
-
записать новый файл /.bitmap (при подтверждении с
вашей стороны).
При запуске
утилиты 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.
Примечание. Перед тем как использовать
утилиту spatch, убедитесь в том, что вы
понимаете тонкости структуры файловой системы QNX 4.
Обратитесь еще раз к подразд. "Дисковая структура файловой
системы QNX 4" ранее в этом разделе.
Восстановление дисков и файлов
Использование
утилиты
chkfsys
Утилита chkfsys является вашим основным
инструментом для проверки и восстановления потенциально
поврежденной файловой системы. С ее помощью можно
идентифицировать и откорректировать массу небольших проблем,
а также проверить целостность всей дисковой системы.
Обычно для нормальной работы
утилиты chkfsys необходимо, чтобы файловая
система была в неиспользуемом состоянии и на устройстве не
были открыты никакие файлы. Нужно закрыть все процессы,
которые открывают или могут открыть файлы во время работы chkfsys.
Для запуска утилиты chkfsys в точке монтирования
введите команду:
chkfsys точка_монтирования
Утилита
выполнит сканирование всего раздела диска, начиная с
корневой области и далее вниз по структуре каталогов,
выполняя построение внутренней копии битовой карты и
проверяя целостность всех найденных в процессе сканирования
файлов и каталогов.
После окончания обработки
всех файлов производится сравнение внутренней копии битовой
карты с содержимым существующей битовой карты на диске. Если
данные согласуются, работа программы chkfsys успешно завершается. Если
найдены несоответствия, то после получения согласия со
стороны пользователя произойдет перезапись битовой карты в
соответствии с найденными и верифицированными файлами.
В дополнение к верификации
выделения блоков (битовой карты) при работе утилиты chkfsys делается попытка исправить
любые возникающие в процессе сканирования проблемы.
Например, с помощью утилиты chkfsys можно:
-
снять
метку занятости с файлов, для которых в момент
возникновения сбоя производилась операция записи;
-
откорректировать размер файла в элементе
каталога, чтобы он соответствовал реальному значению.
Когда
нужно запускать утилиту chkfsys
Весьма полезно запускать
утилиту chkfsys при проведении регулярно
выполняемых процедур технического обслуживания — это
позволит убедиться в том, что данные на диске не повреждены.
Например, хорошо бы запускать утилиту chkfsys на сетевых серверах при
каждой их загрузке. Автоматическая проверка файловой системы
в момент загрузки гарантирует, что во время сканирования
будет сделана попытка устранить все обнаруженные проблемы.
Для автоматизации этого процесса добавьте chkfsys в файл re.local на сервере (см. раздел 8).
Утилиту chkfsys особенно важно запускать
после системного сбоя, аварийного отключения источника
питания, после неожиданного перезапуска системы. Это
позволит проверить, не были ли повреждены какие-нибудь
файлы. Утилита проверяет на диске состояние флага
"целостности" файловой системы ("clean" flag), чтобы
определить, находится ли в настоящее время система в
целостном, непротиворечивом состоянии.
Флаг "целостности" хранится
на диске, его установка или сброс производится системой.
Сброс этого флага происходит в момент окончания монтирования
файловой системы, а установка — при размонтировании
файловой системы. При установленном флаге "целостности"
подразумевается, что файловая система не повреждена. Если
при запуске утилиты chkfsys флаг "целостности" сброшен,
то делается попытка устранить проблему.
Для утилиты chkfsys можно использовать ключ -u, при котором установленный
флаг "целостности" игнорируется, и утилита запускается
безусловно. Такая необходимость может возникнуть, когда:
-
при работе утилиты dcheck обнаруживаются
поврежденные секторы;
-
были намеренно удалены или затерты (zapped)
некоторые файлы;
-
нужно принудительно запустить общую проверку
диска.
Использование
утилиты
chkfsys на работающей системе
Для проведения всесторонней верификации диска с помощью
утилиты chkfsys обычно требуется
эксклюзивное использование файловой системы.
Предупреждение.
Запуск утилиты chkfsys на работающей системе
сопряжен с определенным риском, потому что со стороны
утилиты и со стороны файловой системы может производиться
чтение и, возможно, даже запись одного и того же блока
диска.
Если вы все же запустите
утилиту chkfsys при работающей файловой
системе и утилита выполнит запись чего-нибудь, то файловой
системе будет отправлено сообщение о необходимости
приостановки ее работы. В ответ на это сообщение файловая
система перемонтирует себя и обратится к диску для
повторного считывания всех данных. В этом случае все
открытые файлы будут помечены как устаревшие, при попытке
чтения или записи будет выдаваться ошибка типа EIO, пока
файлы не будут закрыты и не будут открыты снова. Подобная
ситуация может относиться, например, к файлам типа системных
журналов.
Статические изменения в
файлах и каталогах, которые в текущий момент не открыты
файловой системой, вероятно, не приведут к таким
проблемам.
Если запущено приложение,
для которого невозможна приостановка работы, или невозможно
запустить утилиту chkfsys, потому что файлы были
открыты для обновления, то попробуйте при запуске утилиты chkfsys использовать ключ -f:
chkfsys -f /dev/hd0t79
При таком
варианте запуска для утилиты устанавливается специальный
режим "только чтение", при котором возможна проверка всей
файловой системы с открытыми файлами (без проведения
каких-либо корректирующих действий). Результаты такой
проверки могут дать подсказку о том, что делать дальше.
Восстановление при наличии
поврежденного блока в середине файла
На жестких дисках со
временем появляются поврежденные секторы. В большинстве
случаев удается восстановить большинство данных или даже все
данные файла, содержащего поврежденные секторы.
Некоторые поврежденные
секторы возникают из-за отказов или сбоев питания или из-за
плохой среды носителя жесткого диска. В этих случаях иногда
простые операции чтения и перезаписи "восстанавливают"
сектор на некоторое время. За это время можно успеть
скопировать весь файл в другое место, пока сектор не откажет
снова. От такой процедуры нет никакого вреда, и ее часто
стоит попробовать.
Для проверки блоков внутри
файла используется утилита spatch. Когда дело доходит до
поврежденного сектора, утилита spatch должна выдавать сообщение
об ошибке, но при этом из сектора может быть фактически
считана порция "хороших" байтов. Запись назад того же самого
сектора часто заканчивается успешно.
В то же самое время при
перезаписи восстанавливается правильное значение CRC (Cyclic
Redundancy Check, контроль при помощи циклического
избыточного кода), что может снова сделать блок
неповрежденным (хотя, возможно, и с ошибочными данными).
После этого можно
скопировать файл в другое место и применить к ранее
поврежденному файлу утилиту zap. Для завершения процедуры
ненадежный блок помечается как поврежденный (путем
добавления его в файл /.bad_blks), после чего запускается
утилита chkfsys для восстановления
остальных неповрежденных блоков.
Если такая процедура не
поможет, то можно воспользоваться утилитой spatch для копирования в другой
файл как можно большего числа блоков поврежденного файла.
После этого нужно применить к поврежденному файлу утилиту zap, а затем запустить утилиту
chkfsys.
Что делать, если система больше не
загружается?
Если ранее работавшая
система на основе ОСРВ QNX Neutrino неожиданно перестает
работать и не загружается, то это может быть следствием
следующего:
-
произошел отказ оборудования или были
повреждены данные на жестком диске;
-
кто-то либо изменил/перезаписал файл загрузки,
либо изменил системный файл инициализации — это два
наиболее вероятных сценария.
Далее приводятся шаги, которые
помогут вам идентифицировать проблему. Если это возможно,
предлагаются корректирующие действия.
-
Если имеется сеть, через которую можно
загрузиться, то попробуйте это сделать. После того как
компьютер загрузится, войдите в систему с учетной
записью root.
-
Если сеть отсутствует, загрузитесь с
инсталляционного компакт-диска. В этом случае файловая
система уже будет запущена, и вы будете подключены к
системе под учетной записью root.
devb-aha4 ключи &
Если используется другой тип адаптера, введите его имя,
например:
devb-eide ключи qnx4 ключи &
В этом случае будет создан блочно-ориентированный файл с
именем /dev/hd0, который представляет весь
жесткий диск.
Запуск этой
утилиты сразу же даст вам полезную информацию о состоянии
жесткого диска. Утилита fdisk может выдать информацию,
касающуюся одной из нескольких типов проблем
(табл. 18.5).
Таблица
18.5
|
Проблема
|
Вероятная
причина
|
Рекомендации
по устранению
|
Ошибка при чтении блока 1
|
Произошел отказ контроллера диска или
самого диска
|
Если жесткий диск исправен, то замена
контроллера, возможно, позволит продолжить работу
с тем же диском. В противном случае придется
заменить жесткий диск, переустановить ОСРВ
Neutrino и восстановить файлы из резервной копии
|
Неправильные параметры диска
|
Возможно, потеряна информация о
данном жестком диске. Одна из вероятных
причин — разряд батареи питания CMOS-памяти
|
Обычно перезапуск процедуры настройки
оборудования (или (для PS/2) программируемой
процедуры выбора настройки) дает положительный
результат. Конечно же, замена батареи даст более
надежное решение проблемы
|
Неверная информация о разделах
|
Если утилита fdisk показывает
правильный размер диска, но неверно
отображается информация о разделах, это
значит, что почему-то были разрушены данные в
блоке 1 физического диска
|
Используйте
утилиту fdisk для
восстановления правильной информации о
разделах. Очень полезно записать заранее или
распечатать правильные данные
о разделах в блоке 1 жесткого
диска. Это значительно облегчит задачу
восстановления информации при реализации
данного шага
|
- Произведите монтирование
раздела и файловой системы.
К этому моменту было установлено, что оборудование работает (по
крайней мере, это касается блока 1) и что для ОСРВ Neutrino
определено правильное разделение на разделы. Теперь нужно создать
блочно-ориентированный файл для самого раздела QNX 4 и смонтировать
его в качестве файловой системы QNX 4:
mount
-e /dev/hd0
mount /dev/hd0t79 /hd
После этого
будет создан том с именем /dev/hd0t79. В зависимости от состояния
раздела QNX 4 монтирование может быть успешным или
неудачным. Если информация о разделе правильна, то проблем
не будет. Поскольку корневой каталог (/) уже существует (на
компакт-диске или на удаленном диске сети), то мы
смонтировали раздел локального жесткого диска как файловую
систему с именем /hd.
Теперь основная задача
состоит в запуске на диске утилиты chkfsys для проверки файловой
системы, а возможно, и устранения ее неисправностей.
Примечание. Если
загрузка происходила с компакт-диска, и не ожидается, что
есть какие-либо неисправности в файловой системе на жестком
диске (например, система не могла загрузиться из-за простой
ошибки в загрузочном файле или в системном файле
инициализации), то можно просмотреть символическую связь с
разделом вашего жесткого диска в префиксном дереве в памяти
администратора процессов:
ln -sP
/hd /
Если вы запустили эту команду,
то остальную часть текста в этом разделе можно пропустить.
Если
утилита mount не работает
Если не удается выполнить
команду монтирования, то, скорее всего, поврежден раздел QNX 4
(поскольку драйвер откажется монтировать нечто, что
рассматривается как некорректная файловая система).
В этом случае можно
воспользоваться утилитой dinit, чтобы восстановить на диске
достаточное количество хороших данных, с которыми сможет
работать драйвер:
dinit
-hr /dev/hd0t79
Использование ключа -r является указанием на
перезапись следующей информации:
Теперь нужно
попробовать снова ввести команду mount и попытаться создать для
файловой системы QNX 4 точку монтирования с именем /hd.
После успешного монтирования
необходимо перестроить битовую карту с помощью утилиты
chkfsys, даже для хорошего раздела
диска.
Хотя бы часть файловой
системы QNX 4 теперь должна быть доступной. Можно запустить
утилиту chkfsys, для того чтобы проверить
файловую систему и восстановить максимальный объем данных.
Если жесткий диск
смонтирован как /hd (например, загрузка
производилась с компакт-диска), то введите команду:
путь_на_CD/chkfsys
/hd
Если жесткий диск смонтирован
как / (например, при загрузке по
сети), введите команду:
сетевой_путь/chkfsys
/
В любом случае выполните
следующее:
-
запустите (если это возможно) программу chkfsys из любого другого
места, кроме файловой системы, которую вы пытаетесь
восстановить;
-
обращайте внимание на появляющиеся при работе
программы сообщения и дайте программе возможность
исправить максимальное число неполадок.
Дальнейшие
действия зависят от результатов работы программы chkfsys.
Если диск не восстанавливается
Если диск окажется
совершенно не восстанавливаемым, можно попробовать
использовать утилиту spatch (см. ранее) для восстановления
отдельных файлов и каталогов. В некоторых случаях можно
попробовать повторно инсталлировать ОСРВ Neutrino и
восстановить диск из резервной копии.
Если значительная часть
файловой системы безвозвратно потеряна или потеряны важные
файлы, то восстановление из резервной копии будет наилучшим
вариантом.
Если файловая система не повреждена
Если файловая система не
повреждена, но компьютер по-прежнему отказывается
загружаться с жесткого диска, то, вероятно, повреждения
следует искать:
Для перезаписи загрузчика
раздела можно воспользоваться утилитой fdisk:
fdisk
/dev/hd0 loader
Для перезаписи загрузчика
системы QNX можно воспользоваться утилитой dinit:
dinit
-b /dev/hd0t79
Теперь ваша система должна
успешно загружаться.