Dump+restore — различия между версиями

Материал из OpenWiki
Перейти к: навигация, поиск
м (1 версия)
 
Строка 1: Строка 1:
 
  
  
 
= Алгоритм работы dump =
 
= Алгоритм работы dump =
Поиск и чтение суперблока. Определение размеров битовых карт (map) для хранени списка inode. Выделяется память для хранения трёх битовых карт: '''usedinomap''', '''dumpdirmap''', '''dumpinomap'''.
+
 
Далее идёт четыре фазы дампа:
+
Поиск и чтение суперблока. Определение размеров битовых карт (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 блоков.

Сканирование каталогов, поиск файлов которые нужно дампить

Формат файла дампа