Новые книги

Впервые система UNIX была описана в 1974 году в статье Кена Томпсона и Дэнниса Ричи в журнале «Communications of the ACM» [Thompson 74]. С этого времени она получила широкое распространение и завоевала широкую популярность среди производителей ЭВМ, которые все чаще стали оснащать ею свои машины. Особой популярностью она пользуется в университетах, где довольно часто участвует в исследовательском и учебном процессе.
В той отрасли, где мы работаем, библиотека DirectDraw появилась довольно давно. Во всяком случае, за это время она успела доказать свои возможности, и о ней было написано несколько книг. Как обычно, эти книги отличаются по своему качеству. Однако в основном это были добротные учебники, которые (как и многие книги о компьютерах) были написаны за три месяца авторами, изучавшими предмет по ходу дела. В результате большинство этих книг содержит лишь подготовительный материал. Теперь, когда библиотека DirectDraw подросла и обрела свою репутацию (во всяком случае, она старше других компонентов DirectX), настало время уйти от основ и познакомиться с ее некоторыми нетривиальными возможностями.

Эта книга начинается с того, на чем другие книги обычно заканчивались. Мы поговорим об основах DirectDraw, но лишь в общих чертах. Читатель — опытный программист, но незнакомый с DirectDraw — сможет с ходу войти в курс дела. Затем мы перейдем к другим темам, столь же интересным, сколь и полезным.

Цель этой книги — научить вас работать с DirectDraw, а не предоставить некоторую «структурную основу» или нестандартный API, который бы выполнял за вас всю работу. Демонстрационные программы написаны на C++ и используют MFC, но совсем не для того, чтобы скрыть все технические подробности. С++ и MFC — превосходные инструменты, потому что с их помощью любое приложение можно написать несколькими разными способами. Примеры для этой книги были написаны так, чтобы при этом получались структурированные и удобные для чтения проекты, которые наглядно показывают, что и почему происходит в программе.

Помимо DirectDraw, во многих примерах используется библиотека DirectInput. Строго говоря, при программировании графики для Windows можно обойтись и без DirectInput, но ей все же стоит воспользоваться. Она работает быстрее традиционных средств ввода Windows и к тому же входит в DirectX, так что для работы с ней не потребуется никаких дополнительных SDK.

Добавление нового устройства

9.4. Добавление нового устройства

9.4.1. Форматирование гибких дисков, жестких дисков и магнитных лент.

9.4.2. Отображение информации
9.4.3. Копирование данных на запоминающие устройства

9.4.4. Удаление информации с запоминающих устройств.

9.4.5. Разбивка жесткого диска

9.4.6. Удаление запоминающих устройств

В то время как элемент add - Add Storage Device находится в меню storage-devices, функций, вызываемых этим меню, в данной версии нет.

Необходимость добавлять новое устройство в систему (т.е. определять новые специальные файлы устройства) возникает нечасто. При добавлении устройства команда autoboot определяет новые файлы. Однако, если вы не можете осуществить первоначальную загрузку системы и если новое устройство использует уже существующий дисковод, можно использовать команду /sbin/mknod для определения файлов устройства.

Примечание. При необходимости установки нового дисковода вместе с новым устройством следует заново загрузить систему.

Чтобы добавить новое блоковое устройство:

  1. Перейдите в каталог где вы хотите установить новое устройство (такой как /dev)
  2. Напечатайте
    	/sbin/mknod name b major minor
    
  3. Напечатайте
    	chgrp root name
    

Чтобы добавить новое символьное устройство:

  1. Перейдите в каталог где вы хотите установить новое устройство (такой как /dev)
  2. Напечатайте
    	/sbin/mknod name c major minor
    
  3. Напечатайте
    	chgrp root name
    

    Параметры команды mknod:
    name - имя специального файла;
    b - тип блокового устройства;
    c - тип символьного устройства;
    major - смещение в таблицу дисковода (или контроллера) в ядре;
    minor - идентификационный номер этого специфического физического устройства;
    p - абстрактный файл с именем, который функционирует как устройство, работающее по принципу первый пришел - первый вышел.

9.4.1. Форматирование гибких дисков, жестких дисков и магнитных лент

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

Кассетные ленты форматируются в системе UNIX с помощью команды ctcfmt или подкоманды sysadm format. Если в вашей системе имеется накопитель на кассетной ленте, подкоманда sysadm format просит выбрать устройство, которое вы хотите форматировать. Для хранения данных используется только одна сторона кассетной ленты, а прогон ленты через механизм лентопротяжного устройства вызывает в конце концов ее износ. Параметр команды форматирования кассетной ленты ctcfmt определяет количество прогонов ленты, которым она подвергается до выхода предупреждающего сообщения. Значение прогонов по умолчанию 4000.

