Dump+restore — различия между версиями
Материал из OpenWiki
Mc (обсуждение | вклад) м (1 версия) |
Mc (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | |||
= Алгоритм работы dump = | = Алгоритм работы dump = | ||
− | + | ||
− | + | Поиск и чтение суперблока. Определение размеров битовых карт (map) для хранени списка inode. Выделяется память для хранения трёх битовых карт: '''usedinomap''', '''dumpdirmap''', '''dumpinomap'''. | |
+ | Далее идёт четыре фазы дампа: | ||
+ | |||
== Просматривается список inode файловой системы для нахождения занятых inode == | == Просматривается список inode файловой системы для нахождения занятых inode == | ||
* Определяется количество групп цилиндров ('''fs_ncg''' в суперблоке), читаются блоки групп цилиндров (размер блока '''fs_cgsize''' из суперблока). ''Общее количество inode определяется, как '''fs_ncg''' * '''fs_ipg'''.'' | * Определяется количество групп цилиндров ('''fs_ncg''' в суперблоке), читаются блоки групп цилиндров (размер блока '''fs_cgsize''' из суперблока). ''Общее количество inode определяется, как '''fs_ncg''' * '''fs_ipg'''.'' |
Текущая версия на 14:45, 14 октября 2008
Содержание
Алгоритм работы dump
Поиск и чтение суперблока. Определение размеров битовых карт (map) для хранени списка inode. Выделяется память для хранения трёх битовых карт: usedinomap, dumpdirmap, dumpinomap. Далее идёт четыре фазы дампа:
Просматривается список inode файловой системы для нахождения занятых inode
- Определяется количество групп цилиндров (fs_ncg в суперблоке), читаются блоки групп цилиндров (размер блока fs_cgsize из суперблока). Общее количество inode определяется, как fs_ncg * fs_ipg.
- Для UFS2 из блока группы цлиндров определяется количество используемых inode (cg_initediblk в структуре cg). Для UFS1 это значение берётся из суперблока.
- Если файловая система смонтирована с включёнными мягкими обновлениями soft updates ( в fs_flags установлен FS_DOSOFTDEP), то выполняется просмотр карты занятых inode в блоке группы цилиндров (т.е. мы проверяем какие inode реально используются, вместо использования cg_initediblk).
- Выполняется проход по dinode и заполняется битовая карта usedinomap. Если dinode указывает на каталог, то соответсвующий бит устанавливается и в dumpdirmap. Если у inode не установлен флаг UF_NODUMP, то этот inode так же заносится в карту dumpinomap. Дополнительно к этому вычисляется размер необходимого пространства на ленте tapesize.
- Размер определяется из следующх соображений. В структуре dinode берутся поля di_size - размер файла в байтах; di_blocks - фактический размер данных в блоках. Определяется сколько блоков ленточного накопителя TP_BSIZE необходимо для сохранения данных этого dinode. Может оказаться так, что размер файла di_size будет больше чем фактически занимаемые размер блоков di_blocks. Тогда на ленте используется только необходимый размер. Если размер di_size больше чем объём direct блоков (укзатели на которые находятся в самом dinode), то к blkest добавляется необходимое число TP_NINDIR indirect блоков.