Эволюция шифров и их стойкость

Сферы применения

Криптография как наука возникла еще в 4000 году до нашей эры в Египте. Тогда не существовало эффективных средств передачи информации на дальние расстояния. Чтоб послать сообщение из одного места в другое требовалось снарядить гонца, накормить лошадь. Если расстояние достаточно большое необходимо было менять коней. Это было очень дорогое удовольствие, которое могли позволить лишь немногие.

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

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

Административно-коммуникативные функции

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

Государство, как общественный институт, имеет свои атрибуты на всех уровнях власти. Благодаря ним упрощается управленческая деятельность. Для послов — установлены специальные верительные грамоты, для жителей страны — документы на право собственности недвижимостью, для водителей транспортных средств — водительское удостоверение и так далее…

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

Империя Александра Македонского

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

Исключение великим полководцем было сделано всего один раз. Однажды, будучи с солдатами очень далеко от родной Греции, он разрешил написать письма родным. Конечно, все они подверглись жесткой цензуре и от недовольных быстро избавились.

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

Римская империя

Наиболее известным и самым ненадежным является шифр Цезаря. Это классический моноалфавитный шифр однобуквенной замены, где каждой букве открытого текста ставится в соответствие буква закрытого текста. В его шифре буквы циклически сдвигались на n позиций в сторону конца алфавита.

Цезарь использовал цифру 3 в качестве ключа. С точки зрения безопасности, у него были проблемы с головой. Такого рода, «зашифрованные» сообщения разгадываются с использованием одной страницы блокнота. Существуют схожие и такие же ненадежные варианты: Атбаш, Rot-13, Rot-n и так далее.

Rot-13 — это шифр Цезаря со значением ключа n=13. В Атбаше буквы отражаются относительно средней буквы алфавита. Он изначально предназначен для алфавитов с парным значением символов. Для алфавитов с непарным количеством символов средняя буква не меняется. Указанный факт делает его ещё более незащищенным.

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

Кодировка Rot-13
Работа с кодировкой «ROT-13» в Python

Будьте внимательны, кодировщик Rot-13 в языке программирования Python работает только с ASCII строками. Как видите, со строкой содержащей один русский символ «Ш», он возвращает ошибку. Зная кодировку Unicode, нетрудно написать свой кодировщик поддерживающий символы других национальных алфавитов. Все стандарты Unicode описаны в RFC 5198.

Читайте также: Работа с кодировками в Python

Арабские криптографы

Первую серьезную попытку описать процесс расшифровки зашифрованных сообщений совершил арабский ученый криптограф Аль-Кинди в IX веке. В его книге «Трактат о дешифровке криптографических сообщений» впервые описано применение частотного анализа. Он создал таблицу относительной частоты появления букв в арабских словах. Благодаря его исследованиям арабские криптографы легко разгадывали все шифры однобуквенной замены. Для расшифровки сообщений подсчитывалась частота встречи букв в зашифрованых сообщениях. Частоты появления букв сравнивались с частотами появления букв в словаре. В результате, текст закрытого сообщения становился заметным.

Cube Mixer
Относительная частота букв в словах приложения Cube Mixer

На рисунке выше, изображена относительная частота появления букв в английских словах первой версии мобильного приложения Cube Mixer от CubbyDev.com. Как вы вы видите, чаще всего в английских словах встречаются гласные «A» и «E». Собственно, опыт арабов может быть полезен в отыскании фраз этой словесной головоломки.

Cube Mixer screenshot
Cube Mixer

Алгоритм эффективного решения данной головоломки с использованием метода Аль-Кинди:

  1. Отыщите куб и выберите грань содержащую букву из списка наиболее вероятных букв, подсветите его;
  2. Крутите кубы находящиеся рядом выбирая буквы в порядке спадания частоты и подсвечивайте их продолжая цепочку;
  3. Если выстроить слово не удалось вернитесь на первый шаг.

Средневековая Европа

В средневековой Европе шифры использовались более чаще. В отличии от древнего Египта, Греции и Римской империи шифрами пользовались не только высшая знать, военные и церковное духовенство. Это связано с распространением знания среди большего количества людей. Весомую роль сыграли католические ордена.

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

Количество людей и городов увеличивалось и знания начали расходится. Людям стало проще обходить католические табу посредством использования шифров. Возникали тайные общества которые посвящали своих единомышленников во многие секреты и тайны доступные только для правителей.

Неправительственные организации

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

В других случаях, тайны только результат стремления одной социальной группы обособится от всего общества. Для них характерна неприкрытая лесть к своим членам и надутый снобизм по отношению ко всему оставшемуся обществу. Движущий мотив данных организаций — личное тщеславие лидера и стремление к превосходству. История знает множество таких случаев, но они ни к чему хорошему не привели. Эксплуатация низменных животных чувств заканчивается крахом любого общества, и что самое печальное, иногда крахом цивилизации…

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

Философы просветители и становление первой республики

Франция во времена первой республики имела достаточное количество образованных людей. Среди них такие люди как: Пьер Гаспар Шомет, Жак-Рэне Эбер, Дантон, Максимильян Робеспьер и другие. Все они были очень образованные гуманитарии и стояли у истоков первой республики, использовали достижения криптографии. Но не один алгоритм не способен скрыть человеческую природу. Маниакальная жажда власти скрывалась за иллюзорными утопическими лозунгами: «Cвобода! Равенство! Братство!».

Они получили власть и одновременно стали её жертвами. Тем не менее, были и те кому удалось продолжить свой жизненный путь, несмотря на изменчивость того времени. Таким был знакомый Робеспьера, Лазар Карно (Lazare Carnot), входивший вместе с ним и Фуше в литературное общество поэтов «Розати». Кроме всего, Карно был ещё и прекрасным математиком. Холодный рассудок и страсть к науке позволили ему выжить и оставить после себя не менее знаменитого сына Сади Карно. В честь него назван термин в физике «цикл Карно».

Карта карно
Один из методов минимизации булевых функций

Французская фамилия «Carnot» (буква «т» не читается) видоизменилась в английскую созвучную ей Carnaugh. Через столетие она прославила себя ещё раз. Морис Карно создал карты Карно упрощающие булевы функции. Все люди закончившие ИТ специальности о них слышали и использовали. Но не все знают что он запатентовал импульсное кодирование (pulse code modulation). Его достижением является формат аудио записи PCM.

