Нужен ли swap для linux на ssd

Обновлено: 02.07.2024

SWAP один из важных параметров для стабильной работы операционной системы Linux. Споров о том как правильно использовать в интернете существует масса. Для правильной настройки надо иметь понимание для чего используется ваша система.

Введение

Постараюсь коротко рассказать основные моменты которые надо учитывать и дать практические советы проверенные на личном опыте.

Нужен SWAP или нет?

Однозначно нужен! Можно обойтись и без него, но тогда имейте в виду, что:

  1. SWAP используется при организации режима сна и при его отсутствии про этот режим можно забыть,
  2. Если SWAP отсутствует и память будет исчерпана тогда компьютер зависнет и потребуется выполнять полный сброс (hard reset). У меня был случай когда браузер Chrome скушал всю память и повесил систему.

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

Размер SWAP

Советов по размеру множество, но мы остановимся на советах разработчиков Red Hat (CentOS):

  • Если памяти < 2G то необходимый объем S = M *2
  • Если памяти > 2G то необходимый объем S = M + 2

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

Варианты размещения SWAP

  • на разделе диска,
  • в файле,
  • или в оперативной памяти использую zRAM.

Исторически в Linux SWAP размещался на разделе, но в современных дистрибутивах производительность SWAP-файла не уступает SWAP-разделу и это весьма радует.

SWAP-раздел

Когда вы точно знаете, что размер оперативной памяти меняться не будет и вы точно уверены в размере SWAP разумно выделить раздел при установке системы.

SWAP-файл

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

ZRAM и ZSWAP

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

ZRAM — это модуль ядра Linux, позволяющий сжимать содержимое оперативной памяти, и таким образом увеличивать ее объем в несколько раз. ZRAM создает сжатое блочное устройство в ОЗУ которое чаще всего используется как swap. При этом степень сжатия данных получается в среднем 3:1. Это означает что на 1 гигабайт подкачки будет использовано в 333 мегабайт физической памяти.

ZSWAP — отличается от ZRAM тем, что использует существующий swap-раздел на диске, а в ОЗУ создаётся пул со сжатыми данными (кэшем). После того как пул до отказа забьётся сжатыми данными, он сбросит их в раздел подкачки и снова начнёт принимать и сжимать данные. По утверждению разработчиков, в их конфигурации при компиляции ядра в ситуации когда происходит свопинг, выигрыш по объему ввода/вывода составил 76%, а время выполнения операции сократилось на 53%. При использовании ZSWAP, используется раздел swap на диске, в ОЗУ хранится только сжатый кэш.

Меня самого занимает вопрос, как правильнее устанавливать Linux на твёрдотельный накопитель?

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

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

Но swap-раздел, по моим наблюдениям, по диску так не ползает.

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

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

Свой ноутбук, с которого сейчас пишу, я сразу покупал под Linux и мудро, или не совсем мудро, сознательно выбрал модель с HDD и на нём у меня имеется swap-раздел.

Но технический прогресс на месте не стоит и хочется, конечно, иметь винчестер побыстрее и, на моём сегодняшнем уровне понимания этого вопроса, на SSD накопителе Linux следует использовать со swap-файлом.

Я, как инженер-механик по образованию, смотрю на электронику несколько со стороны и мне очень интересно узнать мнение по эксплуатации Linux на SSD тех специалистов, которые хорошо знают устройство SSD-накопителей и алгоритмы их прошивок.

Вводим в терминале:

После ввода команды следует нажать клавишу Enter . В результате будет выведено числовое значение, которое скорее всего будет равно 60 .

sudo gpt-get install gksu leafpad

Нажимаем Enter и вводим по запросу пароль.

gksudo leafpad /etc/sysctl.conf

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

Сохраните файл конфигурации и закройте текстовый редактор. После этого вам следует перезагрузить компьютер.

После перезагрузки компьютера можно снова проверить значение параметра конфигурации swappiness.

