Ubuntu Server 10.04 установлен, но проблема с загрузчиком ещё не решена. Получается ситуация - система есть, а загрузиться в неё нельзя.
Нашёл в интернете информацию, что загрузчик GRUB невозможно установить на аппаратный RAID-0. Странно, ведь подобное объединение жёстких дисков, по-видимому, должно быть распространено на серверах (да и для desktop-систем такой вариант может использоваться). Хотя я читал, что на программный RAID-0 загрузчик должен устанавливаться без проблем - но ведь аппаратное объединение дисков в RAID-массив даёт преимущество в том, что поддержка RAID не нагружает центральный процессор (все необходимые вычисления происходят в контроллере RAID, который, по сути, сам является процессором -- особенно, в случае использования дорогих контроллеров). Читал на одном форуме, что теоретически программный RAID должен работать быстрее -- но, как я уже сказал выше, программная реализация даёт дополнительную нагрузку на ЦП.
Итак, как же установить и _загрузить_ систему?
Решение появилось само собой - взять ещё один жёсткий диск, и установить систему на него (в то время, как образа виртуальных машин будут храниться на быстром RAID-0).
Система установлена, но вот новая проблема - при загрузке появляется сообщение, что невозможно её загрузить... Дело было уже под вечер, я решил, что нужно сделать перерыв (по крайней мере, на сон и еду), и отправился домой. Дома меня осенило - загрузчик каким-то невообразимым образом всё-таки установился в загрузочную запись на RAID-0, и пытается загрузиться оттуда. Разумеется, систему он не видит. Ладно. На следующий день приехал в СГА, поставил в BIOS первым в очереди загрузки RAID-0. Да, так и есть. Загрузчик грузится, система - нет.
Есть мысли по поводу дальнейших действий. Первый вариант -- попытаться установить загрузчик на третий жёсткий диск (который не объединён в RAID), на котором установлена система. Второй вариант (если первый не поможет) -- переустановить систему, предварительно отключив вообще первые два диска. Третий вариант - попытаться всё-таки установить систему на RAID-0 -- ведь загрузчик туда установился, так что ещё есть шанс.
К счастью, со временем меня никто не ограничивает, я могу спокойно со всем разобраться и переустанавливать Ubuntu Server в N-й раз. Собственно, понятно -- работаю я добровольно, можно сказать, за "спасибо", просто из заинтересованности. Для меня эта задача -- как вызов.
Кроме того, что в СГА появится один сервер на Linux, есть ещё одна положительная сторона: я уже начинаю понимать, как работать с LVM (дома я ещё не ставил подобные эксперименты), могу объяснить, в чём различие между программным и аппаратным RAID и каковы сильные и слабые стороны RAID-0. Когда-нибудь мне это пригодиться. Кстати, я подумываю о использовании LVM на домашнем ПК...
30 июня 2010 г.
26 июня 2010 г.
Проблемы с установкой Ubuntu Server 10.04 на RAID-0 с LVM
Второй день пытаюсь установить Ubuntu Server 10.04 на сервер в НФ СГА. Казалось бы, чего проще - там и так всё упрощено до предела. Установщик с интерфейсом на псевдографике, автоматическое определение оборудования (все необходимые драйвера вроде есть), автоматическая настройка сети, автоматическая опять же настройка параметров системы путём диалога с пользователем... Для начинающего gentoo-шника вроде меня установка этого дистрибутива не должна стать большой проблемой. Я был уверен в успехе.
Вставил диск. Загружаюсь. На компьютере аппаратный RAID-0 -- два жёстких диска объединены в один, и для компьютера они представляются как один накопитель на ~640Гб. Ещё один плюс такого подхода -- повышается скорость чтения и записи, т.к. данные пишутся сразу на два диска, и считываются с двух. Недостаток -- низкая надёжность, ведь если один жёсткий диск выйдет из строя, то на втором останутся "половинчатые" данные, которые уже вряд ли можно будет прочитать/восстановить.
Установщик обнаруживает RAID, предлагает его задействовать. Отвечаю "да". Далее. Настройка дисков. Установщик предлагает несколько вариантов -- по памяти что-то вроде этого:
Пробовал варианты 2 и 4.
Выбираю 2. По-умолчанию -- отдельный (первичный) раздел под /boot с ФС ext2 объёмом ~255Мб, остальное место занимает LVM: логический раздел под swap объёмом ~12,2Гб, и раздел под корневую директорию, на который приходится всё оставшееся место (ФС ext4).
Меня это не очень устраивает. Тем более, что первый раз, когда я пытался разбить диск автоматически, установщик вынес раздел /boot за пределы LVM, хотя, насколько я знаю, система волне может загружаться прямо с LVM-раздела. Как ни странно, в другой раз, при выборе этого пункта, установщик действительно зянял под LVM весь диск и предложил выделить в отдельные "логические тома" (термин LVM) каталоги /, /boot, /usr, /home, /var, /tmp -- почти так, как я разбивал диски у себя на компьютере (для Gentoo в отдельные разделы ещё вынесены каталоги /usr/portage и /usr/portage/distfiles). Интересно, почему же он сразу не предложил такой вариант? Гм...
Выбираю 4. Здесь всё гораздо интереснее.
Занимаю под LVM весь диск. Создаю логические тома под /boot, /, swap, /home. Так как понятия не имею, сколько место потребуется на сервере под каталоги /var, /tmp и пр., решаю не слишком увлекаться дроблением диска, и выделяю под корневой раздел 100Гб в расчёте на то, что в дальнейшем (благодаря возможностям LVM) можно будет уменьшить его объём и/или разбить на отдельные логические тома.
Здесь стоит сказать, под какую задачу будет использоваться этот сервер. На нём будут храниться несколько образов виртуальной машины, каждый образ размером ~40Гб. Если эксперимент по установке и использованию в НФ СГА Ubuntu Server будет успешным, то вполне вероятно, этот дистрибутив будет использован и для других задач. Это одна из главных причин, почему я заинтересован в успехе данного эксперимента.
И вот, настройка разделов завершена, пора устанавливать базовую систему и загрузчик. И всё бы ничего, да вот не хочет устанавливаться загрузчик GRUB2. Причём, он либо вообще не выдаёт никаких сообщений об ошибках (но завершить установку невозможно, разве что продолжать без установки загрузчика), или выдаёт ошибку, что невозможно записать загрузчик на hd0 -- и это, увы, неисправимая ошибка.
Не могу понять -- то ли ему LVM не нравиться, то ли RAID-массив, то ли что-то ещё. Хотя с RAID, по идее, не должно быть проблем. Пробовал ставить систему без использования LVM, но это не помогло. Да и в Интернете видел инструкции по установке Linux на LVM.
Пытался загрузиться с SystemRescueCD, но не смог смонтировать файловые системы, созданные на RAID -- получал сообщение об ошибке.
Продолжу в понедельник. Если уж Википедия использует Ubuntu на серверах, то значит, этот дистрибутив не только можно установить, но и задействовать для решения ответственных задач. Просто сейчас я что-то не так делаю. Осталось только понять, что...
Вставил диск. Загружаюсь. На компьютере аппаратный RAID-0 -- два жёстких диска объединены в один, и для компьютера они представляются как один накопитель на ~640Гб. Ещё один плюс такого подхода -- повышается скорость чтения и записи, т.к. данные пишутся сразу на два диска, и считываются с двух. Недостаток -- низкая надёжность, ведь если один жёсткий диск выйдет из строя, то на втором останутся "половинчатые" данные, которые уже вряд ли можно будет прочитать/восстановить.
Установщик обнаруживает RAID, предлагает его задействовать. Отвечаю "да". Далее. Настройка дисков. Установщик предлагает несколько вариантов -- по памяти что-то вроде этого:
- автоматически разбить диск
- использовать весь диск, задействовать и настроить LVM
- использовать весь диск, задействовать и настроить LVM с шифрованием
- вручную
Пробовал варианты 2 и 4.
Выбираю 2. По-умолчанию -- отдельный (первичный) раздел под /boot с ФС ext2 объёмом ~255Мб, остальное место занимает LVM: логический раздел под swap объёмом ~12,2Гб, и раздел под корневую директорию, на который приходится всё оставшееся место (ФС ext4).
Меня это не очень устраивает. Тем более, что первый раз, когда я пытался разбить диск автоматически, установщик вынес раздел /boot за пределы LVM, хотя, насколько я знаю, система волне может загружаться прямо с LVM-раздела. Как ни странно, в другой раз, при выборе этого пункта, установщик действительно зянял под LVM весь диск и предложил выделить в отдельные "логические тома" (термин LVM) каталоги /, /boot, /usr, /home, /var, /tmp -- почти так, как я разбивал диски у себя на компьютере (для Gentoo в отдельные разделы ещё вынесены каталоги /usr/portage и /usr/portage/distfiles). Интересно, почему же он сразу не предложил такой вариант? Гм...
Выбираю 4. Здесь всё гораздо интереснее.
Занимаю под LVM весь диск. Создаю логические тома под /boot, /, swap, /home. Так как понятия не имею, сколько место потребуется на сервере под каталоги /var, /tmp и пр., решаю не слишком увлекаться дроблением диска, и выделяю под корневой раздел 100Гб в расчёте на то, что в дальнейшем (благодаря возможностям LVM) можно будет уменьшить его объём и/или разбить на отдельные логические тома.
Здесь стоит сказать, под какую задачу будет использоваться этот сервер. На нём будут храниться несколько образов виртуальной машины, каждый образ размером ~40Гб. Если эксперимент по установке и использованию в НФ СГА Ubuntu Server будет успешным, то вполне вероятно, этот дистрибутив будет использован и для других задач. Это одна из главных причин, почему я заинтересован в успехе данного эксперимента.
И вот, настройка разделов завершена, пора устанавливать базовую систему и загрузчик. И всё бы ничего, да вот не хочет устанавливаться загрузчик GRUB2. Причём, он либо вообще не выдаёт никаких сообщений об ошибках (но завершить установку невозможно, разве что продолжать без установки загрузчика), или выдаёт ошибку, что невозможно записать загрузчик на hd0 -- и это, увы, неисправимая ошибка.
Не могу понять -- то ли ему LVM не нравиться, то ли RAID-массив, то ли что-то ещё. Хотя с RAID, по идее, не должно быть проблем. Пробовал ставить систему без использования LVM, но это не помогло. Да и в Интернете видел инструкции по установке Linux на LVM.
Пытался загрузиться с SystemRescueCD, но не смог смонтировать файловые системы, созданные на RAID -- получал сообщение об ошибке.
Продолжу в понедельник. Если уж Википедия использует Ubuntu на серверах, то значит, этот дистрибутив не только можно установить, но и задействовать для решения ответственных задач. Просто сейчас я что-то не так делаю. Осталось только понять, что...
Пришло время для списка
Цитируя Moby, пришло время для списка, а значит, для компиляции нескольких (возможно, не связанных между собой) тем в один пост:
1. 4/5 сессии сданы. Замечательно.
Теперь столько времени провожу в НФ СГА, что некоторые думают, что я опять вернулся на прежнее место работы. Нет, вряд ли.
2. Присутствовал позавчера на предзащите дипломных работ. Скоро и мне придётся через это пройти. Написание диплома, предзащита, защита... Впрочем, я не особо волнуюсь - диплом написать смогу, главное - не оставлять на последний момент основную часть работы.
На предзащиту допускаются все желающие, и это очень интересная процедура. Присутствуют один-два преподавателя. Студент читает речь (как если бы он уже защищал диплом в Москве), преподаватели смотрят дипломную работу и раздаточный материал, задают вопросы. Это вроде генеральной репетиции перед защитой. Если студент допускает ошибки в построении речи и/или в дипломе, то на предзащите есть возможность найти исправить эти ошибки.
3. Вот уже более недели помогаю дипломникам с их работами. Практически ни у кого не принимают дипломную работу с первого раза. Некоторые приносят на проверку диплом в последний момент. Некоторые приезжают в город N^2 на предзащиту из области, и у них просто нет времени кататься туда-сюда с дипломом, чтобы самостоятельно исправить его дома/на работе. Многие просто не знают всех требований, а если знают - то далеко не всегда знают, как выполнить эти требования.
Я неплохо знаю требования к дипломам и правила оформления. Благодаря работе в НФ СГА и самостоятельному написанию трёх курсовых работ, я знаю приёмы работы с текстовыми процессорами Microsoft Office Word и OpenOffice.org Writer. Так что, за какой бы компьютер я не сел, ко мне сразу выстраивается очередь студентов с дипломами для проверки/редактирования. Обычно я не отказываю в помощи. Надеюсь, что когда сам буду делать диплом, то так же смогу рассчитывать на помощь (если, конечно, она мне потребуется).
4. В НФ СГА решили провести эксперимент и поставить Ubuntu Server на один из серверов. Я думаю, что это несколько странно - Linux в СГА? Похоже на деление на ноль, особенно учитывая недавно подписанное Microsoft и СГА соглашение о сотрудничестве.
Впрочем, если подумать, есть нечто общее между распределённой образовательной сетью СГА со всеми филиалами - и свободным ПО, разработка которого является так же распределённым процессом, который осуществляется сообществом разработчиков с разных концов света. В любом случае, это позитивное явление. Я вызвался устанавливать и настраивать Ubuntu Server - хотя у меня нет опыта установки серверной версии этого дистрибутива и вообще работы с серверами, уверен, что смогу решить эту задачу.
5. Недавно вернул к жизни свой старый mp3-плеер, который сломался около года назад - у него был повреждён флэш-накопитель. Я не мог ни записать туда файлы, ни стереть их - плеер заблокировал память, чтоб я мог скопировать с него нужную мне информацию. Проблема в том, что у меня не было там нужной информации, мне нужно было просто форматировать диск. Средствами Windows и Linux я сделать это не смог. Не помогало даже низкоуровневое форматирование диска. Перепробовав все способы, решил переустановить прошивку с помощью утилиты, поставляемой в комплекте вместе с плеером. Помогло.
6. На ноутбуке у меня теперь Windows соседствует с Gentoo. Есть несколько проблем, которые я пока что не смог решить - например, ноутбук не видит CD/DVD-привод, и не монтирует автоматически флэш-карты. Впрочем, у меня сейчас просто нет времени разбираться с этим - возможно, я займусь решением этих проблем в выходные.
7. Уже который день стоит ужасная жара. Плавится асфальт, кажется, ещё чуть-чуть - и начнут плавиться пластиковые бутылки и вспыхнут бумажные пакеты McDonalds, разбросанные повсюду. Периодически ветер доносит из-за города запах горящего торфа. Дороги гудят пробками. Вот оно, лето в городе N^2.
1. 4/5 сессии сданы. Замечательно.
Теперь столько времени провожу в НФ СГА, что некоторые думают, что я опять вернулся на прежнее место работы. Нет, вряд ли.
2. Присутствовал позавчера на предзащите дипломных работ. Скоро и мне придётся через это пройти. Написание диплома, предзащита, защита... Впрочем, я не особо волнуюсь - диплом написать смогу, главное - не оставлять на последний момент основную часть работы.
На предзащиту допускаются все желающие, и это очень интересная процедура. Присутствуют один-два преподавателя. Студент читает речь (как если бы он уже защищал диплом в Москве), преподаватели смотрят дипломную работу и раздаточный материал, задают вопросы. Это вроде генеральной репетиции перед защитой. Если студент допускает ошибки в построении речи и/или в дипломе, то на предзащите есть возможность найти исправить эти ошибки.
3. Вот уже более недели помогаю дипломникам с их работами. Практически ни у кого не принимают дипломную работу с первого раза. Некоторые приносят на проверку диплом в последний момент. Некоторые приезжают в город N^2 на предзащиту из области, и у них просто нет времени кататься туда-сюда с дипломом, чтобы самостоятельно исправить его дома/на работе. Многие просто не знают всех требований, а если знают - то далеко не всегда знают, как выполнить эти требования.
Я неплохо знаю требования к дипломам и правила оформления. Благодаря работе в НФ СГА и самостоятельному написанию трёх курсовых работ, я знаю приёмы работы с текстовыми процессорами Microsoft Office Word и OpenOffice.org Writer. Так что, за какой бы компьютер я не сел, ко мне сразу выстраивается очередь студентов с дипломами для проверки/редактирования. Обычно я не отказываю в помощи. Надеюсь, что когда сам буду делать диплом, то так же смогу рассчитывать на помощь (если, конечно, она мне потребуется).
4. В НФ СГА решили провести эксперимент и поставить Ubuntu Server на один из серверов. Я думаю, что это несколько странно - Linux в СГА? Похоже на деление на ноль, особенно учитывая недавно подписанное Microsoft и СГА соглашение о сотрудничестве.
Впрочем, если подумать, есть нечто общее между распределённой образовательной сетью СГА со всеми филиалами - и свободным ПО, разработка которого является так же распределённым процессом, который осуществляется сообществом разработчиков с разных концов света. В любом случае, это позитивное явление. Я вызвался устанавливать и настраивать Ubuntu Server - хотя у меня нет опыта установки серверной версии этого дистрибутива и вообще работы с серверами, уверен, что смогу решить эту задачу.
5. Недавно вернул к жизни свой старый mp3-плеер, который сломался около года назад - у него был повреждён флэш-накопитель. Я не мог ни записать туда файлы, ни стереть их - плеер заблокировал память, чтоб я мог скопировать с него нужную мне информацию. Проблема в том, что у меня не было там нужной информации, мне нужно было просто форматировать диск. Средствами Windows и Linux я сделать это не смог. Не помогало даже низкоуровневое форматирование диска. Перепробовав все способы, решил переустановить прошивку с помощью утилиты, поставляемой в комплекте вместе с плеером. Помогло.
6. На ноутбуке у меня теперь Windows соседствует с Gentoo. Есть несколько проблем, которые я пока что не смог решить - например, ноутбук не видит CD/DVD-привод, и не монтирует автоматически флэш-карты. Впрочем, у меня сейчас просто нет времени разбираться с этим - возможно, я займусь решением этих проблем в выходные.
7. Уже который день стоит ужасная жара. Плавится асфальт, кажется, ещё чуть-чуть - и начнут плавиться пластиковые бутылки и вспыхнут бумажные пакеты McDonalds, разбросанные повсюду. Периодически ветер доносит из-за города запах горящего торфа. Дороги гудят пробками. Вот оно, лето в городе N^2.
10 июня 2010 г.
жизнь, учёба, gentoo...
Пожалуй, первый раз приближаюсь к сессии без "хвостов". Приятно это осознавать. Можно спокойно готовиться к сессии и наконец-то установить Gentoo на ноутбук, а заодно исправить ошибки, допущенные при первой установке этой ОС на ПК.
Например, я не знал, что процессор моего ПК (Intel Pentium 4 1.7GHz) поддерживает MMX, SSE и SSE2, и не включил эти флаги в /etc/make.conf перед сборкой системы. Хотя эти флаги оптимизации поддерживаются не всеми пакетами, но зато те пакеты, которые их поддерживают, будучи собранные с ними, дают существенный прирост производительности. В частности, это относится к kdelibs и (в особенности) к различным мультимедиа-приложениям. Так, проигрыватель VLC, будучи пересобранный с флагами mmx и sse, стал воспроизводить некоторое HD-видео из моей коллекции практически без "тормозов" (на сильно динамичных сценах всё равно процессор не справляется с обработкой такого потока данных и видео выглядит неприглядно). Это при том, что раньше мой довольно таки древний компьютер вообще не мог нормально возпроизводить видео высокой чёткости - попытки поднять приоритет процесса проигрывателя и/или добиться чего-либо с помощью настройки практически не помогали. Комп скрипел всеми своими 1.7 гигагерцами и миллионами транзисторов, но видео всё равно не воспроизводилось нормально. А теперь вот... Именно на примере мультимедиа-приложений наиболее заметно преимущество сборки программ и системы в целом под конкретное "железо". Всё-таки, если после пересборки VLC начал воспроизводить HD-видео, с этим трудно поспорить.
Всю информацию о процессоре можно получить с помощью
# cat /proc/cpuinfo
...долго думал, какую систему ставить на ноутбук вместо Ubuntu. Мощности ноутбука еле хватает для прожорливого Gnome, о KDE и говорить нечего. Тем более что я хотел не просто сменить дистрибутив, я хотел кардинальных перемен. Окружение вроде Xfce или даже OpenBox, минимум предустановленных программ, нетребовательность к ресурсам ноутбука. Можно было бы выбрать "готовый" лёгкий дистрибутив, который _условно_ соответствует моим требованиям. Но, так как я не ищу простых путей, то решил повторно сдать экзамен по установке Gentoo.
Загрузился с LiveCD SystemRescueCD 1.5.5 (это гораздо удобнее, чем собирать и настраивать систему, загрузившись с LiveCD Ubuntu и тем более LiveDVD Gentoo). Установил базовую систему, вручную настроил и собрал ядро. Система не грузится. Долго бился над загрузкой, нашёл несколько ошибок, исправил - не грузится!.. Думал, дело в загрузчике. Поставил новый GRUB 1.98 (GRUB2). Несколько раз перекофигурировал (слово-то какое) ядро - не грузится, и всё тут. Извечный вопрос - что делать? В интернете нет рецепта именно для моего ноутбука (Toshiba Satellite L30-114). По-видимому, в ядро нужно включить ещё какие-то драйвера, т.к. система не может примонтировать при загрузке корневой каталог. Но какие драйвера? Гм... На третий день, то есть, сегодня, решение было найдено. Раз LiveCD загружается, значит, в ядро все необходимые драйвера включены - осталось только где-нибудь подсмотреть, какие именно драйвера. Гениально просто. Загрузившись с LiveCD, пишем в консоли:
# lspci -k
И видим список оборудования, подключенного к шине PCI. Более того, благодаря флагу -k, видим драйвера, которые используются ядром для каждого устройства. Остаётся только включить эти драйвера в ядро новой системы.
О ходе процесса сборки системы на ноуте пишу на Twitter. В последнее время, я чаще пишу туда, чем в этот блог... Наверное, это побочный эффект того, что я установил Twitter-клиент для Emacs.
Например, я не знал, что процессор моего ПК (Intel Pentium 4 1.7GHz) поддерживает MMX, SSE и SSE2, и не включил эти флаги в /etc/make.conf перед сборкой системы. Хотя эти флаги оптимизации поддерживаются не всеми пакетами, но зато те пакеты, которые их поддерживают, будучи собранные с ними, дают существенный прирост производительности. В частности, это относится к kdelibs и (в особенности) к различным мультимедиа-приложениям. Так, проигрыватель VLC, будучи пересобранный с флагами mmx и sse, стал воспроизводить некоторое HD-видео из моей коллекции практически без "тормозов" (на сильно динамичных сценах всё равно процессор не справляется с обработкой такого потока данных и видео выглядит неприглядно). Это при том, что раньше мой довольно таки древний компьютер вообще не мог нормально возпроизводить видео высокой чёткости - попытки поднять приоритет процесса проигрывателя и/или добиться чего-либо с помощью настройки практически не помогали. Комп скрипел всеми своими 1.7 гигагерцами и миллионами транзисторов, но видео всё равно не воспроизводилось нормально. А теперь вот... Именно на примере мультимедиа-приложений наиболее заметно преимущество сборки программ и системы в целом под конкретное "железо". Всё-таки, если после пересборки VLC начал воспроизводить HD-видео, с этим трудно поспорить.
Всю информацию о процессоре можно получить с помощью
# cat /proc/cpuinfo
...долго думал, какую систему ставить на ноутбук вместо Ubuntu. Мощности ноутбука еле хватает для прожорливого Gnome, о KDE и говорить нечего. Тем более что я хотел не просто сменить дистрибутив, я хотел кардинальных перемен. Окружение вроде Xfce или даже OpenBox, минимум предустановленных программ, нетребовательность к ресурсам ноутбука. Можно было бы выбрать "готовый" лёгкий дистрибутив, который _условно_ соответствует моим требованиям. Но, так как я не ищу простых путей, то решил повторно сдать экзамен по установке Gentoo.
Загрузился с LiveCD SystemRescueCD 1.5.5 (это гораздо удобнее, чем собирать и настраивать систему, загрузившись с LiveCD Ubuntu и тем более LiveDVD Gentoo). Установил базовую систему, вручную настроил и собрал ядро. Система не грузится. Долго бился над загрузкой, нашёл несколько ошибок, исправил - не грузится!.. Думал, дело в загрузчике. Поставил новый GRUB 1.98 (GRUB2). Несколько раз перекофигурировал (слово-то какое) ядро - не грузится, и всё тут. Извечный вопрос - что делать? В интернете нет рецепта именно для моего ноутбука (Toshiba Satellite L30-114). По-видимому, в ядро нужно включить ещё какие-то драйвера, т.к. система не может примонтировать при загрузке корневой каталог. Но какие драйвера? Гм... На третий день, то есть, сегодня, решение было найдено. Раз LiveCD загружается, значит, в ядро все необходимые драйвера включены - осталось только где-нибудь подсмотреть, какие именно драйвера. Гениально просто. Загрузившись с LiveCD, пишем в консоли:
# lspci -k
И видим список оборудования, подключенного к шине PCI. Более того, благодаря флагу -k, видим драйвера, которые используются ядром для каждого устройства. Остаётся только включить эти драйвера в ядро новой системы.
О ходе процесса сборки системы на ноуте пишу на Twitter. В последнее время, я чаще пишу туда, чем в этот блог... Наверное, это побочный эффект того, что я установил Twitter-клиент для Emacs.
29 мая 2010 г.
Изучаю C++. Проблемы с функцией fgets(). Выкидываем символ новой строки из строковой переменной.
Я люблю хорошую музыку. Вы тоже? Отлично. А ещё я люблю переделывать простые и скучные программы из учебников по программированию, добавляя в них дополнительную функциональность и улучшая их. В одной из таких программ (Герберт Шильдт, "C++. Руководство для начинающих, 2-е изд.", стр.182-183) предлагалось написать простой телефонный справочник, используя массив строк. Стоп, телефонный справочник?.. гм... звучит не очень интересно. Я попробовал создать небольшую и простую музыкальную базу данных. Конечно, то, что получилось, было мало похоже на Musicbrainz или Discogs... Ну конечно, ведь это - просто улучшенная версия телефонного справочника из учебника по C++.
Итак, что мы имеем изначально? Программа, приведённая в книге, очень проста. Создаётся массив строк numbers[10][80], этот массив сразу заполняется данными: имя, телефон, имя, телефон ... и т. д. Вы вводите имя, программа последовательно сравнивает введённую вами строку с элементами строкового массива. Если есть совпадение, программа отображает телефонный номер. Конец программы.
Теперь пора превратить этот телефонный справочник в музыкальную БД. Во-первых, я поменял название массива и сделал его "безразмерным", вот так: bands[][200]. Как видите, компилятор сам подсчитывает количество строк массива. Кроме того, я увеличил количество столбцов массива (т. е. максимальную длину записи) до 200, чтобы можно было перечислить несколько альбомов для каждого музыканта:
Здесь я добавил в конце массива две пустые строки, содержащие нулевой символ "\0" (компилятор самостоятельно добавляет этот символ в конце каждой строковой переменной). Это пригодится для огранизации цикла последовательного просмотра элементов строкового массива.
Поместил считывание строки, поиск совпадений, и вывод результата в бесконечный цикл, из которого два выхода (а как же иначе?..) - или клавиша <q>, или... <Ctrl>+<c>.
Теперь проблема с cin >> str; - нам не удастся ввести название группы, состоящее из нескольких слов, разделённых пробелами - знак пробела будет воспринят как конец ввода и в переменную str попадёт только первое слово из названия группы. Чтобы исправить это, потребуется использовать... ну, скажем, fgets(str, 100, stdin) для считывания строки. Однако именно эта функция и явилась причиной очень занятного бага, из-за которого программа не могла корректно работать. Дело в том, что функция fgets() прежде, чем завершить свою работу после нажатия <Enter>, считывает в строковую переменную str символ новой строки "\n"! Из-за этой "особенности" функция strcmp(str, bands[i]) работала некорректно - как я не бился, она "в упор" не видела очевидные совпадения введённой строки с элементом строкового массива... И вот теперь я знаю, в чём дело. Но как это исправить? В Интернете нашлось несколько различных howto на тему "как выкинуть ненужный символ новой строки из переменной". Однако все эти способы показались мне чресчур сложными для подобной задачи. После размышлений, я написал следующее:
После этого программа стала работать корректно.
В процессе изучения языка C++ я часто сталкиваюсь с различными проблемами, которые пытаюсь решить. Иногда это бывает очень просто, а иногда приходится потратить немало времени. В большинстве случаев, больше всего времени уходит на то, чтобы понять, где же я ошибся.
А вообще, на поиск и исправление ошибок может уйти время даже большее, чем на написание самой программы.
Итак, что мы имеем изначально? Программа, приведённая в книге, очень проста. Создаётся массив строк numbers[10][80], этот массив сразу заполняется данными: имя, телефон, имя, телефон ... и т. д. Вы вводите имя, программа последовательно сравнивает введённую вами строку с элементами строкового массива. Если есть совпадение, программа отображает телефонный номер. Конец программы.
cin >> str; // Считываем строку в символьную (char) переменную str[80]
for(i = 0; i < 10; i += 2)
if(!strcmp(str, numbers[i])) { // Проверяем на совпадение с элементом массива
cout << "Телефонный номер: " // и выводим на экран
<< numbers[i+1] << "\n";// телефонный номер break; }Теперь пора превратить этот телефонный справочник в музыкальную БД. Во-первых, я поменял название массива и сделал его "безразмерным", вот так: bands[][200]. Как видите, компилятор сам подсчитывает количество строк массива. Кроме того, я увеличил количество столбцов массива (т. е. максимальную длину записи) до 200, чтобы можно было перечислить несколько альбомов для каждого музыканта:
char bands[][200] = {
"группа1", "альбом1, альбом2 ...",
"группа2", "альбом1, альбом2, альбом3 ...",
// ...
"группаN", "альбом1, альбом2 ...",
"", ""
};
Здесь я добавил в конце массива две пустые строки, содержащие нулевой символ "\0" (компилятор самостоятельно добавляет этот символ в конце каждой строковой переменной). Это пригодится для огранизации цикла последовательного просмотра элементов строкового массива.
Поместил считывание строки, поиск совпадений, и вывод результата в бесконечный цикл, из которого два выхода (а как же иначе?..) - или клавиша <q>, или... <Ctrl>+<c>.
Теперь проблема с cin >> str; - нам не удастся ввести название группы, состоящее из нескольких слов, разделённых пробелами - знак пробела будет воспринят как конец ввода и в переменную str попадёт только первое слово из названия группы. Чтобы исправить это, потребуется использовать... ну, скажем, fgets(str, 100, stdin) для считывания строки. Однако именно эта функция и явилась причиной очень занятного бага, из-за которого программа не могла корректно работать. Дело в том, что функция fgets() прежде, чем завершить свою работу после нажатия <Enter>, считывает в строковую переменную str символ новой строки "\n"! Из-за этой "особенности" функция strcmp(str, bands[i]) работала некорректно - как я не бился, она "в упор" не видела очевидные совпадения введённой строки с элементом строкового массива... И вот теперь я знаю, в чём дело. Но как это исправить? В Интернете нашлось несколько различных howto на тему "как выкинуть ненужный символ новой строки из переменной". Однако все эти способы показались мне чресчур сложными для подобной задачи. После размышлений, я написал следующее:
// с функцией fgets проблема...
fgets(str, 100, stdin);
// ...она передаёт в символьную переменную str, кроме "обычных" символов,
// символ новой строки (\n). Из-за этого операции со str выполняются некорректно.
// Поэтому, с помощью простого цикла, мы находим символ конца строки
// и заменяем его на нулевой символ.
for(i = 0; i < strlen(str); i++) if(str[i] == '\n') str[i] = 0; После этого программа стала работать корректно.
В процессе изучения языка C++ я часто сталкиваюсь с различными проблемами, которые пытаюсь решить. Иногда это бывает очень просто, а иногда приходится потратить немало времени. В большинстве случаев, больше всего времени уходит на то, чтобы понять, где же я ошибся.
А вообще, на поиск и исправление ошибок может уйти время даже большее, чем на написание самой программы.
22 мая 2010 г.
Стихи на тему "грозы в начале мая"
Сегодня днём взял книгу, лёг на диван и... уснул. И вот, я один на асфальтированной (!) дороге в густом лесу, ночью. Вокруг вековые деревья огромной высоты, у меня в руках волшебная палочка и я никак не могу вспомнить заклинание, вызывающее свет... Проснулся. Из открытой форточки в лицо струится поток свежего воздуха с запахами мокрой травы, листвы, древесины, земли и асфальта. Пока я спал, в городе N^2 прошёл дождь. Кажется, я слышал несколько раскатов грома где-то вдалеке. Ну что же, давно пора - май уже скоро закончится, а ещё не было ни одной грозы.
Кстати, вот стихи на тему "грозы в начале мая", которые я написал уже давно, и, наверное, это совсем "детские" стихи. Точнее, стихи для детей. Однако, например, я до сих пор люблю стихи многих "детских" авторов, которыми зачитывался много-много лет назад. Возможно, эти стихи, написанные мной, будут интересны некоторым читателям этого блога.
http://poptsov-artyom.narod.ru/texts/2007/2007-05-16.html
Кстати, вот стихи на тему "грозы в начале мая", которые я написал уже давно, и, наверное, это совсем "детские" стихи. Точнее, стихи для детей. Однако, например, я до сих пор люблю стихи многих "детских" авторов, которыми зачитывался много-много лет назад. Возможно, эти стихи, написанные мной, будут интересны некоторым читателям этого блога.
http://poptsov-artyom.narod.ru/texts/2007/2007-05-16.html
21 мая 2010 г.
Размышления о "семантическом рабочем столе"
Недавно у меня были неполадки с компьютером (см. предыдущий пост) - при загрузке отказала одна из планок ОЗУ. Оперативная память оказалась заполнена на ~80-90%, ещё столько же сброшено в swap. В связи с активным swapping'ом нагрузка на процессор - ~100%. Таким образом стало ясно, что мне недостаточно 512Мб для обычной работы за компьютером. Недостаточно, чтобы держать запущенными все приложения и сервисы, которые запущены обычно.
Простой запуск системного монитора выявил приложения, которые занимают больше всего памяти в ОЗУ. Ими оказались броузер Firefox с более чем 10 открытыми вкладками (>100Мб), музыкальный проигрыватель Amarok (>50Мб), и сервис Nepomuk, обеспечивающий так называемый "семантический рабочий стол" (>250Мб).
Выключил сервис Nepomuk, после этого стало возможным нормально работать. Впоследствии оказалось (опять же, см. предыдущий пост), что обе планки ОЗУ работают, по крайней мере, пока - уже несколько раз перезагружал компьютер, ещё ни одна не отказала. И можно снова включить сервис Nepomuk...
Однако резкое уменьшение оперативной памяти оказалось отличным поводом задуматься над тем, а нужен ли мне этот сервис? Nepomuk отхватывает под себя более 200 мегабайт в оперативной памяти, и его база данных разраслась уже до более чем 600 мегабайт. Он индексирует файлы, я проставляю "теги" для файлов и папок... Вроде бы, всё нормально. Но за то время, пока работаю в интегрированной среде KDE - часто ли я пользовался "интеллектуальным" поиском, основанным на содержимом файлов, моих тегах и рейтингах?.. Я и так знаю, что и где у меня лежит на жёстких дисках - по крайней мере, те данные, к которым я часто обращаюсь.
Проблемы с поиском нужной информации, в первую очередь, связаны с тем, что эта информация плохо организована. Несомненно, количество информации так же влияет на время и успешность поиска - чем больше информации, тем сложнее её организовать, и "выловить" из неё то, что нужно в данный момент. Ярким примером может служить всё более разрастающийся Интернет. Но, если взять в привычку "по-умолчанию" раскладывать всё на своё место, то увеличение количества информации не будет так сильно сказываться на успешности её поиска.
Ну, и что же я жду от "семантического рабочего стола"? Отвечаю: во-первых, это практическая польза. Это помощь в организации данных, накопленных за всё время. Автоматическое архивирование и/или сжатие (с согласия пользователя, т. е. меня) редко используемых документов. Гибкая система настроек, возможность программировать поведение системы при определённых событиях. Работа сервиса не только в пределах пользовательских данных, но и тесная интеграция с системой, слежение за системными файлами и данными, взаимодействие с системами управления пакетами и исходными кодами ПО, подобными системе портежей в ОС Gentoo и т. д.
Хотя необходимо заметить, что "семантические" технологии находятся в начальной стадии развития, и, возможно, я просто сейчас слишком многого жду от них. Ну что же, попробую сделать Nepomuk полезным для себя.
Простой запуск системного монитора выявил приложения, которые занимают больше всего памяти в ОЗУ. Ими оказались броузер Firefox с более чем 10 открытыми вкладками (>100Мб), музыкальный проигрыватель Amarok (>50Мб), и сервис Nepomuk, обеспечивающий так называемый "семантический рабочий стол" (>250Мб).
Выключил сервис Nepomuk, после этого стало возможным нормально работать. Впоследствии оказалось (опять же, см. предыдущий пост), что обе планки ОЗУ работают, по крайней мере, пока - уже несколько раз перезагружал компьютер, ещё ни одна не отказала. И можно снова включить сервис Nepomuk...
Однако резкое уменьшение оперативной памяти оказалось отличным поводом задуматься над тем, а нужен ли мне этот сервис? Nepomuk отхватывает под себя более 200 мегабайт в оперативной памяти, и его база данных разраслась уже до более чем 600 мегабайт. Он индексирует файлы, я проставляю "теги" для файлов и папок... Вроде бы, всё нормально. Но за то время, пока работаю в интегрированной среде KDE - часто ли я пользовался "интеллектуальным" поиском, основанным на содержимом файлов, моих тегах и рейтингах?.. Я и так знаю, что и где у меня лежит на жёстких дисках - по крайней мере, те данные, к которым я часто обращаюсь.
Проблемы с поиском нужной информации, в первую очередь, связаны с тем, что эта информация плохо организована. Несомненно, количество информации так же влияет на время и успешность поиска - чем больше информации, тем сложнее её организовать, и "выловить" из неё то, что нужно в данный момент. Ярким примером может служить всё более разрастающийся Интернет. Но, если взять в привычку "по-умолчанию" раскладывать всё на своё место, то увеличение количества информации не будет так сильно сказываться на успешности её поиска.
Ну, и что же я жду от "семантического рабочего стола"? Отвечаю: во-первых, это практическая польза. Это помощь в организации данных, накопленных за всё время. Автоматическое архивирование и/или сжатие (с согласия пользователя, т. е. меня) редко используемых документов. Гибкая система настроек, возможность программировать поведение системы при определённых событиях. Работа сервиса не только в пределах пользовательских данных, но и тесная интеграция с системой, слежение за системными файлами и данными, взаимодействие с системами управления пакетами и исходными кодами ПО, подобными системе портежей в ОС Gentoo и т. д.
Хотя необходимо заметить, что "семантические" технологии находятся в начальной стадии развития, и, возможно, я просто сейчас слишком многого жду от них. Ну что же, попробую сделать Nepomuk полезным для себя.
Подписаться на:
Сообщения (Atom)