Декабристы и большевики

События во Франции сказалось и на политической ситуации в России. Возникли тайные общества декабристов. Они разделяли взгляды перечисленных французских мыслителей. Большинство из них ждала та же судьба.

В тюремных камерах, они применяли тюремный шифр. В книжке Шахановой М.Е. «Современные технологии информационной безопасности. Учебно-методический комплекс» написано о князе Одоевском, который не смог установить связь с декабристами по той причине, что не помнил порядок букв в сокращенном алфавите. Дело в том, что сокращенный вариант алфавита 5х5 не имеет следующих букв «Ё», «Й», «Х», «Ч», «Щ», «Ь», «Ъ», «Э».

Через некоторое время возникли народовольцы, анархисты и прочие. А затем пришли большевики… И также использовали шифрование для сокрытия своей деятельности.

Советские диссиденты и тюремный шифр

Советские диссиденты перестукивались в камерах. Ниже приведена полная таблица для русского алфавита. Что бы передать букву «Я» медленно стучали 6 раз, и затем быстро 3 раза. Передать предложение которое содержит много букв «Я» и остаться незамеченным было достаточно сложно.

123456
1АБВГДЕ
2ЁЖЗИЙК
3ЛМНОПР
4СТУФХЦ
5ЧШЩЪЫЬ
6ЭЮЯ

Поэтому алфавит иногда сокращали до следующих размеров 5х6, 5х5. Для передачи особо длинных сообщений пропускали некоторые гласные. Данный шифр получил название тюремного.

Абсолютно стойкие шифры гаммирования и их недостатки

Абсолютная стойкость доказана только для симметричного шифрования Клодом-Шенноном в работе «Математическая теория криптографии», которая опубликована после Второй мировой войны. Согласно ней для сокрытия информации предложено использовать операцию «ИСКЛЮЧАЮЩЕЕ ИЛИ», или xor. Каждой букве отрытого сообщения соответствует буква последовательности гаммы. Основные требования для достижения абсолютной стойкости:

Веб приложение для xor-шифрования
XORcist
  1. Ключ должен использоваться всего один раз;
  2. Длинна ключа не должна быть короче количества букв в сообщении;
  3. Ключ должен быть случайной последовательностью букв, цифр, знаков;
  4. После расшифровки полученный ключ должен уничтожаться.

Основные недостатки:

  1. Для длинных сообщений нужно использовать длинную гамму (неинформативная гамма длинною в сообщение давала избыточность равную 100%);
  2. Пароли хранились на странице блокнота из-за чего он назван методом одноразовых блокнотов;
  3. Обмен паролей на расстояние требует наличие безопасного канала связи.

Основное преимущество простота реализации. Можете попробовать XORcist. XORcist реализует xor-шифрование онлайн: https://apps.cubbydev.com/web/XORcist.html

Асиметричное шифрование и государство нашего времени

gnupg app
Приложение для конфиденциальной переписки

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

Первую широкодоступную программу реализующую данную концепцию написал Филипп Циммерман. За что был подвергнут давлению со стороны властей. Ему и еще некоторым другим энтузиастам инкриминировали нарушение регуляторного акта по экспорту вооружений «The Arms Export Control Act and the International Traffic in Arms Regulations». На суде он отрицал свою причастность к передаче своей программы заграницу…

Впрочем, его спас другой прецедент. Всем известный процесс Бернштейн против Департамента юстиции США. В своей защите он ссылался на первую поправку в конституции. Согласно которой, государство не имеет права вмешиваться в свободу прессы. Исходный код был напечатан в их статьях. Таким образом Бернштейна и Циммермана оправдали. И сейчас мы имеем такую прекрасную вещь как ЭЦП (электронно-цифровая подпись).

e-governance
Электронные государственные услуги

С её помощью можно однозначно идентифицировать гражданина, проголосовать на выборах (в некоторых странах), дистанционно отправить налоговую отчетность. Но самое главное преимущество, безусловно, безопасный Интернет. Протокол «https» не дает мошенникам возможность подмены информации «атакой человек по середине».

Механизм асимметричного шифрования и его надежность

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

Тем не менее, их существование принимается как гипотеза. Одно ясно наверняка, если найдется счастливчик который ускорит процесс расшифровки данного шифра, то это изменит мир ИТ. Поэтому специалисты рекомендуют устанавливать небольшой срок действия ЭЦП (не превышающий 10 лет). Именно поэтому, срок действия современных удостоверений личности не превышает 10 лет.

Выводы

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

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

Решение проблем с загрузкой ОС

Вопросы рассмотренные здесь касаются разных способов создания загрузочных накопителей: из-под Linux, Windows и MacOS. В этой статье собраны 13 возможных проблем и пути их решения.

  1. ОС не грузится с моего устройства
  2. После выбора ОС из загрузочного меню все остановилось
  3. Моя ОС не поддерживается средствами создания загрузочных накопителей
  4. Как найти сообщества пользователей моего дистрибутива?
  5. Возможно ли создание персонального загрузочного образа ОС?
  6. Можно ли загрузить содержимое livecd/liveusb полностью в память?
  7. Livecd/liveusb ОС загружаются слишком медленно
  8. Моего аппаратного обеспечения достаточно для нормального выполнения программ, но общая производительность плохая
  9. Я хочу ускорить загрузку ОС любым возможным путем, чего бы мне это не стоило
  10. Какие файловые системы поддерживаются загрузчиками по умолчанию?
  11. Восстановление нормальной загрузки Windows систем
  12. Загрузка MacOS и других ОС на одном носителе
  13. GPT против MBR, какой стиль разбиения партиций выбрать?

ОС не грузится с моего устройства

Если вы не видите загрузочное меню, значит попробуйте поменять порядок загрузки устройств в BIOS. Удерживайте во время загрузки F2 (на некоторых ноутбуках Lenovo Fn + F2), или клавишу Delete, чтоб войти в меню BIOS и выберите вкладку Boot. Поставьте первым в очереди устройство из которого хотите загрузится.

На некоторых машинах можно выбрать порядок загрузки не заходя в BIOS. Для ноутбуков Toshiba удерживайте F12 во время загрузки. Для ноутбуков Lenovo удерживайте Fn + F12. После всего выберите нужное устройство.

