Dump+restore

Материал из OpenWiki
Перейти к: навигация, поиск


Алгоритм работы 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 блоков.

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

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