В этой заметке я расскажу, как переместить системные папки Linux, такие как var и opt, а так же swap на отдельные диски. Такой подход к организации дискового пространства сервера поможет в будущем избежать проблем при росте проекта и выделении дополнительного пространства под разные ресурсы.
Внимание! Если сервер уже используется в работе, то перенос папок во время работы приложений может вызвать сбой в работе сервера. То есть перед процедурой переноса папок нужно остановить все приложения, использующие в эти служебные папки. Перенос папок в только что установленном сервере проблем не вызывает.
Ниже на картинке в качестве примера показан сервер и его диски, на эти диски разнесены служебные папки.
Перемещение swap
Файл подкачки (swap) является средством виртуализации памяти, позволяя использовать больше оперативной памяти, чем есть на сервере. Использование swap-файла позволяет предотвратить замедление или даже остановку работы сервера при исчерпании физической оперативной памяти. Когда оперативная память заканчивается, операционная система "сбрасывает" неиспользуемую в данный момент информацию в файл-подкачки на жестком диске, очищая физическую память для текущих процессов. Рекомендуемые размеры файла подкачки в зависимости от физической памяти показаны в таблице ниже:
Объем оперативной памяти сервера, ГБ | 1 | 2 | 4 | 8 | 16 | 32 | 64 |
Размер файла подкачки, ГБ | 1 | 1 | 2 | 3 | 4 | 6 | 8 |
Примечание. Полную таблицу с рекомендациями можно найти на странице Ubuntu Swap FAQ.
Если такой файл подкачки разместить на SSD диске, то можно получить расширение оперативной памяти сервера без значительного понижения быстродействия системы.
Ниже показан порядок команд, которые надо выполнить, чтобы создать swap-файл на отдельном диске.
# Переключиться в профиль root sudo su - # Получить информацию о дисках и разделах на них lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 18M 1 loop /snap/amazon-ssm-agent/1566 loop1 7:1 0 93.9M 1 loop /snap/core/9066 loop2 7:2 0 69M 1 loop /snap/lxd/14804 loop3 7:3 0 55M 1 loop /snap/core18/1705 nvme1n1 259:0 0 8G 0 disk nvme2n1 259:1 0 60G 0 disk nvme0n1 259:2 0 20G 0 disk └─nvme0n1p1 259:3 0 20G 0 part / # Из полученной таблицы определить имя диска, куда поместить файл подкачки # Создание файла подкачки на выбранном диске mkswap /dev/nvme1n1 Setting up swapspace version 1, size = 8 GiB (8589926400 bytes) no label, UUID=c1532bd5-a91f-4d68-a302-f2bfae60903c # Записать UUID диска, на котором создан файл подкачки # Добавление строки о монтировании нужного раздела в папку sudo vi /etc/fstab UUID=c1532bd5-a91f-4d68-a302-f2bfae60903c swap swap defaults 0 0 # Активировать использование нового swap-файла sudo swapon /dev/nvme1n1 # Проверить использование нового файла подкачки swapon -s Filename Type Size Used Priority /dev/nvme1n1 partition 8388600 0 -2 # Просмотр всех разделов и определение, что swap-раздел существует blkid /dev/nvme0n1p1: LABEL="cloudimg-rootfs" UUID="fdd49fba-0340-4ed1-b0fc-8da187913fec" TYPE="ext4" PARTUUID="093eb684-01" /dev/loop0: TYPE="squashfs" /dev/loop1: TYPE="squashfs" /dev/loop2: TYPE="squashfs" /dev/loop3: TYPE="squashfs" /dev/nvme1n1: UUID="c1532bd5-a91f-4d68-a302-f2bfae60903c" TYPE="swap"
Перемещение папки /var
Папка /var используется для хранения изменяемых данных приложений, таких как кэш, базы данных, страницы веб-сервера, метаданные, журналы (логи), почтовые ящики, очереди (печати, почты и т.д.), временные файлы и прочие. Ожидается, что в процессе работы сервера размер этой папки будет расти.
Список команд, которые надо выполнить, чтобы корректно перенести папку:
# Переключиться в профиль root sudo su - # Получить информацию о дисках и разделах на них lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:3 0 10G 0 disk +-nvme0n1p1 259:4 0 1M 0 part L-nvme0n1p2 259:5 0 10G 0 part / nvme1n1 259:0 0 16G 0 disk nvme2n1 259:1 0 8G 0 disk [SWAP] nvme3n1 259:2 0 32G 0 disk # Из полученной таблицы определить имя диска, куда необходимо смонтировать системную папку /var # Создать файловую систему на выбранном диске mkfs -t xfs /dev/nvme1n1 # На системном разделе создать новую папку для монтирования в нее нового диска mkdir /mntvar # Смонтировать новый диск в папку на системном разделе mount /dev/nvme1n1 /mntvar # Изменить параметры оболочки bash, чтобы включать в список файлов файлы, начинающиеся с точки shopt -s dotglob # Синхронизировать текущую папку /var и новую папку /mntvar rsync -aulvXpogtr /var/* /mntvar # Показать настройки безопасности текущей папки /var ls -Zd /var drwxr-xr-x. root root system_u:object_r:var_t:s0 /var # Показать настройки безопасности новой папки /mntvar ls -Zd /mntvar drwxr-xr-x. root root system_u:object_r:unlabeled_t:s0 /mntvar # Как видно, настройки новой папки отличаются от оригинальной # Корректировка настроек безопасности новой папки chcon -t var_t /mntvar # Показать настройки безопасности новой папки /mntvar после корректировки ls -Zd /mntvar drwxr-xr-x. root root system_u:object_r:var_t:s0 /mntvar # Размонтирование диска из папки /mntvar umount /mntvar # Вывод UUID разделов blkid /dev/nvme1n1: UUID="f8661e65-7b10-42bc-a452-2da273bd3a1c" TYPE="xfs" /dev/nvme2n1: UUID="13f331a5-313c-4e00-8a27-9e4c0c0cae15" TYPE="swap" /dev/nvme3n1: UUID="15c868e8-0aae-40cf-b8b4-d8ec3a1c3a0e" TYPE="xfs" /dev/nvme0n1p2: UUID="c5d55c65-e612-4912-b9d7-8721481beff6" TYPE="xfs" PARTUUID="8efa7c00-a326-4b79-9018-f7be7907af38" /dev/nvme0n1: PTTYPE="gpt" /dev/nvme0n1p1: PARTUUID="fe88a8a6-2b4b-4423-8650-8ea3e1fae3e9" # Добавление строки о монтировании нужного раздела в папку /var в файл /etc/fstab vi /etc/fstab UUID=f8661e65-7b10-42bc-a452-2da273bd3a1c /var xfs defaults,noatime,nofail 0 2 # Переименование текущей папки /var в /var.old mv /var/ /var.old # Создание пустой папки /var mkdir /var # Принудительное перемонтирование разделов, указанных в файле fstab mount -av # Просмотр папки /var, чтобы убедиться, что все работает ls /var # Перезагрузка сервера reboot # удаление ненужной папки /mntvar sudo rmdir /mntvar
Перемещение папки /opt
Папка /opt хранит в себе пакеты установленных драйверов, программ и игр. Эта папка по своему назначению очень похожа на папку Program Files в операционной системе Windows - в нее по умолчанию ставятся все программы, а каждая программа имеет свой каталог. В процессе работы сервера эта папка растет не сильно, но если компьютер используется как рабочая станция, то лучше вынести папку на отдельный диск.
Список команд, которые надо выполнить, чтобы корректно перенести папку:
sudo su - lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:3 0 10G 0 disk +-nvme0n1p1 259:4 0 1M 0 part L-nvme0n1p2 259:5 0 10G 0 part / nvme1n1 259:0 0 16G 0 disk /var nvme2n1 259:1 0 8G 0 disk [SWAP] nvme3n1 259:2 0 32G 0 disk mkfs -t xfs /dev/nvme3n1 mkdir /mntopt mount /dev/nvme3n1 /mntopt shopt -s dotglob rsync -aulvXpogtr /opt/* /mntopt ls -Zd /opt drwxr-xr-x. root root system_u:object_r:usr_t:s0 /opt ls -Zd /mntopt drwxr-xr-x. root root system_u:object_r:unlabeled_t:s0 /mntopt chcon -t usr_t /mntopt ls -Zd /mntopt drwxr-xr-x. root root system_u:object_r:usr_t:s0 /mntopt umount /mntopt blkid /dev/nvme1n1: UUID="f8661e65-7b10-42bc-a452-2da273bd3a1c" TYPE="xfs" /dev/nvme2n1: UUID="13f331a5-313c-4e00-8a27-9e4c0c0cae15" TYPE="swap" /dev/nvme3n1: UUID="15c868e8-0aae-40cf-b8b4-d8ec3a1c3a0e" TYPE="xfs" /dev/nvme0n1p2: UUID="c5d55c65-e612-4912-b9d7-8721481beff6" TYPE="xfs" PARTUUID="8efa7c00-a326-4b79-9018-f7be7907af38" /dev/nvme0n1: PTTYPE="gpt" /dev/nvme0n1p1: PARTUUID="fe88a8a6-2b4b-4423-8650-8ea3e1fae3e9" vi /etc/fstab UUID=15c868e8-0aae-40cf-b8b4-d8ec3a1c3a0e /opt xfs defaults,noatime,nofail 0 2 mv /opt/ /opt.old mkdir /opt mount -av ls /opt reboot sudo rmdir /mntopt