Если после этого, устройства все ещё не видно, очень вероятно, что ваша машина не поддерживает загрузку с современных GPT-партиций. Бывает и обратное, когда на новых машинах отключено CSM (модуль поддержки совместимости) и загрузка с MBR-партиций невозможна. На новых UEFI, рекомендуется включить CSM, ну и конечно, выбрать UEFI и Legacy.

UEFI AND LEGACY OPTION
AMI BIOS CSM

Другой причиной могут быть «плохие сектора». Для их исправления воспользуйтесь утилитой fsck с опцией «-r» в Linux, или командой chkdisk в Windows.

disk checking
Работа fsck

После выбора ОС из загрузочного меню все остановилось

Бывает много случаев после которых загрузочный процесс останавливается. Это достаточно сложный вопрос на который нельзя дать ответ, если вы не покажете последнее системное сообщение. Наиболее вероятно, что причиной неисправности является неправильно заданный root параметр. Например, если bash оболочка не найдет действительный root раздел, вы увидите следующее сообщение:

/bin/sh: can’t access tty; job control turned off

Рассмотренное сообщение может означать, что командный интерпретатор не может получить доступ к символьному TTY устройству, из-за неправильно заданного root параметра. Вы можете, вручную отредактировать выделенную в загрузчике запись нажатием клавиши «e» для Grub, или «TAB» для Syslinux.

boot menu entry
Grub 2 меню

Задайте правильную root партицию и загрузитесь с принятыми опциями нажатием F10 для Grub, или Enter для Syslinux. Если все прошло успешно, тогда вам следует сделать эту запись постоянной изменив соответствующий конфигурационный файл вашего загрузчика.

Kernel panic not syncing
Паника ядра

Если вы видите сообщение о панике ядра (kernel panic), то скорее всего корень проблемы заключается в специфике вашей аппаратуры. Если вы оверклокер и «разгоняете» вашу ласточку, вернитесь в нормальный режим работы применив настройки по умолчанию. Если паника ядра продолжается, значит проблема в ядре или драйверах. Проверьте логи работы ядра, диагностические сообщения, особое внимание уделите предупреждениям (Warning). Обновите версию ядра и программ.

Моя ОС не поддерживается средствами создания загрузочных накопителей

Для примера возьмем UNetbootin, в списке поддерживаемых ОС вы не найдете все дистрибутивы Linux. Это не значит, что большинство из них не поддерживается. Просто их тысячи и всех их не перечислить.

UNetbootin main window
Выбор дистрибутивов в UNetbootin

Даже обычный человек может шаг за шагом создать свой используя руководство Linux From Scratch в качестве основы. Но одно дело создать, а другое дело обеспечивать постоянной поддержкой безопасности и обновлениями.

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

Как найти сообщество пользователей моего дистрибутива?

Большинство дистрибутивов Linux, кроме секретных военных или дистрибутива Цикады 3301, размещены на сайте Distrowatch. На этом сайте, под описанием выбранной ОС вы сможете найти ссылку на соответствующий пользовательский форум.

Сообщество пользователей дистрибутива Slax
Distrowatch — Короткая информация

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

Возможно ли создание персонального загрузочного образа ОС?

Да запросто! Ubuntu и его производные, такие как Mint, позволяют создать персональный пользовательский образ ОС. Они позволяют включить ваш набор программ, скриптов, настроек, пользовательские репозитории в iso образы.

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

За все дистрибутивы не скажу, но в некоторых есть подобные вещи. В Arch Linux это называется iso ремастерингом и всё делается ручками. Для Open Suse создан KIWI Toolset, для Fedora приложение livemedia-creator… Список можно продолжать, но это выходит за рамки нашей темы.

Можно ли загрузить содержимое livecd/liveusb полностью в память?

Да, конечно! Все что вам надо, передать «toram» параметр через конфигурационные файлы вашего загрузчика. Операции ввода-вывода в память происходят значительно быстрее, чем на внешний накопитель. Это хороший выбор, но вам необходимо иметь достаточно пространства для размещения его содержимого в памяти. Если для нормальной работы требуется 4 Гб памяти, то для нормальной работы в режиме livecd/liveusb с опцией toram требуется 8 Гб.

Livecd/liveusb ОС загружаются слишком медленно

Live версии каждой ОС, по большей части, загружаются в память, а иногда и полностью в память ОЗУ с опцией «toram». Как было сказано в предыдущем вопросе, эти операции быстрее, но необходимо обладать достаточным количеством RAM памяти. Иначе, получится совсем наоборот.

Существуют специализированные карманные дистрибутивы, предназначенные преимущественно для загрузки из флеш накопителей такие как, Slax и Porteus. Вы можете их найти на Distrowatch. Они очень хорошо подходят для таких целей, поскольку обладают возможностью горячего подключения пакетов. Каждое приложение предоставляется в виде сжатого модуля, которого можно отключить при необходимости. Это позволяет эффективно управлять ресурсами памяти.

Моего аппаратного обеспечения достаточно для нормального выполнения программ, но общая производительность плохая

Если вы скачали и установили не тот драйвер и все вроде работает нормально, то не спешите радоваться. Ядро Линукс периодически делает опрос присутствующей аппаратуры. Если драйвер не тот, тогда генерируется диагностические сообщения и засоряются логи. Через неделю использования размер лог файла может быть около 1 Гб. При всем этом, как правило, система дико медлит, проверьте вывод команды top.

cpu usage on lenovo laptop
Менеджер процессов top

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

Я хочу ускорить загрузку ОС любым возможным путем, чего бы мне это не стоило

Гибкость ядра Linux не имеет границ. Вы можете сами собрать всё из отредактированного вами исходного кода. Конечно, это требует определенной степени вовлеченности. Все это отбирает огромное количество человеко-часов. Не занимайтесь этим, только если это не приносит вам дохода.

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

Ядро Linux монолитное, оворя человеческим языком, оно включает поддержку даже тех вещей, которые вам не нужны. Построить свое ядро можно и не меняя исходный код, достаточно просто не включить в рецепт сборки излишний функционал. Или вынести его за пределы ядра в виде модуля (.ko файла). Этот способ требует полного знания своего железа.

Последний способ, заключается в передаче специальных опций (смотреть Как улучшить производительность Linux отключив патчи для Meltdown и Spectre). Ничего компилировать не надо, но будьте осторожны, это повышает риски в безопасности.

