Оглавление
2. Для чего можно использовать tmpfs
4. Интерфейс (скрипт) для работы с tmpfs (файловой системой виртуальной памяти)
4.1 Скачать скрипт для работы с tmpfs (tmpfs-mounter)
4.3 Примеры использования tmpfs-mounter
Эта инструкция расскажет о tmpfs: как создать файловую систему tmpfs; также в этой статье будет дан скрипт ускоряющий работу с tmpfs и делающий взаимодействие с файловой системой tmpfs более удобной.
1. Что такое tmpfs
tmpfs — это файловая система виртуальной памяти.
Функция tmpfs позволяет создавать файловые системы, содержимое которых находится в виртуальной памяти. Поскольку файлы в таких файловых системах обычно находятся в оперативной памяти, доступ к файлам осуществляется чрезвычайно быстро.
Файловая система автоматически создаётся при монтировании файловой системы с типом tmpfs с помощью следующей команды:
sudo mount -t tmpfs -o size=10M tmpfs /mnt/mytmpfs
Файловая система tmpfs имеет следующие свойства:
- Файловая система может использовать пространство подкачки, когда не хватает физической памяти.
- Файловая система потребляет только столько физической памяти и пространства подкачки, сколько требуется для хранения текущего содержимого файловой системы.
- Во время операции перемонтирования (mount -o remount) размер файловой системы может быть изменён (без потери существующего содержимого файловой системы).
Если файловая система tmpfs размонтирована, её содержимое отбрасывается (теряется).
2. Для чего можно использовать tmpfs
Файловая система tmpfs отлично подойдёт для ресурсоёмких задач, узким местом которых является скорость чтения и записи на диск.
Смотрите пример использования tmpfs: Как ускорить создание словарей с паролями
Также tmpfs может пригодиться для уменьшения износа SSD/HDD при работе с обширными, но временными файлами. К примеру, мне нужно экспортировать большие базы данных из СУБД MariaDB в файлы, а затем эти файлы нужно сжать в архив и отправить по сети. После завершения отправки, файл больше не нужен и он удаляется. То есть мой SSD используется интенсивно, но в конечном счёте файлы удаляются после того, как выполнят их функцию. В этом и подобной ситуациях tmpfs отлично подойдёт.
Обратите внимание, что tmpfs теряет всё содержимое при перезагрузки компьютера или даже при размонтировании файловой системы. Поэтому tmpfs нужно использовать для временных файлов, либо после завершения работы с ними делать резервную копию на обычную файловую систему.
3. Как использовать tmpfs
На самом деле создание виртуальной файловой системы в оперативной памяти очень проста. Чтобы создать раздел tmpfs, начнём с создания точки монтирования. Вы можете выбрать постоянное расположение, но я предпочитаю создавать новую директорию для монтирования tmpfs его в папке /tmp:
mkdir /tmp/mytmpfs
Примечание: всё содержимое папки /tmp удаляется при перезагрузки компьютера.
Затем выполните следующую команду:
sudo mount -t tmpfs -o size=5g tmpfs /tmp/mytmpfs
В этой команде:
- 5g — размер виртуальной файловой системы в гигабайтах
- /tmp/mytmpfs — точка монтирования виртуальной файловой системы
Всё готово — теперь вы можете перейти в виртуальную файловую систему и выполнять различные операции:
cd /tmp/mytmpfs
Теперь операции чтения и записи на диск будут выполняться очень быстро (если узким местом не станет центральный процессор или скорость оперативной памяти).
Если в процессе работы tmpfs вы столкнётесь с тем, что у вас не хватает места на данном разделе, то вы можете увеличить размер раздела без потери данных, хранящихся на нём:
sudo mount -t tmpfs -o remount,size=10g tmpfs /tmp/mytmpfs
Обратите внимание на добавление опции remount: поскольку размер (size) также является опцией монтирования, которые указываются после -o, то эти две опции перечислены через запятую)
Если вы боитесь запутаться в синтаксисе, то вы можете просто указать опцию -o дважды (в данном случае -o remount и -o size=10g являются опциями для монтирования файловой системы):
sudo mount -t tmpfs -o remount -o size=10g tmpfs /tmp/mytmpfs
Последние две команды являются идентичными.
При перемонтирвоании не теряются данные, которые хранятся на разделе tmpfs.
После перезагрузки компьютера или размонтирования tmpfs данные на этом разделе будут потеряны.
Чтобы размонтировать раздел tmpfs выполните команду:
sudo umount /tmp/mytmpfs
4. Интерфейс (скрипт) для работы с tmpfs (файловой системой виртуальной памяти)
4.1 Скачать скрипт для работы с tmpfs (tmpfs-mounter)
Как можно было убедиться выше, начать работу с tmpfs можно буквально одной командой. Но если у вас возникает необходимость воспользоваться виртуальной файловой системой tmpfs эпизодически, то приходится лезть в справку, чтобы вспомнить опции этой команды. У меня такая же проблема и я решил её с помощью скрипта, который облегчает работу с tmpfs.
Возможно, вас это удивит, но у моего скрипта больше опций, чем у tmpfs 😄
В общем, вот исходный код скрипта:
#!/bin/bash # Made by MiAl for zaLinux.ru and Suay.site PROGNAME='tmpfs-mounter' #PROGNAME=$0 # default values of command line options size=10 path='mytmpfs' umount=0 show_information=0 remount=0 RED='\033[1;31m' BBlack='\033[1;30m' NC='\033[0m' # No Color # if you want to launch Double Commander, then set here your username here user= help=""" ${RED}All options are not mandatory:${NC} -h | --help Show this help and exit -s | --size Virtual memory filesystem size [Default: 10 GB] -p | --path Path (after /tmp/) to the virtual memory filesystem [Default: mytmpfs, i.e. /tmp/mytmpfs] -u | --umount Unmount the virtual memory filesystem -i | --info Check if the virtual memory filesystem is already mounted -r | --remount Remount the virtual memory filesystem (you can set a new size with the -s option) ${RED}Examples:${NC} ${BBlack}Show this help and exit:${NC} tmpfs-mounter sudo tmpfs-mounter -h ${BBlack}Mount virtual memory filesystem with default values [-s 10 -p mytmpfs]:${NC} sudo tmpfs-mounter ${BBlack}Mount virtual memory filesystem of 20 GB in size with default name [-p mytmpfs]:${NC} sudo tmpfs-mounter -s 20 ${BBlack}Mount virtual memory filesystem of 20 GB in size and the path '/tmp/tmpfs-mysql':${NC} sudo tmpfs-mounter -s 20 -p tmpfs-mysql ${BBlack}Check if the virtual memory filesystem is already mounted and its size:${NC} sudo tmpfs-mounter -i ${BBlack}Remount the virtual memory filesystem with the new size 15 GB:${NC} sudo tmpfs-mounter -r -s 15 ${BBlack}Unmount the virtual memory filesystem with the default value [-p mytmpfs]:${NC} sudo tmpfs-mounter -u ${BBlack}Unmount the virtual memory filesystem at '/tmp/tmpfs-mysql':${NC} sudo tmpfs-mounter -u -p tmpfs-mysql """ usage () { echo -e "${RED}Discription:${NC} ${BBlack}\ttmpfs-mounter is a script for managing tmpfs (virtual memory filesystem). \tThe script mounts tmpfs of the specified size at the specified path. \tThe script can also remount tmpfs with a new size, check the tmpfs status and unmount tmpfs.${NC} \n${RED}Usage:${NC} \t${BBlack}sudo $PROGNAME [OPTIONS]${NC} $help" return } is_tmpfs_ready () { if [[ -d "/tmp/$path" ]]; then echo 1 return 1 else echo 0 return 0 fi } show_tmpfs_info () { df -hT "/tmp/$path" } is_tmpfs_mounted () { mount | grep "/tmp/$path" } if [ "$EUID" -ne 0 ] then echo -e "${RED}Please run as root${NC}" usage exit fi while [[ -n $1 ]]; do case $1 in -s | --size) shift size=$1 ;; -d | --doublecmd) doublecmd=1 size= path= ;; -p | --path) shift path=$1 ;; -u | --umount) umount=1 ;; -i | --info) show_information=1 ;; -r | --remount) remount=1 ;; -h | --help) usage exit ;; *) usage >&2 exit 2 ;; esac shift done if [[ $show_information -ne 0 ]]; then if [[ $(is_tmpfs_ready) -eq 1 ]]; then echo 'The mount directory exists' show_tmpfs_info else echo 'The directory does not exist' fi exit 0 elif [[ $umount -ne 0 ]]; then if [[ $(is_tmpfs_ready) -eq 1 ]]; then echo else echo 'The mount directory does NOT exist' exit 1 fi umount "/tmp/$path" if [[ -z "$(is_tmpfs_mounted)" ]]; then echo 'Virtual memory filesystem has been unmounted!' rm -rf "/tmp/$path" echo "/tmp/$path is removed!" else echo -e "${RED}Virtual memory filesystem is still mounted!\nMaybe it is busy.${NC}" fi exit 0 elif [[ $remount -eq 1 ]]; then if [[ $(is_tmpfs_ready) -eq 0 ]]; then echo 'The mount directory does NOT exist' exit 1 else mount -t tmpfs -o "remount,size=${size}g" tmpfs /tmp/$path show_tmpfs_info exit 0 fi elif [[ $doublecmd -ne 0 && "$user" ]]; then sudo -u $user doublecmd /tmp/$path exit 0 elif [[ $size -ne 0 && -n "$path" ]]; then if [[ $(is_tmpfs_ready) -eq 1 ]]; then echo 'The mount directory already exists' show_tmpfs_info exit 1 fi mkdir /tmp/$path mount -t tmpfs -o size=${size}g tmpfs /tmp/$path show_tmpfs_info echo -e "\n\nTo change your current directory, type:\n${RED}cd /tmp/$path${NC}" fi
Чтобы им пользоваться, скопируйте скрипт в файл tmpfs-mounter.
Затем перейдите в директорию с сохранёнными скриптом.
Далее сделайте этот файл исполнимым:
chmod +x tmpfs-mounter
Всё готово, теперь вы можете его запустить.
sudo ./tmpfs-mounter -h
При желании, вы также можете скопировать этот скрипт в директорию с пользовательскими исполнимыми файлами:
sudo cp tmpfs-mounter /usr/local/bin/
В этом случае вы можете запускать программу из любого места, без необходимости переходить в директорию с сохранённым скриптом:
sudo tmpfs-mounter -h
4.2 Опции tmpfs-mounter
Использование:
sudo tmpfs-mounter [ОПЦИИ]
Все опции не являются обязательными:
-h | --help Показать справку и выйти -s | --size Размер виртуальной файловой системы [Значение по умолчанию: 10 GB] -p | --path Часть пути (после /tmp/) до виртуальной файловой системы [Значение по умолчанию: mytmpfs, то есть /tmp/mytmpfs] -u | --umount Размонтировать виртуальную файловую систему -i | --info Проверить статус виртуальной файловой системы -r | --remount Перемонтировать файловую систему (вы можете установить новый размер с помощью опции -s)
4.3 Примеры использования tmpfs-mounter
Чтобы вывести справку, запустите скрипт с опцией -h (или длинный вариант —help). Также запуск без sudo вызовет показ опций:
tmpfs-mounter sudo tmpfs-mounter -h
Для работы скрипта необходимы права root, поэтому скрипт нужно запускать с sudo.
При запуске скрипта без опций, сразу будет смонтирована файловая система виртуальной памяти:
sudo tmpfs-mounter
По умолчанию её размер составит 10 Гигабайт, размещена она будет в /tmp/mytmpfs.
С помощью опции -s вы можете выбрать любой другой размер, например, вот пример создания tmpfs размером 20 Гигабайт:
sudo tmpfs-mounter -s 20
С помощью опции -p вы можете поменять имя tmpfs. Эту опцию можно комбинировать с опцией -s. Например, в данном случае в качестве имени выбрано "/tmp/tmpfs-mysql", а размер файловой системой виртуальной памяти составит 20 Гигабайт:
sudo tmpfs-mounter -s 20 -p tmpfs-mysql
Следующая команда проверит статус tmpfs. Если файловая система виртуальной памяти уже смонтирована, то будет выведена информация о её размере и использованном пространстве (эту опцию можно комбинировать с -p, если вы создали раздел с именем, отличным от имени по умолчанию):
sudo tmpfs-mounter -i
Следующая команда перемонтирует файловую систему виртуальной памяти с новым размером:
sudo tmpfs-mounter -r -s 15
Эта команда отмонтирует файловую систему виртуальной памяти:
sudo tmpfs-mounter -u
Если вы использовали путь до tmpfs отличный от дефолтного, то вы можете добавить к опции -u опцию -p, после которой укажите путь до файловой системы виртуальной памяти:
sudo tmpfs-mounter -u -p tmpfs-mysql
Заключение
tmpfs — это простой способ ускорить выполнение задач, узким место в производительности которых является скорость диска.
К тому же, при частой работе с временными файлами tmpfs позволяет снизить износ SSD.
Связанные статьи:
- Постоянные имена для блочных устройств (74.6%)
- Файловая система в оперативной памяти — как пользоваться tmpfs (59%)
- Как в Linux подключить новый диск, разметить и отформатировать разделы (53.1%)
- Диск Windows монтируется только для чтения (РЕШЕНО) (53.1%)
- Как смонтировать сетевую папку Windows/Samba в Linux (53.1%)
- PhotoRec: восстановление удалённых и потерянных фотографий и файлов на картах памяти и жёстких дисках (RANDOM - 34.5%)