Закончилось место на диске? Или же закончились inode?
Автор: clovus
Ситуация неприятная и чаще всего выходом служит удаление «ненужных» файлов. Рассмотрим ситуацию, когда все файлы нужны, то есть удалять ничего не будем.
В качестве примера, смоделируем ситуацию, когда в файловой системе закончились inode.
ЧИТАТЬ ПЕРВЫМ В ТЕЛЕГРАМСоздадим файловую систему с небольшим количеством inode на виртуальном блочном устройстве, позаимствовав немного места с реальной файловой системы:
dd if=/dev/zero of=/home/user/fs.img count=1000 bs=4096K
mkfs.ext4 -N 512 /home/user/fs.img
Монтируем файловую систему:
mkdir newfs
mount /home/user/fs.img newfs/
Забиваем ее до отказа файлами:
touch file{1..501}
Проверяем:
df -i newfs
Вывод:
[root@14 ~] df -i newfs/
/dev/loop6 512 512 0 100% /root/newfs
Все, создавать новые файлы нельзя. Если сильно надо, выход есть. Понадобится свободное место, с файловой системой ext4.
Сделаем еще одно виртуальное блочное устройство, на нем файловую систему и пару папок для наших нужд.
dd if=/dev/zero of=/home/user/newfs.img count=1500 bs=4096K
mkfs.ext4 /home/user/newfs.img
mount /home/user/newfs.img freespacefs
mkdir -p freespacefs/{up,service}
Теперь главное:
mount -t overlay overlay -olowerdir=newfs,upperdir=freespacefs/up,workdir=freespacefs/service newfs
Здесь монтируется специальная файловая система overlayfs.
Аргументы:
lowerdir
- директория, которую расширяем. Может быть любой файловой системой, может быть смонтирована только на чтение. В терминологии overlayfs
- нижний слой.
upperdir
- директория на файловой системе с поддержкой d-type (например, ext4).
В терминологии overlayfs
верхний слой. В эту папку реально будут попадать результаты деятельности (новые файлы например) workdir-
служебная директория, нужна для работы overlayfs
. Должна находится на той же файловой системе, что и upperdir
.
Проверяем:
[root@14 ~] df -i newfs
overlay 376K 16 376K1% /root/newfs
занято 1 % inode.
[root@14 ~] df -i newfs
[root@14 ~] touch newfs/extrafile
[root@14 ~] ls newfs/
extrafile file125 file152 file1.....
(вывод обрезан, здесь 501 файл)
Теперь посмотрим в up:
[root@14 ~] ls freespacefs/up
extrafile
Вариант для экстремалов (можно задействовать оперативную память, если свободного места нет совсем):
[root@14 ~] mkdir ramfs
[root@14 ~] mount -t tmpfs tmpfs -osize=4G ramfs
[root@14 ~] mkdir ramfs/{up,work}
[root@14 ~] mount -t overlay overlay -\ olowerdir=newfs,upperdir=ramfs/up,workdir=ramfs/work newfs
[root@14 ~] df -h newfs/
overlay 7,8G 8,7M 7,8G 1% /root/newfs
Фактически, это tmpfs
, которая располагается в оперативной памяти, и стоит об этом помнить.
Теперь пара слов про overlayfs.
Функционал реализован модулем ядра, который, возможно, нужно включить:
[root@14 tmp] lsmod | grep overlay
Если вывод пустой, то:
[root@14 tmp] modprobe overlay
Как видно из вышесказанного, особенность этой файловой системы - она работает с директориями а не с устройствами.
На этом все. Выражаю благодарность за идею статьи @AlexeyVictorovi4