Какие файловые системы поддерживаются загрузчиками по умолчанию?

Загрузчик Windows, разумеется, поддерживает только файловые системы корпорации Microsoft. Было время помню, ещё в семерке, баловался я с bcdedit добавил китайский загрузчик grub4dos и он грузил Slax (в простонародье «Кеды»), Knoppix и другие легковесные дистрибутивы из NTFS партиций. Собственно, хоть название его и старое, но с NTFS он работал исправно.

Универсальные загрузчики типа Grub 2 (старый Grub Legacy немного примитивней) имеют модульную структуру, как бутерброд. Поддержку других файловых систем в нем можно добавить расширением. По умолчанию поддерживаются ext2, ext3, ext4. Последние две надежные журналируемые ФС, которые хранят данные об операциях записи в журнале. Если утилита os-probe, входящая в состав пакета Grub 2, находит установленную Windows, то добавляет запись в grub.cfg. Grub 2 передает управление другому загрузчику при помощи инструкции «chainloader».

Восстановление нормальной загрузки Windows систем

Алгоритм прост:

  1. Возьмите флеш накопитель с которого поставили Windows, если нет создайте его и перезагрузите компьютер;
  2. Войдите в режим восстановления;
  3. Воспользуйтесь утилитой bootrec, система сделает все за вас.

Загрузка MacOS и других ОС на одном носителе

Используйте загрузчик Clover.

GPT против MBR, какой стиль разбиения партиций выбрать?

Сразу скажу, что на машинах без UEFI используют только MBR. Для современных машин MBR — это дикость. Да, вы можете работать с такой разбивкой, если не планируете использовать много ОС. Старый подход ограничивает возможности UEFI деля разделы на первичные (не более 4) и логические. Когда не было GPT, имел значения порядок установки ОС. GPT существенно упростил этот процесс. С точки зрения отказоустойчивости, это самый надежный способ.

Создание загрузочной флешки в Linux

Средства создания загрузочных флеш накопителей делают их загрузочными посредством использования загрузчика и содержимого *.iso образа выбранного дистрибутива. Короткий, список процедур которые они выполняют:

  • форматирование устройства хранения данных (если соответствующая опция задана);
  • установка загрузочного флага на выбранном устройстве, таким образом чтоб оно «сообщало» ПК или ноутбуку после перезагрузки: «Эй, я загрузочный!» (но этого ещё не достаточно для загрузки);
  • запись загрузчика;
  • извлечение содержимого *.iso файла на загрузочный накопитель;
  • корректировка загрузочных опций, таким образом, чтоб они указывали на соответствующее ядро (как правило, оно называется vmlinuz, или vmlinux) и файл который ответственен за начальную инициализацию вашей ОС (как правило, initrd.gz, или initrd.img, или что-то в этом роде).

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

Deepin boot maker

Наиболее простой двух-шаговый метод создания загрузочного устройства – это «deepin boot maker». Это приложение входит в состав прекрасного китайского дистрибутива – Deepin OS. После установки которого, вы можете запустить его «из коробки» (он включен по умолчанию в этот дистрибутив).

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

Инсталляция на других ОС

В других дистрибутивах вам нужно вручную установить соответствующий пакет, для примера в Arch Linux ввести в терминал:

sudo pacman -Sy deepin-boot-maker

В стандартных репозиториях программ Ubuntu 18.04 Bionic Beaver, вы этот пакет не найдете. Можно добавить сторонний пользовательский репозиторий (PPA), или скачать вручную с официального зеркала – сайта Шеньчженьского технологического университета Китая:

https://ftp.sjtu.edu.cn/deepin/pool/main/d/deepin-boot-maker/

Но перед установкой убедитесь что удовлетворены другие зависимости. Для распаковки iso образов требуется наличие пакета p7zip-full. А для работы с mbr партициями необходим mtools. Если их нет:

sudo apt-get install p7zip-full mtools

Найдите поддерживаемую вашим ядром Linux аппаратную архитектуру при помощи uname:

[CubbyDev@ nix]$ uname —all
Linux NIX 4.20.8-arch1-1-ARCH #1 SMP PREEMPT Wed Feb 13 00:06:58 UTC 2019 x86_64 GNU/Linux
[CubbyDev@ nix]$

Если в выводе uname вы видите «x86_64» или «amd64», тогда используйте 64-битную версию. Скачайте соответствующий пакет и выполните:

sudo dpkg -i deepin-boot-maker_2.0.4.9-1_amd64.deb

Если uname выдало «x86», «i386», «i486», «i586» или «i686», тогда используйте 32-битную версию. Скачайте пакет под нужную архитектуру и установите:

sudo dpkg -i deepin-boot-maker_2.0.4.9-1_i386.deb

Будьте внимательны, вместо версии пакета 2.0.4.9-1 используйте версию скачанного вами файла.

Делаем флешку загрузочной

После завершения процесса установки, вы можете запустить рассматриваемое приложение:

deepin distro selection
Linux iso image selection

Как вы видите, пакет прекрасно переведен на разные языки. Впрочем, и так все интуитивно понятно.

Шаг №1:

Кликаем по «Выберите файл образа ISO», или перетаскиваем файл с необходимым образом операционной системы. Если вы не уверенны в собственном выборе можете изменить выбор и кликнуть далее.

Installation step №1
ubuntu mate 18.04.1 amd64
шаг №1
Русский перевод интерфейса шаг №1
Шаг №2:

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

Step 2: disk selection
Накопитель с названием Multiboot
Шаг 2: выбор накопителя
Накопитель с названием DEEPINOS

Как было сказано до этого, все приложения Deepin OS имеют уникальный интерфейс. Просто посмотрите на индикатор прогресса внизу. Он выполнен в виде анимированного круга заполняемого волнующеюся водою, пузырящейся несколькими пузырьками. Согласитесь, интерфейс достаточно прилизанный, в отличии от устаревшей линейки прогресса.

deepin boot maker status
Индикатор прогресса 63%
статус выполнения задания
Индикатор прогресса 69%

В конце всего, если все прошло без ошибок, вы увидите следующие сообщения на иллюстрации внизу.

successfully completed
Загрузочный накопитель с Ubuntu 18.04
создание загрузочной флешки
Загрузочный накопитель с Deepin OS

