Поиск по сайту:

Как увеличить пространство tmpfs в Linux


Вы когда-нибудь слышали о tmpfs в Linux? Это небольшая временная файловая система, находящаяся в памяти и устанавливаемая по умолчанию в дистрибутивах Linux. Сверхбыстрый, но обычно ограниченный по размеру. Можно ли его легко вырастить? Узнать больше!

Что такое tmpfs?

Все внутри компьютера имеет определенную скорость работы. Он начинается с ЦП (центрального процессора) вашего компьютера, который имеет набор кэшей L1-Lx (от уровня 1 до уровня x), которые очень малы (например, 16 КБ), но сверхбыстры (и, вероятно, сверхбыстры). -дорогой).

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

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

Однако при этом есть некоторые технические ограничения. Как только вы выключите компьютер, ваши файлы исчезнут. Неисправимого сбоя приложения может быть достаточно, чтобы перезагрузить компьютер и потерять файлы. Кроме того, вы никогда не сможете снова выключить свой компьютер, если только он не имеет какой-либо расширенной функции (которой, насколько мне известно, не существует) для хранения ваших файлов в микросхемах памяти, аналогичной кэш-памяти с поддержкой BBU (Battery Backup Unit). на рейд-контроллере.

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

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

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

Такие файлы являются временными и не представляют особой ценности (если не будет обнаружена ошибка, после которой данные могут быть скопированы обратно на основной диск), и поэтому они могут храниться в микросхемах вашей памяти. Вот что такое tmpfs: это временная файловая система в вашей памяти. Некоторые из вас могут сразу же возразить и сказать: «Это неправда», и вы будете правы. Читай дальше.

Те, кто возражал бы, могли бы сразу же утверждать, что пространство tmpfs не обязательно находится в памяти, и это правда. Вы можете рассматривать tmpfs как гибрид между настоящим электронным диском (диск, созданный в энергозависимой памяти) и фактическим постоянным дисковым хранилищем. В некоторых случаях ядро Linux выгружает содержимое tmpfs в пространство подкачки системы, которое может находиться на диске. Это делается прозрачно (без необходимости взаимодействия с пользователем).

Если вы хотите узнать больше о настройке виртуального диска, см. Наше руководство «Как создать RAM-диск в Linux».

Ваш текущий размер tmpfs

Теперь, когда мы определили пространство tmpfs, давайте посмотрим на текущий размер вашего пространства tmpfs. Вы можете думать о системе tmpfs как о виртуальном, временном, энергозависимом диске. Вы можете увидеть используемое пространство, используя df -h (использование места на диске файловой системы (df) в удобочитаемом формате, благодаря -h вариант):

df -h | grep -Ei 'shm|size'

Здесь мы используем df -h (объяснено выше) в сочетании с каналом (|) для отправки результирующего вывода из df -h в grep, который использует расширенный (-E) формат регулярного выражения без учета регистра (-i или просто i в сочетании с другим параметром), чтобы выбрать верхний заголовок (который включает слово Size) и любую строку, содержащую текст shm.

Причина, по которой мы выбираем shm, заключается в том, что почти всегда, как мы также можем видеть в этом выводе, пространство tmpfs сопоставляется с каталогом файловой системы /dev/shm. . Если приведенная выше команда не генерирует никаких выходных данных, просто выполните df -h и просмотрите общие результаты, чтобы найти пространство tmpfs, если оно есть.

Обратите внимание, что по умолчанию операционная система также выделяет/устанавливает некоторые пространства tmpfs, которые могут быть, например, сопоставлены/монтированы в /sys/fs/cgroup, /run и /run/lock. Пожалуйста, не пытайтесь изменить их.

Что касается /dev/shm и других каталогов, обратите внимание, что наличие этих папок в структуре каталогов операционной системы [дерево] не означает, что файлы фактически/физически хранятся на диске в какой-либо Каталог /dev/shm!

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

В этой конкретной системе пространство tmpfs составляет 32 ГБ, и почти все это не используется. То немногое, что используется (166 МБ), — это сама таблица мета/индекса каталога, которая невидима для пользователей, но предназначена для хранения файлов в структуре файловой системы. Размер tmpfs по умолчанию составляет половину системной памяти для данной операционной системы.