Накопители на магнитных лентах SCSI не требуют форматирования.

Жесткие диски поставляются уже сформатированными. Команда disksetup не форматирует жесткие диски, а используется для разбивки жестких дисков и инсталяции VTOC.

9.4.1.1. Форматирование

Гибкие диски можно сформатировать с помощью команд shell или путем выбора элемента format - Format Removable Volumes из меню Storage Device.

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

Для форматирования дискеты используется команда format. Необходимо отформатировать все новые дискеты, чтобы не осталось неотформатированных дорожек.

Для отформатированных дискет можно проверить целостность данных с помощью команды dd. Например, чтобы узнать количество целых и частичных блоков данных (входных и выходных) на дискете 1, запустите команду dd с целью копирования данных с /dev/rdsk/f0 на /dev/null (по завершении этой команды дается отчет о количестве скопированных целых и частичных блоков данных):

Пример.

	#dd if=/dev/rdsk/f0 of=/dev/null
	2400+0 records in
	2400+0 records out
	#

В данном примере было скопировано 2400 полных записей и 0 частичных. Номера блоков данных зависят от размера блоков данных, используемых на диске. Если команда dd останавливается в середине копирования, это означает, что она нашла неудачный блок.

Во время форматирования параметр -v команды format подтверждает, что форматирование выполняется без ошибок.

9.4.2. Отображение информации

Для отображения информации о запоминающих устройствах можно использовать команду или выбрать соответствующее меню.

Для использования меню sysadm:

  1. Выберите display из меню Storage Devices. При этом из экрана, отображающего имеющиеся в системе устройства, выбирается нужное устройство.
  2. Заполните необходимую идентифицирующую колонку о специфическом устройстве. Система отображает информацию о компоновке и использовании данного устройства.

Использование команд shell.

Для отображения информации о кассетной ленте выполните:

	cpio -t rawdevice

где -t - отображает таблицу содержимого;
rawdevice - путь к файлу символьного устройства в накопителе на кассетной ленте.

Для отображения информации таблицы содержимого тома выполните:

	prtvtoc device

где device - путь файла символьного устройства.

Для отображения информации об устройстве выполните:

	ls -l /etc/conf/cf.d/mdevice
	ls -l /etc/conf/cf.d/sdevice

Для отображения имени устройства для смонтированной файловой системы выполните:

	devnm filesystem

где filesystem - имя смонтированной файловой системы (например, /usr).

Для отображения номеров свободных блоков и виртуальных узлов выполните:

	df

Можно также использовать команду df для отображения информации о родовых системных блоках тома для смонтированных или демонтированных файловых систем, каталогах или демонтированных ресурсах.

9.4.3. Копирование данных на запоминающие устройства

Для копирования информации на гибких дисках можно использовать меню sysadm, но для других видов копирования следует использовать команды shell.

Есть два подхода к копированию данных, находящихся в запоминающих устройствах. Первый - копировать данные полностью с одного запоминающего устройства на другое; второй - копировать специфические файлы с одного запоминающего устройства на другое. Если файловые системы в запоминающих устройствах уже смонтированы, можно использовать команду cp для выполнения любой операции. Если файловые системы в запоминающих устройствах не смонтированы, можно использовать команды cpio, ctccpio или dd. В зависимости от типа выполняемой операции, некоторые команды действуют эффективнее и быстрее других. Ниже описываются предпочитаемые методы.

9.4.3.1. Копирование файловых систем с жесткого диска на диск

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

9.4.3.2. Копирование файлов с жесткого диска на жесткий диск

Обычно команда cp используется тогда, когда и начальная и конечная файловые системы уже смонтированы. Эта команда используется для быстрого копирования небольших файлов из одного места в другое.

9.4.3.3. Копирование файлов с жесткого диска на гибкий диск/магнитную ленту SCSI (и наоборот)

При копировании большого числа файлов на гибкий диск или магнитную ленту SCSI зачастую эффективнее использовать команду cpio, потому что эта команда копирует не только файлы, но также каталоги и подкаталоги.

9.4.3.4. Копирование файлов с жесткого диска на кассетную ленту (и наоборот)

При копировании большого числа файлов часто эффективнее использовать команду ctccpio, потому что эта команда копирует не только файлы, но также каталоги и подкаталоги.

9.4.3.5. Копирование файлов с гибкого диска на гибкий диск

Можно скопировать содержание дискеты с исходным файлом на дискету с выходным файлом, используя меню или команду dd. Можно выбрать либо "символьное", либо "блоковое" устройство, но для выполнения всей процедуры должно использоваться одно и то же устройство (символьное или блоковое). Если у вас один дисковод, то данные на исходной дискете копируются во временный файл на жестком диске в области временного файла. Затем исходная дискета заменяется, и временный файл копируется на "конечную" дискету. Если у вас много дисководов, то исходные данные копируются непосредственно на конечную дискету, и временный файл не используется.

Примечание. В качестве области временного файла можно использовать любую файловую систему, но разумнее использовать пространство либо в /tmp, либо в /var/tmp, т.к. файлы в этих двух каталогах автоматически удаляются во время перехода к многопользовательскому режиму. В любом каталоге, который вы используете, должно быть, по крайней мере, 1422 свободных блока для временного использования.

9.4.3.6. Использование команды fsck

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

9.4.4. Удаление информации с запоминающих устройств

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

9.4.4.1. Удаление информации с гибких дисков

Можно удалить содержимое гибких дисков, выбрав необязательный параметр erase с экрана Storage Devices или выполнив соответствующую команду. Чтобы удалить всю информацию с гибкого диска, лучше переформатировать его. Для этого выполните команду format.

9.4.5. Разбивка жесткого диска

Разбиение жеского диска происходит со стандартной организацией разделов. Эта организация варьируется в зависимости от номера и размера жестких дисков.

Один жесткий диск разбивается таким образом, чтобы разместить корень (/), /usr, /stand, /var, /home, /opt, /share и другие файловые системы с локальными именами, выделить область подкачки и небольшой раздел для программы начальной загрузки системы. В системах со многими дисками /usr помещается на второй диск, а корень и /home - на первый.

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

9.4.5.1. Планирование изменения разделов жесткого диска

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

  • какие идентификаторы группы определены? Правильно ли определено количество групп? Должным ли образом назначены пользователи в эти группы?
  • какой вид обработки данных обеспечивают эти группы? Требует ли их работа запоминающие устройства для временного хранения данных? Есть ли разница между видом обработки данных одной группой и другой?
  • было ли добавлено ПО, влияющее на текущий план требований к области памяти? Будет ли такое ПО добавлено в будущем?

Разделение жесткого диска может быть выполнено с полным восстановление системы. Команда disksetup может применяться для переопределения разделов на дисках, отличающихся от корневых сегментов дисков.

Если пользователям понадобится больше временного пространства, можно создать отдельный раздел для /var/tmp. Если вы будете это делать, по возможности, разместите раздел в начале диска, в отличие от разделов root и /usr, для балансирования загрузки диска.

9.4.5.2. Изменение разделов для увеличения области подкачки

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

  1. Определить размеры данных разделов. (Для получения этой информации используйте подкоманду sysadm storage_devices).
  2. Решить, какими должны быть размеры новых разделов. (Диск уже полностью распределен. Увеличение размера раздела подкачки означает, что необходимо уменьшить размер другого раздела).
  3. Выполнить резервирование всей системы. (Изменение разделов может привести к стиранию всей информации с диска). Теперь вы готовы к перезагрузке операционной системы.

9.4.6. Удаление запоминающих устройств

Параметр remove на экране Storage Devices не действует.

Предупреждение: Может возникнуть повреждение, если отсоединить любое запоминающее устройство от компьютера, включенного в сеть.

Выполнение этой процедуры разрушает данные (т.е. смонтированные файловые системы), находящиеся в том устройстве, которое вы хотите удалить. Убедитесь, что создана резервная копия содержания диска, прежде чем он будет удален.

Не удаляйте диск, на котором смонтирована корневая файловая система.

Бывают случаи, когда необходимо вывести из работы устройство, например, когда на жестком диске есть дефект. Критические устройства, на которых смонтированы важнейшие файловые системы, никогда не удаляются. Однако, можно удалить некритические устройства из командной строки с помощью следующей процедуры или подкоманды sysadm storage_devices remove. Затем, когда система дезактивируется, можно "обслужить" неисправное некритическое устройство.

Примечание. Вы должны узнать путь к блок-ориентированному или байт-ориентированному устройству, которое хотите удалить, до начала выполнения этой процедуры. Чтобы удалить некритическое устройство:

  1. Предупредите пользователей, что устройство будет выведено из работы, с помощью команды /usr/sbin/wall. Сделайте объявление, указав, к каким файловым системам не будет доступа или каких услуг не будет. По возможности, дайте пользователю завершить работу на том устройстве, которое будет удалено.
  2. Выполните /usr/sbin/devnm, чтобы определить устройство, на котором смонтирована корневая файловая система. Экран будет выглядеть так:
    	# /usr/sbin/devnm  /
    	/dev/dsk/ls0  /
    	#
    

    Число в конце сообщаемого полного имени пути (ls0 в данном примере) - это номер раздела, в котором смонтирована корневая файловая система.

  3. Для определения номера и типа устройства, в котором смонтирована корневая файловая система, выполните ls-l special. Значение special должно быть номером раздела, который вы получили на этапе 2 со следующими изменениями: последней цифрой номера должна быть 6. Новый номер раздела используется для обращения ко всей информации на диске.

    В данном примере номером раздела, о котором заявила devnm, является ls0, поэтому значением special будет ls6, как показано ниже:

    	# ls -l /dev/dsk/ls6
    	brw------ 3 root  sys   0,  6 Feb 23 1988 /dev/dsk/ls6
    	#
    

    Выходные данные показывают, что типом устройства является 0, а номер устройства 6.

  4. Выполните /usr/sbin/devnm для каталога /usr, чтобы определить устройство, на котором смонтирована пользовательская файловая система. Экран будет таким:
    	# /usr/sbin/devnm   /usr
    	/dev/dsk/ls2  /usr
    	#
    
  5. Чтобы определить тип и номер устройства, в котором смонтирована пользовательская файловая система, снова выполните ls -l special. Значение special должно быть номером раздела, который получен на этапе 2, со следующими изменениями: последней цифрой этого номера должна быть 6. Новый номер используется для обращения ко всей информации на диске.

    В данном примере номер раздела, сообщенный devnm, ls2, поэтому значением special должно быть ls6, что показано ниже:

    	# ls -l /dev/dsk/ls6
    	brw------ 2 root  sys   0,  6 Feb 23 1988 /dev/dsk/ls6
    	#
    

    Выходные данные показывают, что тип устройства 0, а номер 6.

  6. Выполнить ls -l device_path, где device_path - путь к байт-ориетированному или блок-ориентированному устройству, которое вы хотите удалить. Запишите тип и номер этого устройства.

    Например, если устройством, которое нужно удалить, является второй жесткий диск, то путь к этому устройству будет /dev/rdsk/disk2. Экран будет выглядеть так:

    	# ls -l /dev/rdsk/disk2
    	brw------ 2 root sys  0, 22 Feb 23 1988 /dev/rdsk/disk2
    	#
    

    Выходные данные показывают, что тип устройства 0, а номер 6.

  7. Проверьте, не являются ли тип и номер устройства, которое вы хотите удалить, такими же, как у корневой или пользовательской файловых систем (см. выходные данные выполнения команд на этапах 5 и 6).

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

  8. Определите номер целевого контроллера, дисковода и позиции техсредств диска путем поиска имени устройства с тем же типом и номером в каталоге /dev/dsk (эти номера закодированы в имени устройства в этом каталоге). Используйте команду grep с командой ls, как показано ниже:
    	# ls -l /dev/dsk|grep "0,  22"
    	brw------ 6 root  sys   0, 22 Dec 30 15:26 ls6
    	#
    

    Здесь номер целевого контроллера 1, номер дисковода 1 и номер позиции техсредств диска 6.

  9. Перечислите текущие каталоги, смонтированные в этом устройстве, с помощью команды grep:
    	# grep  ls6  /etc/vfstab
    	/dev/rdsk/ls6 /dev/rdsk/ls6 /home4 /home2  s5  -  yes  -
    	#
    

    Примечание. Сохраните запись этих каталогов; их можно восстановить, когда устройство возвращается к работе.

  10. Сохраните текущую таблицу файловой системы, скопировав ее:
    	# cp /etc/vfstab   /etc/Ovfstab
    
  11. Демонтируйте каталоги из устройства с помощью команды /usr/sbin/umount.
    	# /usr/sbin/umount  /home4
    
  12. Отредактируйте файл /etc/vfstab, удалив ненужные ссылки на устройство. Удалите имя этого устройства из каталогов /dev/dsk, /dev/rdsk, /dev/rdsk и /dev/rdsk, выполнив команду rm.
    	# rm /dev/dsk/ls6  /dev/rdsk/ls6
    	# rm /dev/rdsk/ls6  /dev/rdsk/ls6
    
  13. Если устройство содержит одну или несколько файловых систем, удалите все входы, связанные с этим устройством, из файла /etc/vfstab.
  14. Удалите устройство из базы данных устройств, найдя его псевдоним, а затем удалив, как показано ниже. device_path - это полное имя пути устройства.
    	# devattr -v  device_path  alias
    	alias='device_alias'
    	# putdev -d device_alias
    	#
    
  15. Узнайте, к каким группам принадлежит устройство, а затем удалите имя устройства из списка этой группы или из списков в базе данных групп устройств. alias - это псевдоимя, возвращенное на предыдущем этапе.
    	# getdgrp alias=alias
    	device_group1
    	device_group2
    	# putdgrp -d device_group1 alias
    	# putdgrp -d device_group2 alias
    	#
    

Назад | Содержание | Вперед