В самом конце на месте анимированного круга появляется белая галочка на зеленом фоне. Было успешно создано два загрузочных накопителя: один с Ubuntu Bionic Beaver и второй с Deepin OS. Стоит отметить высокое внимание китайских разработчиков к деталям. При выборе темной темы цвет шрифта автоматически меняется на контрастирующий белый.

Преимущества:
  1. Простое в использовании диалоговое приложение;
  2. Привлекательный графический интерфейс;
  3. Прекрасно подходит для тех, кто не любит множество сложных опций;
  4. Поддержка большинства дистрибутивов OS Linux (проверенно на Ubuntu 18.04, Mint 19 и других производных дистрибутивах);
  5. Приложение работает одинаково хорошо и в Windows 10 и в Macos Mojave (проверено на Хакинтоше).*

Deepin boot maker для вашего Macos, или Windows

Недостатки:
  1. Отсутствие поддержки множественной загрузки;
  2. После создания загрузочного устройства, оно называет его «DEEPINOS», даже если используется другие дистрибутивы;
  3. Не предоставляется выбор между GPT или MBR партициями (mtools работает только со старыми MBR партициями).

Выводы

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

Последний недостаток менее значимый, так как все современные UEFI BIOS поддерживают загрузку со старых mbr партиций при помощи включенного модуля поддержки CSM (Compatibility Support Module). То есть ваша флешка будет загрузочной по умолчанию как на старых машинах, так и на самых новых.

UNetbootin

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

UNetbootin main window
Выбор дистрибутивов в UNetbootin

Не ставьте галку напротив «show all drives», чтоб случайно не перепутать внутренний и внешний накопители.

Если вы не увидели вашего дистрибутива в списке, не расстраивайтесь, абсолютное большинство дистрибутивов имеют схожие конфигурационные настройки.

UNetbootin custom image
Заданный вручную дистрибутив

Заданный вручную дистрибутив прекрасно распознается, и более того, данное средство позволяет задать размер файла сохранения на вашей флешке (только для Ubuntu).

Инсталляция

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

sudo add-apt-repository ppa:gezakovacs/ppa && sudo apt-get update && sudo apt-get install unetbootin

Имеется поддержка Windows и MacOS. Если вы, счастливый обладатель другого Linux дистрибутива и желаете попробовать данный пакет, вы можете скачать его по ссылке внизу.

https://unetbootin.github.io/

Делаем флешку загрузочной

Собственно, её создание при помощи UNetbootin ничем не отличается от Deepin boot maker, кроме строгого олдскульного и немного усложненного опциями интерфейса. Забэкапте важные данные, выберите дистрибутив и поехали…

UNetbootin progress
UNetbootin — статус выполнения
Преимущества:
  1. Автоматическое скачивание из официальных источников;
  2. Поддерживает задание некоторых специфических опций, таких как размер файла для сохранения (только для Убунты);
  3. Кроссплатформенность (работает под Win/Mac/Linux);
  4. Статус выполнения расписан во всех подробностях.
Недостатки:
  1. Отсутствие мультизагрузагрузочной опции;
  2. Не предоставляется выбор между GPT или MBR партициями.

Выводы

Существенных недостатков нет. Поддерживает абсолютное большинство дистрибутивов Linux. Работает несколько медленнее Deepin boot maker (1.5 минутная разница). Больше опций, но не настолько много как в Rufus.

Для любителей мультизагрузки

Способ для Ubuntu, Mint и Debian

Если вы все же, хотите создать мультизагрузочную флешку из Linux без относительных заморочек. Добавьте следующий репозиторий и asc ключ разработчика в список доверенных ключей чтоб скачать пакет MultiSystem.

sudo apt-add-repository ‘deb http://liveusb.info/multisystem/depot all main’ && wget -q -O -http://liveusb.info/multisystem/depot/multisystem.asc | sudo apt-key add — && sudo apt-get update && sudo apt-get install multisystem && rm multisystem.asc

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

Решение для Ubuntu, Debian и Mint
Выбор загрузочного диска в multisystem

Перетащите файл и выберите его порядок в очереди.

Multiboot
Добавление дистрибутива

Способ для остальных дистрибутивов Linux

Используйте Yumi из-под Wine, но помните, устройство должно быть уже отформатировано в одну из следующих файловых систем: ntfs, fat16 или fat32. И помечено как загрузочное. Через эмулятор Windows программ Wine это сделать нельзя, увы.

Общие выводы

Под Linux меньше средств создания загрузочных накопителей чем под Windows. Большинство из них обладает достаточным функционалом. Не одно из рассмотренных средств не позволяет выбрать тип партиции GPT/MBR. Это не критично, но желательно если хотите иметь мультизагрузочную флешку с Windows 10 + Linux на борту.

Собственно, все это можно сделать вручную, но это не практично и отнимает много времени. Писать скрипты ради этого лень, ведь из под Windows можно воспользоваться Rufus, или Yumi. Для истинных ценителей свободы Linux, скажу что один энтузиаст (Isaac Schemm) уже это сделал и разместил на github, за что ему большое спасибо.

https://github.com/IsaacSchemm/MultiCD

При помощи этого средства создайте свой iso файл со многими ОС. Воспользуйтесь UNetbootin для создания загрузочной флешки на его основе.

Смотрите также Решение проблем с загрузкой ОС

Исторический обзор управления оперативной памятью в ОС

Вступление

Были времена когда люди радовались каждому байту памяти. Программисты трепетно ужимали свои программы под ограниченную память. Никто и помыслить не мог, что однажды мир изменится. Сейчас фото с камеры вашего смартфона весит больше чем содержимое дискеты. Однако, это было прекрасное время когда продвинутые пользователи делились хитростями такими как: XOR-обмен содержимого двух переменных без использования других переменных.

Допустим, у нас есть две переменные, которые мы представим в двоичной системе исчисления: A=1010 (10 — в десятичной системе) и B=0100 (4 — в десятичной системе), обменяем их содержимое при помощи булевой операции «ИСКЛЮЧАЮЩЕГО ИЛИ».

  • A = A XOR B = 1010 XOR 0100 = 1110
  • B = A XOR B = 1110 XOR 0100 = 1010
  • A = A XOR B = 1110 XOR 1010 = 0100