В окно терминала вводим ту же команду:

После ввода команды следует нажать клавишу Enter . В результате должно быть показано значение 10 .

swap

Какой должен быть раздел подкачки(swap)? Должен ли swap быть в два раза больше размера ОЗУ или наоборот половины размера ОЗУ? Нужно ли вообще его создавать, если в моей системе есть несколько ГБ ОЗУ?

Это наиболее часто задаваемые вопросы о выборе размера подкачки при установке Linux.

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

В течение долгого времени считалось, что рекомендуемый размер swap должен быть вдвое меньше размера RAM, но это золотое правило больше не применимо к современным компьютерам. У нас есть системы с объемом оперативной памяти до 128 ГБ, у большинства старых компьютеров, даже нету такого жесткого диска.

128gb ram

Но какой размер подкачки вы выделите системе с 32 ГБ ОЗУ? 64GB? Это была бы смехотворная трата жесткого диска, не так ли?

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

Что такое swap(раздел подкачки, файл подкачки)?

При запуске приложения ваша система использует память произвольного доступа (RAM). Если работает мало приложений, ваша система справляется с доступной оперативной памятью.

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

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

Это звучит здорово. Это означает, что если вы выделите 50% размера swap, ваша система сможет одновременно запускать сотни, или возможно, тысячи приложений? Но это не совсем так.

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

Другими словами, небольшой обмен полезен, а уже много будет бесполезно.

Зачем нужен swap(раздел подкачки)?

Если в вашей системе, установлена оперативная память менее 1 ГБ, вы просто обязаны использовать swap, поскольку большинство приложений очень быстро заберут себе эту память.
Если ваша система использует ресурсо-затратные приложения, такие как видеоредакторы, было бы неплохо использовать немного подкачки, так как ваша оперативная память очень быстро израсходуется.
Если вы используете спящий режим, то вы должны использовать больше swap, потому что содержимое ОЗУ будет перемещено в раздел подкачки. Это также означает, что размер подкачки должен быть, по крайней мере, равен размеру ОЗУ.

Нужен ли вам swap, если у вас много оперативной памяти?

Это действительно хороший вопрос. Если у вас 32 ГБ или 64 ГБ ОЗУ, скорее всего, ваша система, возможно, никогда не будет использовать всю оперативную память и, следовательно, никогда не будет использовать раздел подкачки.

Но я все же думаю что она нужна. Я предполагаю, что если ваша система имеет 32 ГБ оперативной памяти, она также должна иметь жесткий диск объемом где-то 100 ГБ. Выделение пары гигабайт для раздела подкачки не повредит. Это обеспечит дополнительный уровень стабильности, если неисправная программа начнет злоупотреблять ОЗУ, и если вы захотите перевести компьютер в режим сна.

Но можно ли вообще обойтись без раздела подкачки?

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

Какой должен быть раздел подкачки?

Теперь возникает большой вопрос. Какой должен быть идеальный раздел подкачки?

И проблема здесь в том, что нет определенного ответа на этот вопрос об изменении раздела подкачки. Есть только общие рекомендации.

У разных людей свое мнение относительно идеального размера swap. Даже основные дистрибутивы Linux не имеют одинакового руководства по размеру swap.

Если вы прочитаете предложение Red Hat, то они рекомендуют что размер подкачки должен составлять 20% оперативной памяти для современных систем (то есть для 4 ГБ или выше ОЗУ).

В CentOS например, предлагают в два раза больше раздел подкачки чем ОЗУ, если ОЗУ меньше 2 ГБ

Ubuntu имеет совершенно другую перспективу по размеру swap, поскольку они учитывают спящий режим. И если вам нужен спящий режим, то в Ubuntu рекомендуют чтобы swap был равен ОЗУ.

Но если вам не нужен спящий режим,и если оперативной памяти больше 1 ГБ, размер подкачки должен быть как минимум равным квадратному корню от объема ОЗУ и не более чем в два раза больше ОЗУ

