Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#15| Dragon God
Demon's Souls |#14| Flamelurker
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Сэйдж Рас Весь текст 822.4 Kb

Приемы профессиональной работы в Unix

Предыдущая страница Следующая страница
1 ... 54 55 56 57 58 59 60  61 62 63 64 65 66 67 ... 71
перблоке непосредственно с устройства.

     Входной информацией  для  программы mntlook являются имена файлов
устройств.  В командной строке нельзя указывать никакие  опции.  Имена
устройств  могут  быть как блочными,  так и символьными.  Для операции
чтения это не имеет никакого значения, если только у вас имеются права
чтения.  Затем  программа  читает  второй блок и проверяет "магическое
число", определяющее суперблок. Суперблок - это просто структура языка
Си,  которая предопределена системой и хранится в файле filsys.h,  что
указано  в  нашей  программе  оператором  #include.  Магическое  число
представляет собой длинное целое,  имеющее заранее определенное значе-
ние.  Если элемент структуры,  которая прочитана с диска, содержит это
число, то считается, что остальная часть структуры является корректны-
ми данными.  Для каждой файловой системы имеется только одна структура
суперблока.

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

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

     ПРИМЕРЫ

1.  $ mntlook /dev/hd13

     Поиск суперблока  на устройстве с именем hd13.  Это имя указывает
устройство 1, третий раздел. Для просмотра разделов в среде XENIX нуж-
но  запустить программу fdisk.  Для System V нужно воспользоваться ко-
мандой iv.

2.  $ mntlook /dev/fd0*

     Поиск файловых систем на гибких дисках с любой плотностью записи,
находящихся в устройстве 0. Это снова пример для системы XENIX.