В результате, A=0100 и B=1010. Сейчас это звучит странно, но таким способом можно экономить оперативную память. Этот способ разделяет ограниченные ресурсы во времени и позволяет обойтись меньшим количеством ресурсов. Основной недостаток данного подхода — время требуемое на выполнение операций.

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

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

  • Опция «-O1» (тоже самое что «-O») — компилятор пытается уменьшить размер кода и время выполнения программы, без существенного влияния на скорость компиляции.
  • Опция «-O2» — не ищет компромиса между местом и скоростью выполнения.
  • И наконец, самая дикая оптимизация — «-O3».

От реле, вакуумных ламп и транзисторов к ЦП

Первые не механические вычислительные машины использовали реле в качестве базовых элементов. Такой была машина Z1 созданная в фашистской Германии Конрадом Цузе в 1938 году. Машины которые использовали электронные реле назывались машинами с релейной логикой.

Последующие машины Цузе назывались Z2 и Z3. Память для данных последней, содержала 64 22-битовых слова, а вес превышал одну тонну. В качестве носителя информации использовали целлулоидную ленту. Общая мощность Z3 — 4000 Ватт. Для сравнения сборка из 6 видеокарт NVIDIA GTX1080Ti для майнинга криптовалют потребляет максимум 2790 Ватт.

Первым ламповым (не программируемым) компьютером была машина Атанасова-Берри, 1942 год. В 1946 году создан первый программируемый компьютер на базе ламповой логики. Они были по прежнему очень тяжелыми и весели 30 тонн. Электронные лампы часто выходили из строя и на поиск неисправности уходило очень много времени.

Революцию в мире вычислительной техники произвел транзистор. На базе двух транзисторов можно построить триггер. Это устройство способно принимать устойчивые состояния (запоминать). Транзисторная логика устранила основной недостаток первых вычислительных машин. Следующим шагом было создание интегральных схем, которые содержали множество транзисторов на одном кристалле.

Режимы работы процессора и адресация памяти

Коротко говоря, память ОЗУ — это место для запоминания данных и доступа к ним посредством задания адреса и смещения. В старых ОС таких как MSDOS нельзя было получить доступ к памяти за пределами 1 мегабайта адресного пространства, исключая случаи использования файла HIMEM.SYS. Этот файл позволял получать доступ к «верхней памяти».

640 Кб будет достаточно для каждого.

Билл Гейтс, 1981 год.
Цитата про плохую память
Плохая память

Было время, когда радость доставляло 640 Кб ОЗУ, но все относительно в этом мире… Все проходит, все меняется и пиксельная графика уже не доставляет столько удовольствия сколько доставляют новые шейдера. Но старые хитрости, рассмотренные выше, никуда не исчезли и будут полезны для неофитов. Вот почему вам стоит рассмотреть управление памятью подробнее.

Существует 2 основных режима работы процессора:

  1. Режим реального времени, или режим реальных адресов;
  2. защищенный режим, или режим защищенного виртуального адресного пространства.

Первый режим самый старый, но тем не менее, продолжает использоваться сейчас во встраиваемых системах. Вначале, он даже использовался в Windows 3.1 с кодовым названием Янус. Собственно, имя двуликого древнеримского божества это аллюзия на главное свойство ОС которая могла функционировать в реальном и защищенном режимах. После Windows 3.11 поддержка режима реального времени была убрана.

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

  • В системах адаптивного круиз контроля автомобилей BMW;
  • В холодильных системах морга — для поддержания постоянной температуры;
  • В системах жизнеобеспечения — на международной космической станции;
  • В маршрутизаторах CISCO — для стабильной и бесперебойной работы;
  • В медицине — для контроля состояния здоровья пациента;
  • В бортовых системах Boeing 737-800 — для контроля давления в кабине пилота;
  • На атомных электростанциях — для контроля выдвижения замедляющих графитовых стержней.

Просто представьте ситуацию, когда ваш Windows подвисает или обновляется и вы поймете, почему он там не используется. Одной из наиболее распространенных ОС-реального времени является QNX. Для ознакомительных целей ее можно скачать и использовать 30 дней бесплатно. Но поверьте, обычному пользователю она не понравится.

Начиная с Windows 3.1 корпорация Microsoft поняла, не без помощи конкурентов, что людям нужно все и сразу, а графический интерфейс куда важнее чем, чем возня с унылым MSDOS. Полноценную многозадачность мог позволить только защищенный режим с виртуальным адресным пространством.

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

Protected mode
Кольца защиты памяти

Защищенный режим получил свое название из-за четкого разграничения прав на страницы памяти. Кроме всего, в нем используются кольца привилегий. Ядро операционной системы как самая главная часть занимает место в памяти называемое Ring 0. В Ring 1 располагаются драйвера основных устройств ввода/вывода, файловых систем. В Ring 2 находятся драйвера для остальной менее приоритетной периферии. В Ring 3 размещаются страницы приложений.

Во времена MSDOS программист мог нечаянно задеть область памяти которая содержит код драйвера и тем самым нарушить нормальное функционирование всей ОС. В современных многозадачных ОС не получится нечаянно вмешаться в работу драйвера. В любом случае попытка прочитать запрещенную область приведет к ошибке доступа к памяти (Access Violation), как на рисунке ниже.

отсутствие доступа по адресу
Ошибка в Windows 10

Программа работает на своем адресном пространстве и даже не знает сколько всего физической памяти в ОС. Если памяти для программы не достаточно, она запрашивает её у операционной системы и получает новые страницы.

Взаимодействие процессов и соперничество за ресурсы

А как же происходит связь между несколькими процессами? В отличии от ОС-реального времени, которые работают над решением узкого круга специфических задач, ОС функционирующие в защищенном режиме имееют большее количество интерфейсов для обмена информацией между процессами. Для этого есть сокеты, именованные каналы (named pipe), не именованные каналы, техника разделения памяти, удаленные вызовы (RPC), сигналы, очереди сообщений, файлы, mmap-файлы (отраженные в память файлы).

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

  • в 1965 году Эдсгером Дейкстрой («Задача обедающих философов», «Проблема спящего парикмахера»);
  • в 1971 году Сухасом С. Патилом («Проблемы сигаретных курильщиков»).