Это довольно большой tmpfs и будет технически оправдан только в некоторой степени в системе, например, с 40 ГБ или более физической памяти, хотя, в зависимости от обстоятельств, конкретный вариант использования может потребовать других настроек. В общем, я рекомендую, чтобы пространство tmpfs было меньше, чем, скажем, 70-80% памяти, и этот процент был бы значительно ниже, если бы ОЗУ (Оперативная память , еще одно сокращение или способ обозначения вашей системной памяти) изначально был небольшим.

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

Например, вы не хотели бы выделять 80% памяти, если ваша система имеет 2 ГБ памяти, так как это, вероятно, оставит слишком мало для правильной работы других вещей или вообще. Если, с другой стороны, у вас есть здоровенные 256 ГБ памяти, даже 90% из них (230,4 ГБ) оставят хорошие 25 ГБ, которых — в зависимости от варианта использования — может (а может и не быть) достаточно.

Подводя итог, я рекомендую вам всегда настраивать размер tmpfs в зависимости от 1) сколько места вам действительно нужно в tmpfs, 2) сколько памяти в вашей системе и 3) сколько фактической памяти помимо tmpfs используются другие приложения (включая ваши операционные, сервисы и т.д.). Опыт со всеми этими вещами помогает здесь.

Увеличение tmpfs в вашей системе

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

Сделать это довольно легко. Все, что нам нужно сделать, это вместо того, чтобы операционная система автоматически настраивала для нас пространство tmpfs /dev/shm, определить его статически вместо этого в обычном /etc/fstab файл, который управляет сопоставлением дисков при запуске. Мы просто добавляем:

# <file system> <mount point> <type> <options>                                       <dump> <pass>
tmpfs           /dev/shm      tmpfs  defaults,rw,nodev,nofail,noatime,nosuid,size=2G   0      0

в файл /etc/fstab. Не копируйте первую отмеченную строку (с префиксом #), так как она уже будет там. Кроме того, измените размер 2G (2 ГБ) на расчетное/оценочное требование для размера tmpfs. Вероятно, нецелесообразно устанавливать это близко к размеру доступной памяти или превышать его, как мы объясняли ранее.

Маркировка заголовков в файле /etc/fstab поясняет значения полей, а дополнительную информацию можно найти в руководстве fstab, которое можно получить, набрав man fstab. По сути, мы просим операционную систему смонтировать файловую систему tmpfs (расположение системы находится в памяти, поэтому вместо указания устройства мы указываем tmpfs. ) и тип tmpfs, смонтированный в /dev/shm.

Мы также устанавливаем ряд опций. Вы, скорее всего, захотите оставить defaults,rw,nodev,nofail как минимум (использовать значения по умолчанию, доступ для чтения/записи, отсутствие физического устройства и обязательно запускать операционную систему, если это mount как-то не получается.).

Вы также можете оставить параметры оптимизации noatime,nosuid, если хотите (что идеально подходит для настройки тестирования/контроля качества, так как это сделает его быстрее, сохраняя при этом меньше информации о файлах в пространстве tmpfs), или вы можете удалить их (и соответствующие им запятые). Также оставьте (и измените/укажите размер) параметр size=xG. Наконец, у нас есть довольно стандартный 0 0 для dump and pass (см. man fstab для получения дополнительной информации об этих двух параметрах).

После внесения изменений просто перезапустите систему и выполните df -h, чтобы убедиться, что ваше пространство tmpfs /dev/shm теперь имеет новый размер, который вы установили. быть. Если что-то пошло не так, просто проверьте dmesg (вводится в командной строке) и просмотрите вверх все красные сообщения об ошибках (вероятно, вам придется прокрутить), чтобы узнать, что пошло не так. Даже если что-то пошло не так, система все равно должна была запуститься нормально, при условии, что вы не удалили параметр nofail.

Однако для пользователей Ubuntu существует возможная ошибка nofail, о которой следует знать. Раньше [вместо этого] существовала альтернативная опция nobootwait, хотя неясно, можно ли ее использовать, и если да, то в каких версиях Ubuntu и ее производных [только]. В качестве окончательной альтернативы тесту, при условии, что используется SystemD, можно рассмотреть возможность использования тайм-аута x-systemd.device-timeout=10, где 10 — количество секунд, которое пользователь готов ждать во время запуска.

Подведение итогов

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

Мы также подробно объяснили tmpfs, узнали, как узнать текущий размер файловой системы tmpfs компьютера, и, наконец, рассмотрели, как изменить размер tmpfs.

Наслаждайтесь использованием tmpfs!