3.  $ for DEV in /dev/*[fh]d*
    > do
    >        echo "checking device: $DEV"
    >        mntlook $DEV
    > done

     Данный цикл  выполняется  по  всем  именам  устройств для гибих и
жестких дисков по очереди. Каждое имя выводится на экран. Затем прове-
ряется, содержит ли данное устройство файловую систему.

     ПОЯСНЕНИЯ

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

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

     Строка 15  определяет структуру суперблока.  Он имеет тип filesys
(см. включаемый файл sys/types.h). На моей машине суперблок имеет раз-
мер 1024 байта. Если вы не знаете точно размер буфера у вас, то вы мо-
жете проверить его, вставив в программу следующий оператор:

printf ("the size is %d",sizeof(sb))

     Строка 16 описывает рабочую переменную d и дескриптор файла  dev.
Строка 17 объявляет буфер размером BSIZE.

     Строки 19-59 - это один большой цикл for.  Этот цикл представляет
собой всю остальную  часть  программы.  Он  выполняется  столько  раз,
сколько  аргументов указано в командной строке.  Счетчик цикла начина-
ется с 1,  поскольку первым аргументом argv[0] является имя команды. В
качестве  аргументов должны быть указаны имена файлов,  поэтому данный
цикл использует каждое имя по очереди.

     В строках 21-26 проверяется,  не начинается ли текущий рассматри-
ваемый  нами  аргумент  со  знака  '-'.  Если  да,  то это опция,  что
представляет собой ошибку,  поэтому выводится сообщение  об  ошибке  и
оператор continue вызывает выполнение следующей итерации цикла.  Таким
образом, данная программа отвергает опции, но работает при обнаружении
имен файлов.

     Считая, что  имя файла было найдено,  строки 27-32 открывают файл
устройства с этим именем только для чтения. Если данный вызов open не-
удачен, мы посылаем сообщение в буфер вместе с именем, указанным в ко-
мандной строке.  Этот  буфер  передается  программе  обработки  ошибок
(системной), которая использует наше сообщение как первую часть своего
сообщения об ошибке.  Она выводит системное сообщение, которое опреде-
ляет данную ошибку. По оператору continue начинается выполнение следу-
ющей итерации цикла for.

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

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

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

     В строках 53-54 мы имеем подобие кодированной структуры: оператор
printf использует структуру типа if-then-else для указания строки, ко-
торую нужно выводить.  После того как выведена первая строка, выполня-
ется проверка и если она прошла успешно,  то выводится  значение  512.
Если в результате проверки получено значение "ложь",  выводится значе-
ние 1024.  Этот метод описан в книге B.W.Kernighan, D.M.Ritchie "The C
Programming Language" (Prentice-Hall, 1978).

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

     РАЗМЕРНЫЕ ПАРАМЕТРЫ

     Теперь, когда мы рассмотрели взаимоотношения между устройствами и
файловыми системами  и  некоторые  параметры,  связанные  с  форматами
дисков,  давайте  обратимся  к гайкам и болтикам этих устройств.  Хотя
основная часть этой информации может показаться экзотичной,  она может
оказаться важной при определенных обстоятельствах. Например, для уста-
новки системы UNIX на новую машину вам нужно разбить диск на  сегменты
и понимать, каким образом UNIX фактически располагается на диске. Если
вы создаете программы,  которые выполняют какую-либо операцию  низкого
уровня с диском,  вам,  очевидно, необходимо понимать, что вы делаете.
Администраторам,  поскольку они должны добавлять  новые  устройства  в
систему,  необходимо уметь определять количество файловых систем (т.е.
сколько можно создать разделов на диске),  их размеры и  знать,  каким
образом  установить  файловые  системы  в эти разделы.  Администраторы
должны также уметь писать или модифицировать драйверы устройств. Нако-
нец,  при работе с дисками возникают проблемы, такие как плохие блоки,
которые необходимо изолировать и с которыми приходится иметь дело.

     РАЗМЕРЫ БЛОКОВ

     System V  является  последним  достижением ветви фирмы AT&T в фа-
мильном дереве UNIX.  Это означает,  что System V  содержит  последние
правки,  внесенные  в исходную систему UNIX.  Эти правки предназначены
для того,  чтобы сделать UNIX жизнеспособным  и  стойким  коммерческим
продуктом. Для повышения устойчивости были внесены изменения, касающи-
еся работы с файлами и размеров их блоков.

     Обычно обмен данными с дисками осуществляется блоками по 512 бай-
тов. Дисковая аппаратура имеет дело именно с таким размером. Для учета
этого факта UNIX первоначально использовал  512-байтные  блоки  внутри
файловой системы, что, возможно, облегчало написание программ и созда-
вало впечатление,  что так и нужно.  Однако нельзя отрицать,  что  при
этом UNIX может работать медленно!

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

     Для лучшего понимания проблемы размеров блоков, в табл. 7-3 пока-
зано,  какие утилиты какой размер блока используют. Эта информация по-
лучена  в  основном  из  System  V на машине VAX,  из другого варианта
System V и из XENIX.  Эти значения могут отличаться на разных машинах,
но идея сохраняется.

     Вы видите,  что большинство утилит выдают результат в блоках раз-
мером 512 байтов,  но утилиты,  относящиеся к файловой системе, выдают
результат в 1024-байтных блоках. Поскольку UNIX обращается к дисковому
пространству поблочно, важно уметь точно вычислять, сколько свободного
пространства в файловой системе.  Весьма плоха ситуация, когда имеется
какой-то большой файл в редакторе vi (который использует файл /tmp для
промежуточного редактирования),  а на диске недостаточно места для за-
писи временного файла редактора vi в реальный файл на диске.  На самом
деле  это может случиться на персональных машинах с ограниченным (ска-
жем, 20 Мбайт) объемом жесткого диска.

                             Таблица 7-3

           Размеры блоков для различных команд системы UNIX
---------------------------------------------------------------------------

      512 байтов/блок             1024 байта/блок
---------------------------------------------------------------------------

      ls -s                       fdisk (размеры разделов)
      sum                         mkfs
      cpio                        fsck
      df
      du
---------------------------------------------------------------------------

     РАСЧЕТЫ, СВЯЗАННЫЕ С БЛОКАМИ

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

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

     Обратная задача  также важна.  Если программа fsck начинает сооб-
щать,  что где-то появился дефектный блок,  то каким образом мы  можем
узнать номера цилиндра, головки, сектора и т.д. для данного дефектного
блока?  Такое обратное вычисление сделать очень тяжело, если не невоз-
можно.  Во-первых, номер блока представляет собой произведение четырех
чисел.  Трудно узнать,  какие именно эти числа.  Кроме того,  файловые
системы могут использовать информацию вида база/смещение, поэтому блок
номер 1 в файловой системе в действительности  является  блоком  номер
1382 на диске.  Определить, какого вида информация была использована в
данном случае, тоже тяжело.

     Конкретные данные в следующем примере относятся к вполне  опреде-
ленной машине, но на других машинах используются подобные зависимости.
Эти данные относятся к машине с жестким  диском  объемом  20  Мбайт  с
системами XENIX/DOS.

                      Характеристики устройства:

1 диск    = 615 цилиндров, или 615 цилиндров/диск
1 цилиндр = 4 головки (дорожки), или 4 головки/цилиндр

                        Промышленный стандарт:

Предыдущая страница Следующая страница
1 ... 54 55 56 57 58 59 60  61 62 63 64 65 66 67 ... 71
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (52)

Реклама