Каким же на самом деле должен быть раздел подкачки? Ответ никогда не бывает простым. Как было сказано ранее, в течение долгого времени, было рекомендовано создавать раздел подкачки который вдвое больше объема оперативной памяти.

Какой размер подкачки вы используете в своей системе? Напишите пожалуйста в комментариях ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

LINUX для всех!

Настройка диска ssd в ubuntu в связке с hdd

Хочу поделиться опытом настройки диска ssd в Ubuntu. А также развеять мифы оптимизации. К тому же расскажу о монтировании дополнительного диска hdd, чтобы хранить большие объемы информации.

На свой ноутбук купил ssd диск, к тому же вместо оптического привода вставил hdd диск на 500 гигабайт, чтобы хранить фильмы, музыку, фотки.

1. Выравнивание диска ssd.

Итак, хотелось бы сказать про то, что на многих сайтах советуют выравнивать диски ssd. Хочу вас уверить, что и fdisk и gparted и стандартный менеджер разбивки дисков при установке ubuntu автоматически выравнивают разделы.

Вот таким образом я разбил свой диск ssd:



Для корневого раздела "/" выделил стандартно 40 гигабайт.
Для "swap" 4 гигабайта. (swap это хорошее дело на ssd, дальше опишу почему)
Для "/home" домашнего каталога - все остальное.

( Первый раздел это 200 мегабайт - загрузочный раздел для uefi.
В следующей статье расскажу как легко и просто поставить ubuntu на uefi )

"aligned", то значит ваш диск выравнен.
И не надо читать кучу форумов об этом, сидеть с калькулятором и вымерять, все делается автоматически, при использовании популярных программ, таких как gparted, gdisk, fdisk или менеджер дисков установщика.

2. Swap раздел нужен на ssd.

40:1 чтение:запись.
Поэтому не нужно объяснять, что чтение с ssd диска будет идти быстрее, чем с hdd.
Единственное, что нужно сделать, это изменить параметр swappiness на значение 10 . О том, как это можно сделать, написано в этой моей статье:

3. Настройка Trim.

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

Если TRIM не работает, накопитель узнает об удалении файла только в тот момент, когда ОС прикажет ему перезаписать LBA, покрывающий ставший ненужным файл.

То можно перейти к самой настройке включения.

То значит Trim был успешно выполнить.

Автоматическое включение можно настроить добавление discard в опции монтирования fstab, об этом расскажу ниже. ( Но многие говорят, что это плохой способ )
Либо создав задачу в Cron (менеджере задач по расписанию):
Создаем ежедневную задачу с именем "trim" следующей командой: sudo gedit /etc/cron.daily/trim
И в открывшийся текстовый файл вставляем следущее:

После чего, сохраняем и закрываем.
Теперь сделаем данный файл исполняемым следующей командой: sudo chmod +x /etc/cron.daily/trim
Теперь ubuntu будет каждый день выполнять trim.
Не советую добавлять параметр discard в опции монтирования fstab.

Стоит упомянуть, что Trim в linux работает только со следующими файловыми системами: ext4 и btrfs.

4. Монтирование разделов в fstab.
При загрузке системы, у вас монтируются диски и разделы, которые указаны в файле:

В принципе, если у вас один жесткий диск ssd, то можете смело им пользоваться без тех настроек, что описаны в данном пункте.
Я в данном файле примонтировал второй жесткий диск, для того, чтобы примонтировать каталоги Музыка, Видео и Изображения, которые будут весить много места и на sdd они все не поместятся.
Ну и еще можно переместить на hdd с ssd каталог /var, так как в него пишется очень много всякого, например логи и деб пакеты перед установкой программ.

Отредактируем данный файл, выполнив следующую команду в терминале: sudo gedit /etc/fstab
Откроется текстовый файл, где перечислены монтируемые устройства:
У меня он вот такой (кликните по изображению для увеличения):