Несмотря на смешные названия, за ними кроются реальные проблемы требующие управленческих решений. В качестве решений предлагаются семафоры, мьютексы, фьютексы. Последние разработаны и внедрены Уберту Франке и Метью Кирквудом 18 марта 2002 года в экспериментальную версию 2.5.7 ядра Linux. В Windows, они стали именоваться быстрыми мьютексами. Упрощенной аналогией всех перечисленных синхронизационных примитивов являются светофоры регулирующие движение.

В Linux, в отличие от Windows вы можете ознакомиться с фьютексами во встроенной справочной системе man. Если вы пользователь Windows и хотите постигнуть глубины сложных вещей ставьте Linux. OS Linux очень гибкая и вы можете её настроить для себя.

Память и уязвимости

Все уязвимости делятся на две группы: программные и аппаратные. Программные уязвимости после их нахождения разработчиками быстро устраняются обновлениями с патчами. С аппаратными уязвимостями ситуация гораздо хуже. Они имеют огромное влияние на производительность и от них так просто не избавится. К счастью, аппаратных уязвимостей меньше.

Meltdown and Spectre logo
Meltdown & Spectre

Возможно вас заинтересует статья про актуальные уязвимости 2018 года: Как улучшить производительность Linux отключив патчи для Meltdown и Spectre.

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

В стеке содержатся адреса возврата функций и если стек переполнен из него берется неправильный адрес. Компьютерным неофитам эту уязвимость демонстрируют на примере простой консольной программы заполняющей массив значениями введенными с клавиатуры. Массив без проверки переполнения — это готовая уязвимость.

Так старые версии ОС утратившие поддержку становятся 100% незащищенными. Для поддержания должного уровня безопасности, вам следует всегда обновлять программное и аппаратное обеспечение. Если вам лень это делать, воспользуйтесь услугами ближайшего специалиста.

Количество возможной оперативы зависит от количества слотов на материнской плате. В большинстве материнских плат их 4. Перед покупкой новой планки памяти, вам следует зайти на сайт производителя вашей материнской платы и посмотреть список поддерживаемых устройств.

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

Существует планки памяти с синхронным доступом (SDRAM, HBM, HMC) и асинхронным доступом (FPM RAM и EDO RAM). Основные форм-факторы: DIMM, SO-DIMM, MicroDIMM. SO-DIMM используется в ноутбуках и стоит немного дороже. MicroDIMM используется в технике поменьше. Память также может быть специализированной (графическая память VRAM, WRAM, MDRAM).

Короткие выводы

  • С точки зрения пользователя память — это ресурс;
  • Запущенная программа — это процесс;
  • Каждый процесс имеет свой приоритет и использует ресурсы по-разному;
  • Существуют два режима работы процессора;
  • Режим реального времени применяется на встраиваемых системах;
  • В защищенном режиме память делится на страницы;
  • ОС в защищенном режиме использует ограничение на доступ к некоторым страницам памяти;
  • Пользовательские ОС работают в защищенном режиме;
  • Специализированные ОС работают преимущественно в режиме реального времени.

Как улучшить производительность Linux отключив патчи для Meltdown и Spectre

Kernel security

Предупреждение! Приведенные ниже инструкции увеличивают не только производительность, но и риски безопасности. Автор и сайт не отвечают за любой возможный вред причиненный использованием данной методики.

Существует множество случаев когда необходимо найти компромиссное решение между уровнем безопасности и производительностью. Не пропадать же добру? В самом деле, хоть оно старое и медленное, но сердцу дорогое и ему можно постараться найти применение.

Пример №1

LiveCD, или LiveUSB загружаются прямо в ОЗУ. Таким образом, все возможные изменения которые вы сделаете в ней, за исключением операций с устройствами хранения, будут сброшены после перезагрузки. Этот случай наиболее практичен потому, что загрузка из внешнего устройства значительно медленнее.

Пример №2:

Этот пример наиболее подходит для исследователей приложений. Они могут использовать старые ПК, как «физические песочницы». «Песочницы» –это изолированные от внешнего мира машины, которые используются в основном для тестирования специфических особенностей операционных систем, утилит, приложений или аппаратных компонентов. В нашем примере, под термином «физической песочницы» будем понимать тот факт, что только исследователь или группа исследователей имеет право физического доступа к её аппаратным и программным компонентам так, что машина абсолютно изолирована от внешнего мира. Это помогает избежать всех нежелательных факторов, которые могут исказить результаты эксперимента.

Пример №3:

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

Практический случай

После установки Ubuntu 18.04 (Bionic Beaver) на ноутбук Lenovo G580 20150 или другие бюджетные модели, очень возможно то, что вы будете удивлены высоким уровнем загруженности центрального процессора. Работа на таких машинах медленная, невыносимая, и порой полностью невозможная. Для сравнения Windows 10, даже с установленными патчами безопасности, работает немного быстрее. Вы можете использовать команду top на машине под управлением Linux для просмотра списка запущенных процессов.

Насколько вы можете видеть, использование процессора на уровне 54,8%, а количество работающих процессов 2. Вы можете инсталировать другие среды рабочего окружения, но это не повлияет на общий результат значительно.

В чем причина?

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

Spectre and meltdown logos

Если вам интересно как ОС управляет памятью прочитайте: Исторический обзор управления памятью в операционных системах.

Компромиссное решение

Широкое разнообразие системных возможностей может быть отключено или включено посредством добавления или удаления соответствующих опций ядра. Следовательно, вы можете использовать несколько вариантов загрузки: один для поиска в Интернете или других важных операций, и другой для запуска программ которым вы доверяете на изолированной системе.

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

Опции о которых идет речь

Ядро – (англ. kernel) это основа каждой операционной системы. Оно отвечает за способ обработки процессов, управление памятью и некоторые другие важные рутинные операции выходящие за рамки данной статьи. Разработчики ядра Linux позволили вам сделать выбор собственных опций управления оперативной памятью.

PTI – это английская аббревиатура Page Table Isolation. Добавлением опций ядра «nopti» или «pti=off» вы можете улучшить общую производительность системы. Короче говоря, вся память разделена на страницы. Каждая страница имеет свои собственные атрибуты которые разрешают или запрещают доступ к ней некоторым процессам. Если один процесс (запущенная программа) пытается прочитать память другого процесса, вы увидите ошибку доступа к памяти (access violation error), как на картинке ниже.

exception access violation

Ошибка в Windows 10

ОС, как хороший сторожевой пёс, предотвращает любую деятельность подобного рода. Вместе с отключением изоляции страниц вы становитесь возможной жертвой эксплуатации бреши в безопасности под названием Meltdown (и не только!!!). Главный вопрос: «Использовать или не использовать эту возможность?». В любом случае, решение за вами и вашими предпочтениями.

Другая проблема, которая влияет на общую производительность – это заплатка от бреши Spectre. Для её отключения есть специальная опция «spectre_v2=off». Заметьте, что эта опция активна и в состоянии «on» по умолчанию.

Опции загрузчика

Существует множество загрузчиков для операционной системы Linux, такие как: Grub2, Grub legacy, Lilo, Syslinux, rEFInd, итд. . Все они имеют общие цели: загрузку ОС и передачу аргументов ядру. Опции ядра размещаются в соответствующих конфигурационных файлах загрузчика. Как правило, загрузчик размещает конфигурационные файлы в каталоге: «/boot/имя_загрузчика».

Для GRUB 2

Но для Grub 2 содержимое /boot/grub/grub.cfg автоматически генерируется утилитой update-grub. Следовательно, если вы отредактируете его содержимое вручную, то он восстановит свое предыдущее состояние после следующего обновления и вы потеряете желаемые опции. Во избежание этого, вам следует отредактировать файл /etc/default/grub. Его начальные строчки приведены ниже:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pti=off spectre_v2=off nopti"
GRUB_CMDLINE_LINUX=""

Посредством редактирования GRUB_CMDLINE_LINUX_DEFAULT вы можете изменить загрузочные опции ядра по умолчанию. Но не забудьте, про выполнение утилиты update-grub:

 sudo update-grub 

Для rEFInd

Если вам нравится загрузчик rEFInd и ваша система поддерживает UEFI, тогда вам следует найти rEFInd.conf. Вставьте опции разделенные пробелами вконец строки options, как указано ниже:

menuentry "My Linux Distro Name" {
        icon     /EFI/refind/icons/My_Linux_Distro_Icon.png
        volume   Label_of_my_partition
        loader   /boot/vmlinuz-linux
        initrd   /boot/initramfs-linux.img
        options  "root=PARTUUID=XXXXXXX rootfstype=XXXX rw add_efi_memmap pti=off spectre_v2=off"
        submenuentry "Boot using fallback initramfs" {
                initrd /boot/initramfs-linux-fallback.img
        }
}

Вместо иксов идут ваши личные настройки. Вместо PARTUUID может быть лейбл раздела. То что есть не трогайте добавьте только красные опции.

Для Syslinux

Syslinux используется для загрузки livecd и liveusb версий дистрибутивов Линукс. Учитывая специфику livecd/liveusb, коротковременный характер хранения изменений при работе (все изменения включая временные файлы каталога /tmp хранятся в RAM-диске, а приложения монтируются как read only со squashfs файлов) и относительно нечастое использование, то рисками можно пренебречь.

Следовательно, будет полезно использовать рассмотренные ранее опции для ускорения процесса загрузки. Когда загрузочное меню загрузится, вы должны нажать кнопку <TAB> и передать следующие опции ядру:

linux /boot/vmlinuz-linux root=/dev/sdb1 initrd=/boot/initramfs-linux.img quiet splash pti=off spectre_v2=off

sdb1  – это сокращение устройство хранения (storage device) "b" номер раздела 1.  

Будьте внимательны, «root» параметр должен указывать на ваше личное загрузочное устройство. Если хотите сделать эту опцию постоянной (не терять при перезагрузке) найдите в корне liveusb следующий файл /boot/syslinux/syslinux.cfg. Далее найдите соответствующую вашему дистрибутиву (будьте внимательны если у вас их несколько) строчку начинающуюся с «APPEND» и просто добавьте в конец опции:

APPEND root=/dev/sdb1 quiet splash pti=off spectre_v2=off

Для Systemd-boot

Конфигурация этого загрузчика схожа с предыдущем, но придется нажать клавишу «Е» и написать это:

initrd=\initramfs-linux.img root=/dev/sdb1 quiet splash pti=off spectre_v2=off

Для того чтоб указанные опции применялись постоянно найдите исправьте следующий файл в корне загрузочного носителя /boot/loader/entries/linux_distro_name.conf и допишите следующее:

Как убедится что патчи применены?

Откройте ваш терминал и напишите:

dmesg | grep 'retpoline' 

Если ничего не видно заплатки для Spectre не были применены. В противном случае вы увидите это:

[    0.165383] Spectre V2 : Mitigation: Full generic retpoline

Для проверки применена или нет страничная изоляция памяти (PTI) введите:

dmesg|grep "page tables isolation"

И вы увидите что-то вроде этого:

[    0.131162] Kernel/User page tables isolation: enabled

Enable — применен, disabled — нет.

Meltdown and Spectre detection
Проверка применения патчей безопасности

Обратите внимание на версию Spectre патча — «V2»!!! В «V1» процедура retpoline реализована лишь частично и система продолжает быть уязвимой. Этот случай редкий, но возможен если вы используете старую версию ядра, поэтому обновитесь.

Что такое retpoline?

По статистике, 1/6 часть всех инструкций выполняемых программами – условные переходы (инструкции типа: jb, jbe, ja, jz, jnz и так далее). Для быстрого выполнения программ разработчиками процессорных архитектур был придуман модуль предсказания переходов (англ. branch prediction unit). Злоумышленники использует его особенности чтобы перейти на нужный адрес в памяти обойдя, тем самым, запреты на доступ.

Retpoline – это механизм препятствующий спекулятивному выполнению переходов. Для процессоров Intel используется инструкция «PAUSE», в процессорах AMD она также есть но без сериализации. Вместо «PAUSE» для процессоров AMD используется «LFENCE». Они призывают процессор ждать когда будет известен адрес точного перехода.

Как сказал сам Линус Торвальдс, первые предложения и фиксы предложенные инженерами Intel были откровенно глупыми.

Предложенные Intel исправления являются полным мусором!

Linus Torvalds

Выводы

Рассмотренные вопросы полезны:

  • Если вы используете livecd или liveusb версию вашего дистрибутива
  • Если вы хотите ускорить старые устройства не покупая новое «железо».
  • Если вы не заботитесь о безопасности