<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; Настройка Debian 13. Одноразовый тюнинг и обслуживание системы]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=41419</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=41419&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Настройка Debian 13. Одноразовый тюнинг и обслуживание системы».]]></description>
		<lastBuildDate>Fri, 14 Aug 2026 11:45:52 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Настройка Debian 13. Одноразовый тюнинг и обслуживание системы]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=473070#p473070</link>
			<description><![CDATA[<p>Предыдущая часть находится <a href="https://linuxforum.ru/viewtopic.php?pid=473069">тут</a>.</p><p>Debian как и Мастдай нужно периодически обслуживать - обновлять систему, удалять ненужные программы, просматривать логи на предмет ошибок.</p><ul><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Обновление системы</div><div class="fancy_spoiler"><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Автоматическое обновление системы</div><div class="fancy_spoiler"><p>Для ленивых предусмотрено автоматическое обновление Debian, которое по-умолчанию устанавливает критические обновления безопасности, что позволяет системе безопасно существовать без всякого вмешательства пользователя. Я не пользуюсь, но если настраивать бабушкам, то самое оно.</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Минимальная установка - только важные обновления безопасности</div><div class="fancy_spoiler"><p>Установим пакет:<br /></p><div class="codebox"><pre><code>sudo aptitude install unattended-upgrades</code></pre></div><p>и настроим его на автоматический запуск:<br /></p><div class="codebox"><pre><code>sudo dpkg-reconfigure unattended-upgrades</code></pre></div><p>в появившемся диалоговом окне будет предложено включить автоматическую установку обновлений. Нужно выбрать <strong>Да</strong> и на этом минимальная базовая настройка будет завершена.<br />При этом создаётся файл <strong>/etc/apt/apt.conf.d/20auto-upgrades</strong>, который включает автоматическое обновление списка пакетов и их установку.<br />Для того, чтобы автоматически удалять ненужные пакеты из кеша нужно отредактировать /etc/apt/apt.conf.d/20auto-upgrades:<br /></p><div class="codebox"><pre><code>sudo nano /etc/apt/apt.conf.d/20auto-upgrades</code></pre></div><p>добавив параметр<br /></p><div class="codebox"><pre><code>APT::Periodic::AutocleanInterval &quot;30&quot;;</code></pre></div><p>где 30 - интервал очистки в днях.</p></div></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Обновление из всех подключенных репозиториев</div><div class="fancy_spoiler"><p>Предыдущий пункт по минимальной установке должен быть выполнен. В этой части лишь его донастройка.<br />Для этого нужно настроить список разрешённых источников обновлений в конфигурационном файле unattended-upgrades.</p><p>Редактируем главный файл, где определяются правила для автоматических обновлений:<br /></p><div class="codebox"><pre><code>sudo nano /etc/apt/apt.conf.d/50unattended-upgrades</code></pre></div><p>в файле найти секцию <strong>Unattended-Upgrade::Origins-Pattern</strong>. Она определяет, из каких<br />источников можно автоматически устанавливать обновления.<br />Чтобы разрешить обновления из всех подключённых репозиториев, нужно закомментировать/удалить<br />существующие строки и добавить правило <span style="color: green">&quot;origin=*&quot;</span>.<br />Будет выглядеть так:<br /></p><div class="codebox"><pre><code>// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Origins-Pattern {
&quot;origin=*&quot;;
};</code></pre></div><p>Правило &quot;origin=*&quot; — это универсальное указание, которое говорит системе автоматически<br />обновлять пакеты из всех источников, независимо от их происхождения</p></div></div><p>Для того, чтобы убедиться, что автоматические обновления работают, нужно посмотреть логи (не ранее следующего дня после установки пакета):<br /></p><div class="codebox"><pre><code>sudo tail -50 /var/log/unattended-upgrades/unattended-upgrades.log</code></pre></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Настройка таймеров</div><div class="fancy_spoiler"><p>По умолчанию в Debian существуют два системных таймера, которые управляют автоматическим обновлением: один отвечает за обновление локального кеша репозиториев, другой — непосредственно за установку обновлений. Если автоматическое обновление не нужно, то их нужно отключить.<br />Сами службы запускаются таймерами, статус которых можно посмотреть командами:<br /></p><div class="codebox"><pre><code>systemctl status apt-daily.timer</code></pre></div><p>и<br /></p><div class="codebox"><pre><code>systemctl status apt-daily-upgrade.timer</code></pre></div><p>Если они существуют и активны <strong>Active: active (waiting)</strong>, то отключаем их.<br />Отключение обновления локального репозитория по расписанию:<br /></p><div class="codebox"><pre><code>sudo systemctl disable --now apt-daily.timer</code></pre></div><p>и отключение обновления системы по расписанию:<br /></p><div class="codebox"><pre><code>sudo systemctl disable --now apt-daily-upgrade.timer</code></pre></div><p>Эти таймеры управляют запуском скриптов обновления. Их отключение гарантирует, что автоматические обновления не будут выполняться по расписанию.</p><p>На случай, если вдруг интересно содержимое этих таймеров(их расписание), то это можно сделать командой:<br /></p><div class="codebox"><pre><code>systemctl cat apt-daily.timer</code></pre></div><p>Секция [Timer] будет выглядеть примерно так:<br /><span style="color: green"># /usr/lib/systemd/system/apt-daily.timer<br />[Unit]<br />Description=Daily apt download activities</span></p><p><span style="color: green">[Timer]<br />OnCalendar=*-*-* 6,18:00<br />RandomizedDelaySec=12h<br />Persistent=true</span></p><p><span style="color: green">[Install]<br />WantedBy=timers.target<br /></span></p><p>Включить обратно:<br /></p><div class="codebox"><pre><code>sudo systemctl enable --now apt-daily.timer</code></pre></div><p>и<br /></p><div class="codebox"><pre><code>sudo systemctl enable --now apt-daily-upgrade.timer</code></pre></div><p>На случай, если автоматическое обновление устраивает, но нужно подкорректировать параметры запуска, нужно переопределить содержимое таймеров для <strong>apt-daily.timer </strong>и <strong>apt-daily-upgrade.timer</strong><br />Переопределяем apt-daily.timer:<br /></p><div class="codebox"><pre><code>sudo systemctl edit apt-daily.timer</code></pre></div><p>Начнётся создание файла<strong> /etc/systemd/system/apt-daily.timer.d/override.conf </strong>Нужно обратить внимание на строчку в файле (всё, что будет ниже этого комментария - применяться не будет):<br /><span style="color: green">### Edits below this comment will be discarded</span><br />Если до этого комментария не будет никаких изменений, то файл переопределения конфигурации не создастся.<br />Представим, что мы хотим обновить нашу систему в субботу вечером, чтобы в понедельник утром получить готовую и обновлённую систему, которую не предполагается автоматически обновлять до следующей субботы. Суббота - ну на случай если вдруг произойдёт чудо и система поломается после обновления. Тогда будет время(целое воскресенье) чтобы починить систему (шутка). :-D<br />Для этого введём НАД строкой<strong> ### Edits below this comment will be discarded</strong> следующий код:</p><p><span style="color: green">[Timer]<br />OnCalendar=Sat *-*-* 18:00<br /></span><br />Сохраняем файл и выходим.<br />То же самое проделываем для таймера apt-daily-upgrade.timer:<br /></p><div class="codebox"><pre><code>sudo systemctl edit apt-daily-upgrade.timer</code></pre></div><p>Для того, чтобы проверить корректность этой строки, используется команда, которая нам покажет когда будет следующий запуск этого таймера:<br /></p><div class="codebox"><pre><code>systemd-analyze calendar &quot;Sat *-*-* 18:00&quot;</code></pre></div><p>Для того, чтобы посмотреть список всех таймеров и время их срабатывания, нужно ввести команду:<br /></p><div class="codebox"><pre><code>systemctl list-timers --all</code></pre></div><p>Для проверки реального времени следующего запуска таймера после применения изменений, нужно ввести команду:<br /></p><div class="codebox"><pre><code>systemctl list-timers apt-daily.timer</code></pre></div><p>Для удаление <strong>переопределения</strong> сервиса нужно использовать команду sudo systemctl revert &lt;имя-службы&gt;<br />Например:<br /></p><div class="codebox"><pre><code>sudo systemctl revert apt-daily.timer</code></pre></div><p>Сам сервис эта команда не отключает.</p></div></div></div></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Ручное обновление системы</div><div class="fancy_spoiler"><p>Система и программы, установленные через репозитории(основной и сторонние) обновляются одновременно.<br />Сначала обновляем локальный кеш:<br /></p><div class="codebox"><pre><code>sudo aptitude update</code></pre></div><p>Затем делаем обновление системы. Нежно:<br /></p><div class="codebox"><pre><code>sudo aptitude safe-upgrade </code></pre></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Пример работы команды</div><div class="fancy_spoiler"><p>На скрине видно, что обновляются пакеты из различных репозиториев.<br />VS Code из репозитория Микрософта<br />Opera GX из репозитория Оперы<br />Master PDF Editor из собственного репозитория<br />и три пакета из репозитория безопасности <strong>trixie-security.</strong> Это значит, что на эти пакеты были наложены патчи безопасности.<br />Если бы пакеты прилетели из репозитория<strong> trixie-updates</strong>, то это бы значило, что в пакет внесены изменения, не связанные с безопасностью, — например, исправления ошибок или обновления данных.<br /><a href="https://i.gyazo.com/ba4ac301d76431950777b1a96bb52baf.png"><span class="postimg"><img src="https://i.gyazo.com/thumb/400/ba4ac301d76431950777b1a96bb52baf" alt="https://i.gyazo.com/thumb/400/ba4ac301d76431950777b1a96bb52baf" /></span></a></p></div></div><p>После успешного обновления запускаем команду очистки ненужных старых пакетов (удаление их с кеша, который хранится на диске):<br /></p><div class="codebox"><pre><code>sudo aptitude autoclean</code></pre></div></div></div></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Обновление сторонних программ</div><div class="fancy_spoiler"><p>Если программа установлена не через систему пакетов и имеет символическую ссылку (которая обычно должна указывать на каталог /usr/local/bin), то сначала удаляем её(на примере ЯП Go):<br /></p><div class="codebox"><pre><code>sudo rm /usr/local/bin/go</code></pre></div><p>а затем и сам каталог, в котором установлена программа (на примере того же Go):<br /></p><div class="codebox"><pre><code>sudo rm -rf /opt/go</code></pre></div><p>Затем делаем установку более свежей версии согласно руководству по установке программы (для примера выше - Go)</p></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Удаление конфигурационных файлов</div><div class="fancy_spoiler"><p>Тут речь конечно же идёт о конфигурационных файлов пакетов, которые установлены через систему управления пакетов.<br />Сначала посмотрим, есть ли такие пакеты:<br /></p><div class="codebox"><pre><code>aptitude search &#039;~c&#039;</code></pre></div><p>И если есть и они вам не нужны, то жестоко грохнем:<br /></p><div class="codebox"><pre><code>sudo aptitude purge &#039;~c&#039;</code></pre></div><p>При этом нужно понимать, что убьются все конфигурационные файлы, пакеты для которых не установлены.</p></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Удаление пакетов</div><div class="fancy_spoiler"><p>Удаление пакета без удаления их конфигурационных файлов:<br /></p><div class="codebox"><pre><code>sudo aptitude remove &lt;имя_пакета&gt;</code></pre></div><p>где имя пакета вводится без угловых скобок. Например <em>sudo aptitude remove atril</em><br />Полное удаление пакета, включая конфигурационные файлы:<br /></p><div class="codebox"><pre><code>sudo aptitude purge &lt;имя_пакета&gt;</code></pre></div><p>где имя пакета вводится без угловых скобок. Например <em>sudo aptitude purge atril</em></p></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Просмотр и удаление потеряшек</div><div class="fancy_spoiler"><p>Потеряшками(orphaned) называют пакеты, ссылки на которые в текущих подключенных репозиториях не существует. Сюда же, разумеется, будут относится пакеты в формате .deb, которые были скачаны и установлены с сайтов разработчиков. Команда для получения списка &quot;потеряшек&quot;:<br /></p><div class="codebox"><pre><code>aptitude search &#039;~i !~M ~o&#039;</code></pre></div><p>Если они не нужны, то их можно удалить как обычные пакеты(описано выше)</p></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Проверка зависимостей пакетов</div><div class="fancy_spoiler"><p>Иногда бывает так, что в результате предыдущей команды по поиску потеряшек возникает сомнение, можно ли удалять пакет (есть ли ОТ него зависимости)? Для этого используется команда:<br /></p><div class="codebox"><pre><code>aptitude search &#039;~i ~D &lt;имя_пакета&gt;&#039;</code></pre></div><p>если результат вывода пуст, то от этого пакета другие пакеты не зависят.</p><p>Почему пакет был установлен (кто нуждается в этом пакете):<br /></p><div class="codebox"><pre><code>aptitude why &lt;имя_пакета&gt;</code></pre></div><p>в результате выведется кратчайшая цепочка всех пакетов(установленных и нет) которым нужен этот пакет.</p><p>Почему пакет не может быть установлен (с кем конфликтует) показывает команда:<br /></p><div class="codebox"><pre><code>aptitude why-not &lt;имя_пакета&gt;</code></pre></div></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Просмотр ошибок</div><div class="fancy_spoiler"><p>Для просмотра ошибок используется команда journalctl с параметрами. Просмотр ошибок за текущую загрузку:<br /></p><div class="codebox"><pre><code>sudo journalctl -p 3 -xb </code></pre></div><p>Просмотр ошибок за предыдущую загрузку. В основном используется, если компьютер неожиданно перезагрузился, зависис и т.д.:<br /></p><div class="codebox"><pre><code>sudo journalctl -p 3 -xb -1</code></pre></div><p>Т.к. логи со временем достаточно сильно забьют систему, то сначала посмотрим сколько места они занимают:<br /></p><div class="codebox"><pre><code>sudo journalctl --disk-usage</code></pre></div><p>а затем и ограничим аппетиты журналов. Для этого подкорректируем настройки journalctl. Основные конфиги трогать не рекомендуется, а рекомендуется применять так называемый капельный (Drop-in) подход.<br />Создадим каталог, который будет хранить переопределение:<br /></p><div class="codebox"><pre><code>sudo mkdir -p /etc/systemd/journald.conf.d</code></pre></div><p>Затем создадим конфигурационный файл, который будет переопределять необходимые нам настройки:<br /></p><div class="codebox"><pre><code>sudo nano /etc/systemd/journald.conf.d/99-persistent-debug.conf </code></pre></div><p>Вносим изменения</p><p><span style="color: green">[Journal]<br />Storage=persistent<br />SyncIntervalSec=5s<br />SystemMaxUse=500M<br />SystemMaxFileSize=100M<br />MaxRetentionSec=1month<br />RateLimitIntervalSec=0<br />RateLimitBurst=0 <br /></span><br />Перезапускаем службу:<br /></p><div class="codebox"><pre><code>sudo systemctl restart systemd-journald </code></pre></div><p>Проверим, что настройки применились:<br /></p><div class="codebox"><pre><code>systemd-analyze cat-config systemd/journald.conf</code></pre></div><p>В выводе должны быть новые значения</p></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Просмотр ошибок Xfce</div><div class="fancy_spoiler"><p>Ошибки Xfce пишутся в файл ~/.xsession-errors. Теоретически, там ошибок быть не должно. Практически там всегда что-то есть. Поэтому смотрим специфические ошибки:<br /></p><div class="codebox"><pre><code>cat ~/.xsession-errors | grep -i -E &#039;error|crit|fail|warn|oom&#039;</code></pre></div></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Долгая загрузка системы</div><div class="fancy_spoiler"><p>Для того, чтобы определить причину долгой загрузки существует несколько утилит.<br />Общее время загрузки:<br /></p><div class="codebox"><pre><code>systemd-analyze time</code></pre></div><p>Список служб, отсортированный по времени загрузки:<br /></p><div class="codebox"><pre><code>systemd-analyze blame</code></pre></div><p>Наибольшее время задержки с разбиением по зависимым службам:<br /></p><div class="codebox"><pre><code>systemd-analyze critical-chain</code></pre></div><p>Команда для низкоуровневой диагностики в реальном времени. dmesg показывает, что &quot;видит&quot; и о чём &quot;думает&quot; ядро с момента запуска системы:<br /></p><div class="codebox"><pre><code>sudo dmesg -H</code></pre></div></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Фиксация версии пакета</div><div class="fancy_spoiler"><p>Иногда бывает нужно зафиксировать текущую версию пакета, чтобы она не обновлялась при использовании команды <strong>sudo aptitude safe-upgrade</strong>.<br />Для этого существует команда <strong>sudo apt-mark hold &lt;имя_пакета&gt;</strong>.<br />Например, зафиксируем пакет Mater PDF Editor в его текущей версии:<br /></p><div class="codebox"><pre><code>sudo apt-mark hold master-pdf-editor-5</code></pre></div><p>Просмотр списка зафиксированных пакетов:<br /></p><div class="codebox"><pre><code>apt-mark showhold</code></pre></div><p>Для того, чтобы исключить пакет из списка зафиксированных и позволить ему обновляться вместе с системой, нужно написать команду <strong>sudo apt-mark unhold &lt;имя_пакета&gt;</strong>. Например:<br /></p><div class="codebox"><pre><code>sudo apt-mark unhold master-pdf-editor-5 </code></pre></div></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Включение и отключение репозиториев для обновления</div><div class="fancy_spoiler"><p>Иногда бывает нужно отключить обновление из некоторых репозиториев(в основном это нужно перед обновлением мажорной версии Debian) при использовании команды <strong>sudo aptitude update</strong>. Для этого в описание репозитория нужно добавить параметр <strong>Enabled: no</strong>.<br />На примере Double Commander:<br /></p><div class="codebox"><pre><code>sudo nano /etc/apt/sources.list.d/doublecmd-stable.sources</code></pre></div><p><span style="color: green"><br />Types: deb<br />URIs: <a href="https://download.opensuse.org/repositories/home:/Alexx2000/Debian_13/">https://download.opensuse.org/repositor … Debian_13/</a><br />Suites: /<br />Components:<br />Signed-By: /usr/share/keyrings/double-archive-keyring.gpg<br />Enabled: no<br /></span><br />В дальнейшем, если нужно будет включить репозиторий, то можно либо поставить параметр <strong>Enabled: yes</strong> либо вообще его удалить.</p><p>Посмотреть список имён файлов отключенных репозиториев, можно командой:<br /></p><div class="codebox"><pre><code>sudo grep -l &quot;Enabled: no&quot; /etc/apt/sources.list.d/*.sources</code></pre></div></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Удаление репозиториев</div><div class="fancy_spoiler"><p>На случай, если отключение репозитория не устраивает, а хочется полностью удалить его описание из системы, то нужно удалить ключ и файл описания самого репозитория.<br />На примере того же Double Commander:<br />Удаляем ключ:<br /></p><div class="codebox"><pre><code>sudo rm /usr/share/keyrings/double-archive-keyring.gpg</code></pre></div><p>Удаляем файл с описанием репозитория:<br /></p><div class="codebox"><pre><code>sudo rm /etc/apt/sources.list.d/doublecmd-stable.sources</code></pre></div><p>Сами установленные пакеты при этом не удаляются из системы.</p></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Просмотр загрузки видеокарты nvtop</div><div class="fancy_spoiler"><p>Вместо кучи различных утилит для различных видеокарт (а-ля nvidia-smi или radeontop) можно использовать универсальную утилиту просмотре загрузки видеокарт и их памяти - nvtop. Она работает с GPU от NVIDIA, AMD и Intel.<br />Установка:<br /></p><div class="codebox"><pre><code>sudo aptitude install nvtop</code></pre></div><p>Запуск:<br /></p><div class="codebox"><pre><code>nvtop</code></pre></div><p>Выход из утилиты - нажать клавишу Q</p></div></div></li></ul><p>Одноразовый тюнинг<br /></p><ul><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Настройка ZSWAP ZRAM</div><div class="fancy_spoiler"><p>Для начала немного теории, что такое ZSWAP/ZRAM.<br />Если RAM это ОЗУ, то ZRAM это динамически выделяемый кусок памяти из ОЗУ, куда данные (память приложений) выгружаются в сжатом виде. В среднем можно ожидать коэффициент сжатия около 2:1, но он может варьироваться. Т.е. каждые 10 мб данных из ОЗУ превращаются в 5Мб в ZRAM. Однако при этом идёт нагрузка на процессор. Из дополнительных плюсов то, что ресурс SSD расходуется медленнее, т.к. к нему происходит меньше обращений. Но это не самоцель.<br />На данный момент существует две частично перекрывающие друг друга технологии - ZSWAP и ZRAM. Общего у них одно - они обе умеют сжимать выгружаемые из ОЗУ данные.<br />Разница в том, что zswap не может существовать без физического файла/раздела подкачки. Если при запуске системы файл подкачки не будет найден, то zswap просто не включится, а в логах будут ошибки. zram вполне спокойно себе может существовать без файла/раздела подкачки.<br />Если zram используется вместе с дисковым swap (даже с меньшим приоритетом), при переполнении zram ядро может начать выгружать на диск активные страницы, оставляя в быстром zram давно неиспользуемые. Это явление называется LRU-инверсией и может резко замедлить систему. Поэтому при активном использовании дискового swap (особенно на малом ОЗУ) более безопасен zswap.<br />Так что же выбрать? Однозначного ответа нет, всё зависит от задач. А точнее от объёма ОЗУ в системе, насколько сильно она используется и количества ядер процессора. При наличии 16Гб+ ОЗУ выбирать zram и отключать swap-раздел. Остальное - в серой зоне и зависит исключительно от того, насколько нужен будет swap-раздел.<br />Если процессор слабый (2 ядра) и приложения постоянно требуют 150% от объёма ОЗУ и больше, то лучшим выбором будет zswap, чтобы не упала система от нехватки памяти.<br />Алгоритмы сжатия одни и те же:<br />lzo - самый слабый по сжатию алгоритм, но и самый быстрый. Используется по-умолчанию.<br />lz4 - сжимает быстрее, но и больше нагружает процессор. Рекомендуется для слабых машин с объёмом ОЗУ 4Гб.<br />zstd - современный стандарт. Рекомендуется для машин с 4+ ядрами и объёмом ОЗУ 8Гб+</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Настройка zswap</div><div class="fancy_spoiler"><p>Технология сжатия ненужных страниц в кеше перед выгрузкой их на диск реализована в ядре. Поэтому для её активации нужно передать ядру несколько параметров. zswap инициализируется раньше, чем загружаются модули алгоритмов сжатия. Поэтому нужно будет переключить алгоритм сжатия после загрузки с помощью настройки.</p><p>Редактируем конфигурационный файла /etc/default/grub:<br /></p><div class="codebox"><pre><code>sudo nano /etc/default/grub</code></pre></div><p>находим строчку, начинающуюся с GRUB_CMDLINE_LINUX_DEFAULT= и дописываем в конец через пробел два параметра zswap.enabled=1 zswap.max_pool_percent=15. Получится что-то типа:<br /></p><div class="codebox"><pre><code>GRUB_CMDLINE_LINUX_DEFAULT=&quot;zswap.enabled=1 zswap.max_pool_percent=15&quot;</code></pre></div><p>где параметры указаны для 4Гб ОЗУ<br />zswap.enabled=1 — включает механизм.<br />zswap.max_pool_percent=15 — ограничивает максимальный размер кэша zswap до 15% от оперативной памяти (около ~600 МБ). Для 8Гб будет 20% и для 16Гб будет 25%</p><p>Применяем настройки к ядру:<br /></p><div class="codebox"><pre><code>sudo update-grub</code></pre></div><p>Загружаем один из модулей сжатия, который будет нужен (для алгоритма сжатия по-умолчанию lzo ничего из нижеперечисленного делать не нужно!).<br />Для lz4 это команда:<br /></p><div class="codebox"><pre><code>echo &quot;lz4&quot; | sudo tee /etc/modules-load.d/lz4.conf</code></pre></div><p>Для zstd это команда:<br /></p><div class="codebox"><pre><code>echo &quot;zstd&quot; | sudo tee /etc/modules-load.d/zstd.conf</code></pre></div><p>Создаём сервис, который при загрузке будет переключать алгоритм zswap<br /></p><div class="codebox"><pre><code>sudo nano /etc/systemd/system/zswap.service</code></pre></div><p>со следующим содержимым:<br /></p><div class="codebox"><pre><code>[Unit]
Description=Set Zswap compressor
After=systemd-modules-load.service local-fs.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c &#039;echo lz4 &gt; /sys/module/zswap/parameters/compressor&#039;

[Install]
WantedBy=multi-user.target</code></pre></div><p>где, &quot;<span style="color: green">echo lz4</span>&quot; активирует алгоритм lz4. Если нужен алгоритм zstd, то строчку<br /></p><div class="codebox"><pre><code>ExecStart=/bin/bash -c &#039;echo lz4 &gt; /sys/module/zswap/parameters/compressor&#039;</code></pre></div><p>заменить на<br /></p><div class="codebox"><pre><code>ExecStart=/bin/bash -c &#039;echo zstd &gt; /sys/module/zswap/parameters/compressor&#039;</code></pre></div><p>Добавляем сервис в автозагрузку<br /></p><div class="codebox"><pre><code>sudo systemctl enable --now zswap.service</code></pre></div><p>и перегружаемся для применения настроек.</p><p>Проверяем что zswap активировался:<br /></p><div class="codebox"><pre><code>cat /sys/module/zswap/parameters/enabled</code></pre></div><p>Проверяем, что zswap успешно загрузился:<br /></p><div class="codebox"><pre><code>sudo dmesg | grep zswap</code></pre></div><p>Проверяем настройку алгоритма сжатия<br /></p><div class="codebox"><pre><code>cat /sys/module/zswap/parameters/compressor</code></pre></div><p>Уменьшаем обращение к swap:<br /></p><div class="codebox"><pre><code>echo &#039;vm.swappiness=30&#039; | sudo tee /etc/sysctl.d/99-swappiness.conf</code></pre></div></div></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Настройка zram</div><div class="fancy_spoiler"><p>Фактически для начальной настройки достаточно двух параметров - это алгоритм сжатия, от которого зависит нагрузка на процессор и размер ZRAM. Размер ZRAM - это первоначальный (несжатый) объём из ОЗУ, который нужно переместить в ZRAM для того, чтобы ZRAM считался полностью заполненным (те самые 10Мб из примера выше). Дальше уже идёт тюнинг для гиков, который нам не нужен. Гибернация при этом работать не будет.</p><p>Для 2 ядерных процессоров используется алгоритм сжатия lz4, для остальных zstd.</p><p>Теперь примерные соответствия объёма ОЗУ и ZRAM:<br />16Гб - 12288Мб<br />32Гб - 16384Мб<br />64Гб+ - 24576Мб<br />Для 32 Гб и выше ZRAM служит скорее страховкой, если вдруг памяти станет не хватать.</p><p>Итак, ставим пакет с ZRAM:<br /></p><div class="codebox"><pre><code>sudo aptitude install systemd-zram-generator</code></pre></div><p>Создаём конфиг для него:<br /></p><div class="codebox"><pre><code>sudo nano /etc/systemd/zram-generator.conf</code></pre></div><p>со следующим содержимым:<br /></p><div class="codebox"><pre><code>[zram0]
zram-size = 24576
compression-algorithm = zstd
swap-priority = 100
fs-type = swap</code></pre></div><p>Где параметры <span style="color: green">zram-size </span>и <span style="color: green">compression-algorithm</span> подставляем для своих значений из данных выше.<br /><span style="color: green">zram-size</span>= 24576 - Задаёт размер ZRAM-устройства в мегабайтах (24 ГБ). Это первоначальный (несжатый) объём из ОЗУ, который нужно переместить в ZRAM для того, чтобы ZRAM считался полностью заполненным.<br /><span style="color: green">compression-algorithm</span> = zstd - Выбирает алгоритм сжатия. zstd - это современный стандарт, который даёт отличный баланс между степенью сжатия и скоростью работы.lz4 - для маломощных машин.<br />Список поддерживаемых алгоритмов и текущий алгоритм можно посмотреть командой:<br /></p><div class="codebox"><pre><code>cat /sys/block/zram0/comp_algorithm</code></pre></div><p><span style="color: green">swap-priority</span> = 100 - Устанавливает высокий приоритет для этого свопа. Это гарантирует, что система будет использовать ZRAM в первую очередь, а не дисковой файл подкачки, который можно отключить для ОЗУ 16Гб и больше.<br /><span style="color: green">fs-type</span> = swap - Указывает, что устройство будет использоваться как пространство подкачки.<br />Заставляем systemd перечитать конфигурации, чтобы создать юниты:<br /></p><div class="codebox"><pre><code>sudo systemctl daemon-reload</code></pre></div><p>Смотрим, что диск создался:<br /></p><div class="codebox"><pre><code>sudo zramctl</code></pre></div><p>где:<br />DATA - это несжатые данные<br />COMPR - сжатые данные<br />TOTAL - Общий объём выделенной физической памяти для ZRAM (обычно чуть больше COMPR)<br />Проверяем, что он появился в списке свап-файлов:<br /></p><div class="codebox"><pre><code>sudo swapon --show</code></pre></div><p>Проверка приоритетов при нескольких swap:<br /></p><div class="codebox"><pre><code>cat /proc/swaps </code></pre></div><p>Убедиться, что приоритет ZRAM выше, чем у обычного файла подкачки (значение столбца Priority)</p><p>Проверяем как система с ZRAM будет себя вести под нагрузкой. Для этого используем утилиту stress:<br /></p><div class="codebox"><pre><code>stress --vm 1 --vm-bytes 128G --timeout 60s</code></pre></div><p>где<br />--vm 1 - запускает один процесс, который будет заниматься выделением памяти<br />--vm-bytes 128G - указывает размер блока памяти, который процесс пытается выделить. У меня это 128Гб, а вы указывайте свой.<br />--timeout 60s - время, через которое процесс завершится<br />В то время, пока утилита stress работает, не должно быть никаких лагов и фризов с интерфейсом.<br /><a href="https://i.gyazo.com/90dffe4d0bf6896b2e5e23d359b8ee1f.png"><span class="postimg"><img src="https://i.gyazo.com/thumb/400/90dffe4d0bf6896b2e5e23d359b8ee1f" alt="https://i.gyazo.com/thumb/400/90dffe4d0bf6896b2e5e23d359b8ee1f" /></span></a></p><p>Отключаем все свопы(после перезагрузки создастся ZRAM):<br /></p><div class="codebox"><pre><code>sudo swapoff -a</code></pre></div><p>Отключаем свап файл в /etc/fstab:<br /></p><div class="codebox"><pre><code>sudo nano /etc/fstab</code></pre></div><p>Закомментировать или удалить строчку, начинающуюся на /swapfile<br />Удаляем сам своп-файл (если он в виде своп-файла):<br /></p><div class="codebox"><pre><code>sudo rm /swapfile</code></pre></div><p>Или удаляем раздел с диска с помощью утилиты GParted<br />Удаляем файл /etc/initramfs-tools/conf.d/resume, который указывает initramfs, на каком устройстве подкачки (swap) сохранён образ оперативной памяти для гибернации:<br /> </p><div class="codebox"><pre><code>sudo rm /etc/initramfs-tools/conf.d/resume</code></pre></div><p>Снижаем обращение к своп-файлу:<br /></p><div class="codebox"><pre><code>echo &#039;vm.swappiness=1&#039; | sudo tee /etc/sysctl.d/99-swappiness.conf</code></pre></div><p>Перезагружаемся. Проверка командами, которые описаны выше.</p></div></div></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Установка композитора Picom. Опционально</div><div class="fancy_spoiler"><p>Стандартный композитор xfwm4 (он отвечает за тени и прозрачность) может создавать дополнительную нагрузку и задержку даже в полноэкранном режиме, хотя визуальные эффекты там не нужны. Если вы хотите сохранить их вне полноэкранного режима, можно установить сторонний композитор Picom, который умеет автоматически отключаться в полноэкранных приложениях. Если эффекты у вас отключены, то устанавливать Picom не обязательно.</p><p>Устанавливаем пакет picom:<br /></p><div class="codebox"><pre><code>sudo aptitude install picom</code></pre></div><p>Отключаем встроенный композитинг xfwm4 (вместо команды можно просто снять галочку Диспетчер настроек-&gt;Диспетчер окон(дополнительно)-&gt;Эффекты-&gt;Включить эффекты):<br /></p><div class="codebox"><pre><code>xfconf-query -c xfwm4 -p /general/use_compositing -s false</code></pre></div><p>Эффекты исчезнут сразу, перезагрузка не требуется: пропадут все тени, прозрачность и т.д.</p><p>Настраиваем Picom. Сначала создадим каталог, где будет размещаться конфигурационный файл picom.conf:<br /></p><div class="codebox"><pre><code>mkdir -p ~/.config/picom</code></pre></div><p>Создаём файл конфигурации для picom:<br /></p><div class="codebox"><pre><code>nano ~/.config/picom/picom.conf</code></pre></div><p>со следующим содержимым:<br /></p><div class="codebox"><pre><code>backend = &quot;glx&quot;;
vsync = true;
unredir-if-possible = true;</code></pre></div><p>где<br /><span style="color: green">backend</span> = &quot;glx&quot;; — использовать OpenGL для ускорения (вместо xrandr)<br /><span style="color: green">vsync</span> = true; — включить вертикальную синхронизацию для устранения разрывов изображения.<br /><span style="color: green">unredir-if-possible</span> = true; — автоматически отключать Picom в полноэкранных приложениях (играх) для лучшей производительности.</p><p>Можно добавить к этому типовые настройки для теней и прозрачности:<br /></p><div class="codebox"><pre><code>shadow = true;
shadow-radius = 7;
shadow-offset-x = -7;
shadow-offset-y = -7;

inactive-opacity = 1.0;
frame-opacity = 1.0;

fading = true;
fade-in-step = 0.03;
fade-out-step = 0.03;</code></pre></div><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Вернуть всё как было</div><div class="fancy_spoiler"><p>Удалить процесс picom:<br /></p><div class="codebox"><pre><code>killall picom</code></pre></div><p>Включить Эффекты (композитинг):<br /></p><div class="codebox"><pre><code>xfconf-query -c xfwm4 -p /general/use_compositing -s true</code></pre></div><p>Удалить пакет picom и конфигурационные файлы:<br /></p><div class="codebox"><pre><code>sudo aptitude purge picom</code></pre></div></div></div></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; AMD</div><div class="fancy_spoiler"><p>У процессора AMD есть так называемые &quot;золотые ядра&quot;. Это ядра, которые производитель отобрал при тестировании кристалла как способные работать на наибольшей частоте при лучшем(меньшем) напряжении.<br />У Ryzen 5000 (Zen 3) таких ядер обычно два.<br />Linux использует эту информацию, чтобы планировщик задач чаще назначал однопоточные нагрузки именно на эти ядра. Всё происходит автоматически и обычно не требует вмешательства. Однако процессоры AMD поддерживают небольшой разгон и возможность снижения напряжения на отдельных ядрах, тем самым снижая температуру пакета в целом и повышая бурст. Я не буду тут рассматривать настройки PBO и Curve Optimizer, а просто покажу как узнать свои &quot;золотые ядра&quot;.<br />Для этого нам понадобится скрипт <a href="https://gist.github.com/mindkrypted/608819fa8fa97eb4c55741aea5c7927c">amd-core-ranker.sh</a>. К сожалению, он точно работает лишь для 8 ядерных процессоров.<br />Создаём файл:<br /></p><div class="codebox"><pre><code>nano amd-core-ranker.sh</code></pre></div><p>со следующим содержимым:<br /></p><div class="codebox"><pre><code>#!/bin/bash

# A script to query, map, and display AMD preferred core rankings
# using the modern amd-pstate driver&#039;s sysfs interface.

# --- Prerequisites Check ---
if ! command -v lscpu &amp;&gt; /dev/null; then
    echo &quot;Error: &#039;lscpu&#039; command not found. Please install the &#039;util-linux&#039; package.&quot;
    exit 1
fi

RANKING_FILE=&quot;amd_pstate_prefcore_ranking&quot;
if [ ! -f &quot;/sys/devices/system/cpu/cpu0/cpufreq/${RANKING_FILE}&quot; ]; then
    echo &quot;Error: AMD P-State ranking file not found.&quot;
    echo &quot;This script is designed for systems using the amd-pstate driver&quot;
    echo &quot;with a kernel that exposes &#039;/sys/.../cpufreq/${RANKING_FILE}&#039;.&quot;
    exit 1
fi

# --- Data Collection ---

# Step 1: Create a mapping of [Logical CPU] -&gt; Physical Core
declare -A logical_to_physical
while IFS=, read -r cpu core; do
    # Skip comment lines from lscpu&#039;s parseable output
    [[ &quot;$cpu&quot; =~ ^# ]] &amp;&amp; continue
    if [[ -n &quot;$cpu&quot; &amp;&amp; -n &quot;$core&quot; ]]; then
        logical_to_physical[&quot;$cpu&quot;]=&quot;$core&quot;
    fi
done &lt; &lt;(lscpu --parse=CPU,CORE)

# Check if the mapping was successful
if [ ${#logical_to_physical[@]} -eq 0 ]; then
    echo &quot;Error: Failed to create logical-to-physical CPU map.&quot;
    echo &quot;There might be an issue with the &#039;lscpu --parse&#039; command on your system.&quot;
    exit 1
fi

# Step 2: Aggregate data per physical core
declare -A core_ranks
declare -A core_logicals
max_rank=0

for cpu_dir in /sys/devices/system/cpu/cpu[0-9]*; do
    logical_cpu_id=$(basename &quot;$cpu_dir&quot; | tr -d &#039;cpu&#039;)
    physical_core_id=${logical_to_physical[$logical_cpu_id]}

    # Ensure physical_core_id is not empty before proceeding
    if [ -z &quot;$physical_core_id&quot; ]; then continue; fi

    ranking_path=&quot;$cpu_dir/cpufreq/${RANKING_FILE}&quot;
    if [ -f &quot;$ranking_path&quot; ]; then
        rank=$(cat &quot;$ranking_path&quot;)

        # Store the rank for the physical core
        core_ranks[&quot;$physical_core_id&quot;]=$rank

        # Keep track of the maximum rank found for tier calculation
        (( rank &gt; max_rank )) &amp;&amp; max_rank=$rank

        # Append the logical CPU to its physical core&#039;s list
        if [ -z &quot;${core_logicals[$physical_core_id]}&quot; ]; then
            core_logicals[&quot;$physical_core_id&quot;]=&quot;$logical_cpu_id&quot;
        else
            # Ensure logical CPUs are sorted numerically for consistent output
            core_logicals[&quot;$physical_core_id&quot;]=$(echo -e &quot;${core_logicals[$physical_core_id]}\n$logical_cpu_id&quot; | sort -n | tr &#039;\n&#039; &#039;,&#039; | sed &#039;s/,$//&#039;)
        fi
    fi
done

# --- Data Presentation ---

# Step 3: Print header
printf &quot;%-6s %-12s %-12s %-6s %-10s %s\n&quot; &quot;Rank&quot; &quot;Phys. Core&quot; &quot;Logical CPUs&quot; &quot;CCD&quot; &quot;Value&quot; &quot;Quality&quot;
printf &quot;%-6s %-12s %-12s %-6s %-10s %s\n&quot; &quot;------&quot; &quot;------------&quot; &quot;------------&quot; &quot;------&quot; &quot;----------&quot; &quot;----------&quot;

# Step 4: Create sorted output and print it
rank_counter=0
# Loop through physical core IDs, get their ranks, and sort by rank (descending)
# Then pipe to the final formatting stage
for core_id in &quot;${!core_ranks[@]}&quot;; do
    echo &quot;${core_ranks[$core_id]} $core_id ${core_logicals[$core_id]}&quot;
done | sort -k1 -nr | while read -r rank core logicals; do

    ((rank_counter++))

    # Determine CCD (assumes 16-core / 2-CCD consumer layout like 5950X/7950X)
    ccd=&quot;-&quot;
    if (( core &gt;= 0 &amp;&amp; core &lt;= 7 )); then ccd=&quot;0&quot;; fi
    if (( core &gt;= 8 &amp;&amp; core &lt;= 15 )); then ccd=&quot;1&quot;; fi

    # Determine Quality Tier based on performance relative to the best core
    # Using integer arithmetic for portability
    quality=&quot;Standard&quot;
    if (( max_rank &gt; 0 )); then # Avoid division by zero
        if (( rank * 100 &gt;= max_rank * 98 )); then
            quality=&quot;Gold Tier&quot;
        elif (( rank * 100 &gt;= max_rank * 95 )); then
            quality=&quot;Silver Tier&quot;
        elif (( rank * 100 &gt;= max_rank * 90 )); then
            quality=&quot;Bronze Tier&quot;
        fi
    fi

    # Print the formatted line
    printf &quot;%-6s %-12s %-12s %-6s %-10s %s\n&quot; &quot;#$rank_counter&quot; &quot;$core&quot; &quot;$logicals&quot; &quot;$ccd&quot; &quot;$rank&quot; &quot;$quality&quot;
done</code></pre></div><p>Делаем скрипт исполняемым:<br /></p><div class="codebox"><pre><code>chmod +x amd-core-ranker.sh</code></pre></div><p>и запускаем:<br /></p><div class="codebox"><pre><code>./amd-core-ranker.sh</code></pre></div><p>У меня получилось, что &quot;золотые ядра&quot; это 1 и 7 (у них наибольшее количество &quot;попугаев&quot; - 196):<br /></p><div class="codebox"><pre><code>Rank   Phys. Core   Logical CPUs CCD    Value      Quality
------ ------------ ------------ ------ ---------- ----------
#1     7            7,15         0      196        Gold Tier
#2     1            1,9          0      196        Gold Tier
#3     0            0,8          0      191        Silver Tier
#4     2            2,10         0      186        Bronze Tier
#5     5            5,13         0      181        Bronze Tier
#6     6            6,14         0      176        Standard
#7     3            3,11         0      171        Standard
#8     4            4,12         0      166        Standard</code></pre></div><p>В дальнейшем, при настройке Curve Optimizer на &quot;золотые ядра&quot; обычно подают меньшее снижение напряжения (условно -20 против -25 для остальных).</p></div></div></li><li><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; Стресс тест системы</div><div class="fancy_spoiler"><p>Для тестирования устойчивости системы и системы охлаждения, нужно запустить стресс тест. Но для начала нужно установить инструменты.<br />Установка утилиты тестирования:<br /></p><div class="codebox"><pre><code>sudo aptitude install stress-ng</code></pre></div><p>Установка пакета для получения информации о CPU:<br /></p><div class="codebox"><pre><code>sudo aptitude install linux-cpupower</code></pre></div><p>Перед тестированием запустить на разных вкладках следующие мониторы.<br />Просмотр ошибок WHEA в реальном времени:<br /></p><div class="codebox"><pre><code>sudo dmesg -w | grep -iE &quot;mce|whea|hardware error|correctable|uncorrectable&quot; </code></pre></div><p>Мониторинг частоты и мощности процессора в реальном времени:<br /></p><div class="codebox"><pre><code>sudo turbostat --quiet --show Core,CPU,Bzy_MHz,PkgWatt --interval 5 </code></pre></div><p>Запуск мощного стресс теста (тоже на своей вкладке терминала):<br /></p><div class="codebox"><pre><code>stress-ng --cpu 0 --cpu-method matrixprod --cache 4 --cache-enable-all --vm 2 --vm-bytes 4G --timeout 30m --metrics-brief</code></pre></div></div></div></li></ul>]]></description>
			<author><![CDATA[null@example.com (survordie)]]></author>
			<pubDate>Fri, 14 Aug 2026 11:45:52 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=473070#p473070</guid>
		</item>
	</channel>
</rss>