Разберем теперь как примонтировать (подключить) новый жесткий диск к системе.
Это у меня делается следующей строчкой:
UUID="5cfa4dbd-fca2-470a-a785-ebc56cd29387" /diskette ext4 defaults 0 2

Разберем данную команду подробнее.
1 параметр. Это UUID устройства. Увидеть его можно либо в gparted щелкнув по разделу дважды мышкой. Либо выполнив в терминале команду: blkid
И появится весь список устройств с UUID:

Мне нужен выделенный раздел жесткого диска, в этой строчке выделяем наш UUID и прописываем в первом параметре .

2 параметр. Это точка монтирования.
Это папка, через которую будет производиться обращение к разделу. В принципе, может быть любой.
Прежде чем монтировать в какую-либо папку, не забудьте ее создать.
Например в моем случае это sudo mkdir /diskette

3 параметр. Это файловая система. Думаю объяснения не нужно, если не уверены как пишется или не знаете, то для ленивых есть параметр "auto".

4 параметр. Это параметры монтирования. В принципе достаточно defaults.
Вот какие параметры можно использовать:
exec - Разрешение на запуск исполняемых файлов. Опция включена по-умолчанию.
noexec - Запрет на запуск исполняемых файлов.
auto - Раздел будет автоматически монтироваться при загрузке системы. По-умолчанию.
noauto - Раздел не будет автоматически монтироваться при загрузке системы.
ro - Монтирование только для чтения.
rw - Монтирование для чтения и записи. По-умолчанию.
user - Разрешение простым пользователям монтировать/демонтировать этот раздел.
nouser - Запрещает простым пользователям монтировать/демонтировать этот раздел. По-умолчанию.
defaults - Использование всех параметров по-умолчанию.
discard - Включает Trim на раздела с ФС ext4 и btrfs (очень не рекомендуется)

5 параметр. Флаг бэкапа.
Если 1 - то программа dump включит этот раздел при резервном копировании.
Если 0 - то этот раздел не будет включен при резервном копировании.

6 параметр. Порядок проверки разделов.
Устанавливает порядок проверки раздела при монтировании на наличие ошибок. Если установить один и тот же порядок для двух разделов, они будут проверяться одновременно.
Если 0 - раздел не проверяется.

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

Но если мы выставили параметр монтирования defaults, то на данном жестком диске мы не сможем выполнять операции создания и удаления.
Для этого нам нужно получить права на новый диск, делается это очень просто, выполняем в терминале команду: sudo chmod -R 777 /diskette/
естественно в команде вместо /diskette/ вы указываете свою точку монтирования.


И теперь, когда мы примонтировали жесткий диск, мы можем перегрузиться и проверить что он монтируется.
Теперь вот можно перейти к самому интересному. А именно к монтированию каталогов. Переносу Музыка, Видео, Загрузки на HDD, потому что на нем намного больше места.
Почему не перенести всю папку home?
Потому что в ней хранятся файлы конфигураций и многое другое, высокая скорость чтения которых обязательна. Иначе зачем вообще покупать ssd?

Монтируются каталоги следующим способом.
В каталоге точки монтирования, у меня это /diskette/ создаем каталоги с такими же названиями Музыка, Видео и тд
После чего прописываем следующую команду:

Разберем данный случай для монтирования каталогов,
первым параметром мы указываем нашу новую папку на HDD, которая монтируется в каталог домашней папки Музыка.
Обязательные параметры none bind 0 0.
Таким образом вы можете прописать и другие каталоги по желанию.

Вот что получилось в моем случае:


В домашний каталог можно записать всего лишь 77 гигабайт, а в папку Видео можно записать почти 500 гигабайт информации.

Вот таким образом можно настроить свою систему.

Больше ничего делать не нужно с ssd. Не нужно настраивать commit, atime и прочую ересь, что несут в других блогах. Это все было актуально на старых моделях ssd, когда они только появились.

Читайте также: