2004 г.
Жизнь с Linux:
совместно используемые ресурсы и… идеи
Андрей Кухар, Издательский Дом "КОМИЗДАТ"
Существуют ресурсы, которые хотелось бы использовать, и идеи, применение которых не менее желательно.
О ресурсах и идеях, взятых из окружения Windows и эксплуатируемых в Linux, и пойдет речь
Генезис
Исследование, предпринятое в настоящей публикации,- эвристическое, поскольку посвящено средствам и методам решения задач. Не побоимся воспользоваться термином "эвристика", употреблявшимся некоторыми философами прошлого, а в наше время наполовину забытым, а наполовину дискредитированным. По существу, большая часть статьи иллюстрирует реальный, практический аспект эвристики: автор делает попытку познакомить читателя с интересными и полезными программными разработками - и тем самым соблазнить его заняться решением собственных проблем и, кроме того, побудить задуматься над методами и средствами, которые при этом применяются.
В общем, сегодня речь пойдет о расширении возможностей операционной платформы Linux с помощью ресурсов, используемых Microsoft Windows, и идей, у нее же заимствованных.
Переход в спящий режим / Пробуждение
Энтузиастами Linux community - Найджелом Каннингэмом (Nigel Cunningham), Флоурентом
Чейбодом (Florent Chabaud), Павелом Мэйчиком (Pavel Machek) и Гэйбоуром Кьюти (Gabor Kuti)
- разработано средство, функциональное назначение которого эквивалентно sleep/wake Windows-систем:
выключение машины с сохранением текущего состояния основной памяти на диске и его восстановление
при последующей перезагрузке. Как результат: не требуется ни повторного открытия документов,
ни перезагрузки приложений. Очевидно, что такой процесс намного быстрее "нормального" выключения
и загрузки ОС - это еще не считая времени, затрачиваемого на… вспоминание характера выполняемой
работы и используемого ПО, а также его загрузку.
Имя этому средству - Software Suspend for Linux, или swsusp.
Software Suspend for Linux хранит дамп в разделе подкачки - следовательно, последний должен иметь достаточный объем. Кроме того, для корректного использования средства требуется добавить дополнительный параметр в файл lilo.conf (или эквивалентный ему): например:
append="resume=/dev/hda1"
Строка эта сообщит программе о том, что /dev/hda1 является swap-разделом и ей придется использовать swap-сигнатуру этого раздела как указатель на данные при приостановке системы. Данный раздел - не обязательно тот, на котором действительно находится информация, это
должен быть какой-либо swap-раздел (Sic!).
Пока что swsusp не входит в дерево 2.4.X, посему потребуется загрузить исходный код ядра и воспользоваться последним доступным патчем. Сделав это, следует активизировать соответствующие опции в конфигурационном файле /usr/src/linux/.config, собрать и установить patched-ядро, скорректировать lilo.conf и перезапустить lilo. Теперь остается выполнить перезагрузку, с тем чтобы получить готовую, наиболее элементарную часть Software Suspend.
Что же касается 2.5.X, то swsusp, начиная с 2.5.18, непосредственно включается в основное дерево разработки этого ядра; из-за отличной драйверной модели большая часть функциональности версии 2.4 отсутствует в 2.5, вновь - пока.
Удобным способом использования swsusp является сценарий bash suspend.sh, исполнив который с опцией --install, вы получите пару файлов: сценарий перехода в спящий режим hibernate и его конфигурацию suspend.conf. Размещение их зависит, как известно, от предпочитаемого/используемого вами дистрибутива Linux; в большинстве случаев они должны находится в /usr/local/sbin/hibernate и /etc/suspend.conf.
Алгоритм тестирования новообретенного свойства таков (приведены этапы для Red Hat или
Mandrake):
- Переключение на консоль с помощью сочетания клавиш <Ctrl+Alt+F1>.
- Получение прав root (Hi, this is Ken. What's the root password?).
- Останов X-сервера посредством команды init 3.
- Запуск hibernate.
После этих действий должно произойти "залегание" машины "в спячку". Включив в следующий
раз питание компьютера, вы тем самым восстановите предыдущий сеанс работы в той же консоли.
Для возвращения в графический режим следует ввести init 5 и залогиниться в X.
Вместе с Software Suspend распространяются опциональные патчи, расширяющие его возможности
в плане взаимодействия с другими патчами:
- acpi-option - для инициирования перехода ко сну с помощью команды вида
echo 4 > /proc/acpi/sleep
- laptop-option - swsusp-совместимый вариант патча работы в лептоповом режиме Джэнс
Эйксбо (Jens Axboe); увеличивает время работы от аккумулятора посредством задержки операций
записи на диск, пока не окончено чтение,- и тем самым предотвращает необязательные дисковращения;
- win4lin-option - предоставляет возможность sleep/wake во время работы ПО Win4Lin;
- bootsplash-option - для использования прогресс-полосы bootsplash вместо обычного текстового
экрана;
- swsusp-*-xfs-option - поддержка XFS-демонов.
Применять эти патчи следует с соблюдением строгого порядка (не требуемые игнорируются):
- acpi, preempt, Win4lin, bootsplash, kdb, XFS и пр.
- xfs-option.
- Software Suspend.
- Прочие опциональные патчи.
Последнюю стабильную версию Software Suspend (коей на момент написания статьи является
1.0 и иже с ней опции), а также сценарий suspend.sh можно скачать по адресу: prdownloads.sourceforge.net/swsusp/swsusp-1.0-2.4.21.tar.gz?
download.
Восстановление данных
Это решение должно пригодиться: тем, кто по неосторожности избавился от важного файла,
не позаботившись при этом о резервной копии; тем, кто вообще убежден в необратимости операции
удаления файлов в Unix-подобных операционных системах; может быть, даже тем, кто (как
автор этих строк) просто интересуется красивыми разработками и желает найти аналог средства,
с помощью которого можно восстанавливать файлы в среде Windows, для ext2, стандартной
файловой системы Linux.
На самом деле файловые данные в действительности не удаляются (но могут быть перезаписаны)
и информация, размещаемая в inode (владелец, права доступа, размер, блоки данных, занимаемые
файлом и т.д.), не модифицируется - теряется же, прежде всего, связь между именем
файла и inode. Чтобы избежать перезаписи дисковых блоков или inodes, прежде занимаемых
удаленным (при помощи rm или unlink) файлом, все операции ввода-вывода на соответствующем
разделе должны быть немедленно прекращены, а сам раздел демонтирован. Возможен также вариант
перемонтирования раздела в режиме "только для чтения".
Далее в ход пускается тяжелая артиллерия - отладчик файловой системы debugfs, предоставляющий
возможность raw-доступа к файловой системе. По сути, debugfs является интерактивным интерфейсом
к библиотеке ext2fs: он транслирует введенные команды в вызовы функций библиотеки. Для
наших целей хватает трех его команд - lsdel, cat и dump:
- lsdel выводит список всех удаленных файлов, откуда необходимо почерпнуть информацию
о требуемых релевантных удаленных inodes. Более или менее полезными полями вывода являются:
Owner, Size, Mode и Time deleted;
- Cat используется для просмотра содержимого inode:
cat <номер_inode>
- наконец, команда dump несет ответственность за восстановление файла, с опцией -p она
оставляет атрибуты файла без изменений, вызов ее таков:
dump -p <номер_inode>имя_восстановленного_файла
Для автоматизации и облегчения процесса восстановления данных служит утилита, созданная Томом Пиком (Tom Pycke) - recover. Ее работа заключается в поиске и индексировании всех
inodes на жестком диске, помеченных как удаленные, с помощью все того же debugfs. Затем
пользователю предлагается ответить на некоторые вопросы, связанные с удаленным файлом,
как то: название файла-устройства накопителя на жестких дисках, примерные дата и время
удаления, приблизительный размер, UID, текстовая строка из файла. Если recover находит
подходящие inodes, он запрашивает имя каталога, в который и будут помещены восстановленные
файлы.
Переходим к идентификации файлов. Поскольку имя файла не подлежит восстановлению - это факт, то можно попробовать определится хотя бы с типом. Сначала в ход пускается стандартная Unix-утилита file, с помощью которой не составит особого труда опознать файл с исходным текстом программы, написанной на каком-нибудь языке программирования, media-файл, почтовый файл, каталог и т.п. Сложности, однако, возникают с двоичными файлами, к числу которых относятся исполняемые, библиотечные и базы данных. В случае исполняемых файлов на помощь
может прийти strings, которая извлекает последовательности ASCII-символов из файла. Библиотеки
несколько труднее в идентификации из-за невозможности их исполнения, хотя и здесь есть
решение - команда objdump.
Debugfs находится в пакете e2fsprogs: sourceforge.net/projects/e2fsprogs, но, прежде
чем брать его из Сети, убедитесь, не установлен ли он с вашего дистрибутива Linux. Адрес последней версии recover.
Горячее подключение
Еще один элемент из множества, упрощающих пользователю жизнь,- подсистема Linux hotplugging - позволяет использовать аппаратные средства немедленно после их подключения. Проблема, решаемая этой подсистемой, состоит в минимизации системного администрирования посредством динамического изменения конфигурации операционной системы. Подзадачи, выполняемые hotplugging, подразумевают:
- связывание драйверов с новыми устройствами;
- конфигурирование драйверов;
- конфигурирование устройств;
- конфигурирование подсистемы;
- запуск приложений.
Они выполняются системными администраторами при помощи сценариев оболочки, которые именуются policy agents, и утилит. Сценарии используются в случаях, когда важна гибкость.
К примеру, способы хранения и управления конфигурационными данными могут различаться в
разных дистрибутивах. Особенно широко варьируются такие административные задачи, как настройка
сети,- и часто, вместо логичной простоты, предпочтение отдается чрезмерной сложности.
Управляет агентами программа /sbin/hotplug (не путать с "Архитектором" :) ). В большинстве
случаев сценарии являются не чем иным, как общим клеем; в свою очередь, использование
общего hotplug-каркаса представляется шагом к минимизации ненужных вариантов в таких административных средствах.
Первоначально hotplugging включала поддержку USB- и PCI- (Cardbus) устройств и могла автоматически конфигурировать некоторые общие сетевые интерфейсы. Позже была добавлена
поддержка IEEE 1394 (Firewire/i.Link) и возможность закачки при необходимости микропрограмм
для USB-устройств. Сейчас с hotplugging взаимодействует большинство других подсистем,
и ее поддержка присутствует почти во всех современных дистрибутивах Linux, включая RedHat,
Debian и United Linux. Большое количество отдельных пакетов использует свои собственные
расширения для автоматизации таких операций, как закачка микропрограмм и настольная компоновка.
Начиная с ядра версии 2.4, hotplugging является стандартной подсистемой Linux; работает также с 2.2, а в 2.6 она интегрирована с драйверной моделью, так что любая шина (sysfs-adapted) или драйверный класс могут сообщать о hotplug-событиях, инициированных горячим добавлением или удалением устройств.
Работает подсистема следующим образом. Во время загрузки системы действует системный сервис /etc/rc.d/init.d/hotplug, который управляет инициализацией оборудования, включая "холодное" подключение (cold plugging), посредством вызова файлов /etc/hotplug/тип.rc для каждого типа устройства (usb, pci - для PCI и Cardbus; net - для сетевой организации и т.д.), поддерживаемого системой. Данные типы определены ядром Linux и передаются как первый аргумент к вызовам /sbin/hotplug.
По завершению инициализации вся hotplug-деятельность выполняется сценарием /sbin/hotplug. Ему помогают файлы /etc/hotplug/тип.agent, которые управляют выбором и загрузкой драйверных модулей, основываясь на содержащихся в них данных MODULE_DEVICE_TABLE. За загрузкой модулей следует выполнение драйверов и оборудование специфической инициализации программами /etc/hotplug/тип/модуль. Сценарии эти используются для установки разрешений, запуска демонов, закачки микропрограмм и т.п. Handmap-средства (файлы /etc/hotplug/тип.handmap) ассоциируют сценарии с устройствами, для которых отсутствуют драйверы ядерного режима; usermap-средства (/etc/hotplug/тип.usermap) позволяют конфигурировать устройства, использующие драйверы пользовательского режима. Наконец, необязательные журнальные файлы /etc/hotplug/*.agent служат для хранения записей о событиях, которые были некорректно обработаны.
Также доступно ПО diet hotplug, предназначенное для загрузки ОС с горячо подключаемых устройств. Это исполняемая бинарная версия /sbin/hotplug, не предоставляющая гибкости
в администрировании, присущей сценарию,- но работающая в более ограниченной среде, где
нельзя воспользоваться bash и схожими с ней инструментальными средствами.
Адрес проекта на
SourceForge.net.
Разделение swap-пространства
Вспоминаются времена, когда объемов жестких дисков для пользовательских нужд было недостаточно. Особенно несладко жилось экспериментаторам, увлеченных поиском краеугольного камня computer science - "уникальной, совершенной и, наконец, бесплатной и не-Windows операционной системы", которым для содержания нескольких систем приходилось предпринимать попытку за попыткой, чтобы хоть сколько-нибудь приблизить отношение "емкость HDD / потребности" к величине, большей или равной единице.
Оказывается, помимо стандартных очисток, уничтожений абсолютно и не очень "не нужных" файлов, попросту себясдерживания и самоограничения, существуют по-своему экзотические методы избавления от этой проблемы. Рассмотрим один из них: совместное использование swap-пространства между Linux и Windows - но сделаем это не столько из-за полезности этого метода (тем более что говорить о полезности во времена 80-долларовых 40-гигабайтных накопителей, по меньшей мере, странно), сколько из любопытства. Все-таки всегда полезно рассмотреть интересное
решение.
Предполагается, что наличествует две ОС: один из дистрибутивов Linux и разновидность Windows (приведены действия для минимального соответствия 1:1, но ничто не мешает использовать их и для других, более масштабных вариантов). И, само собой, будем считать, что в нашем распоряжении немного терпения (к слову сказать, это вообще главное требование всех эвристических исследований).
Этапы метода таковы:
- Linux: отключение (комментирование) подкачки в /etc/fstab; смена типа раздела подкачки
с Linux swap на FAT16 или удаление существующего swap-раздела и создание соразмерного
ему нового с FAT16;
- Windows: форматирование новопроинициализированного раздела (ему должна быть назначена
буква) и присвоение метки тома swap space; установка его разделом для размещения swap-файла:
win386.swp - в Windows 9x, Me; pagefile.sys - в случае Windows NT, 2k или XP;
- Linux: добавление - монтирования нового раздела в /etc/fstab и команд mkswap и swapon
с аргументом /mnt/swap-раздел/swap-файл в /etc/rc.d/rc.local, или эквивалентный ему.
Совместное использование драйверов
Вот мы и подошли к заключительной части обзора, написанной под впечатлением недавно появившейся технологии DriverLoader, как метода sharing-драйверов. Мы остановимся лишь
на тех аспектах ее работы, которые показались автору наиболее привлекательными и которые
наилучшим образом согласуются с его собственной концепцией эвристики.
По словам разработчиков (молодой канадской компании Linuxant Inc.), DriverLoader
суть идеальное решение поддержки в среде Linux сетевых устройств, для которых отсутствуют
необходимые open-source драйверы. Революционная "обертка совместимости" (а на самом деле
- еще один модуль ядра) позволяет стандартным драйверам Windows NDIS 5.0 (Network Driver
Interface Specification) корректно функционировать в системах платформы Linux x86.
10 октября минувшего года компания представила свое инновационное технологическое "демо" (версию 1.0), посредством которого владельцы устройств 802.11g 54mbps Wireless LAN (шины CardBus и PCI), базирующихся на чипсетах Broadcom, получили возможность пользоваться ими в Linux. А уже 9 ноября вышла версия ПО с поддержкой (кроме Broadcom) Intel PRO/Wireless (Centrino), Intersil (Prism GT/Duette/Indigo), Atheros, Cisco (Aironet), Realtek (RTL8180L) и Texas Instruments (ACX100) WLAN Windows-драйверов. Данные чипсеты используются во многих как лептоповых, так и настольных беспроводных сетевых адаптерах производства Acer, Actiontec, Asus, Belkin, Buffalo/MELCO, Cisco, D-Link, Dell, eMachines, Fujitsu, Gateway, HP/Compaq, IBM, Linksys, Microsoft, Motorola, NETGEAR, SMC, Sony, Toshiba, Z-Com и многих других.
Для конечных пользователей DriverLoader доступна бесплатно. Большинство файлов пакета распространяются на условиях собственной лицензии Linuxant Inc., запрещающей модификацию
кода ПО,- остальная же часть (файлы каталога modules/GPL) лицензирована на основе GNU
General Public License. Поддерживаются популярные 2.4 и 2.6-ядро-based дистрибутивы Linux:
RedHat, SuSE, Mandrake, Debian и производные.
После скачивания требуемого формата пакета (.{арх}.rpm,.deb или.tar.gz), применяется соответствующий метод инсталляции: rpm -i driverloader-{версия}.{арх}.rpm, dpkg -i driverloader_{версия}_{арх}.deb
или unpacking+making. Чтобы сконфигурировать устройство, следует выполнить команду dldrconfig
(может также использоваться для изменения некоторых опций конфигурации или перекомпиляции
модулей ядра после установки его обновлений). Если все прошло без ошибок, для завершения
установки остается обратится с помощью веб-браузера по адресу 127.1:18020/ или имя_вашего_хоста:18020/ на DriverLoader's web configurator и пройти авторизацию как root. Потребуется указать программе размещение.inf- и.sys-файлов драйвера (на CD, распространяемом с продуктом, или online-ресурсе производителя) и ключ лицензии (доступен на). Теперь,
когда процесс окончен, устройство просто обязано появится как нормальный сетевой интерфейс,
управляемый обычными средствами дистрибутива (к примеру, redhat-config-network или DrakConf).
Конец первой части
В заключение, отметим, что рассмотренные средства и методы чаще всего не являются лучшими в своих областях применения и, тем более, единственными в своем роде. Это те вещи, которые обладают, прежде всего, открытостью (исключение - DriverLoader, где лишь малая часть GPL'd), простотой, новизной, интересностью и известностью… в узких кругах. Статья не претендует на роль исчерпывающей - хотя бы потому, что цель ее состоит в обозначенных в начале "соблазнениях" и "побуждениях".
Как говорится, выводы каждый сделает для себя сам - самостоятельно установив, запустив, и удалив рассмотренное ПО. Этот алгоритм действий можно слепо чтить, придерживаясь его
как закона, можно временами делать своего рода "вылазки", можно даже молчаливо бездействовать.
Но, с другой стороны, разве это не замечательно: узнавать, искать, экспериментировать,
исследовать, пытаться - в свое удовольствие?