Каждый экземпляр tmpfs
независим, поэтому возможно превышение доступности памяти, и если вы заполните всю память большими файлами на tmpfs
, система в конечном итоге остановится из-за того, что больше не будет доступная память, которую невозможно освободить (без удаления файлов tmpfs
или размонтирования).
tmpfs
может использовать разделы подкачки для обмена данными, но даже это не помогает, если вы активно читаете / записываете эти файлы, и в этот момент их нужно снова заменить.
В основном системы, которые имеют множество экземпляров смонтированных tmpfs
обычно работают в предположении, что хотя tmpfs
существует, на самом деле он не будет заполнен до предела.
Если вы хотите попробовать это - желательно на Live CD, где ничего не смонтировано - то это работает следующим образом:
mkdir a b c
mount -t tmpfs tmpfs a
mount -t tmpfs tmpfs b
mount -t tmpfs tmpfs c
truncate -s 1T a/a b/b c/c
shred -v -n 1 a/a b/b c/c
Это создает три экземпляра tmpfs
, по умолчанию каждый имеет ограничение на 50% памяти. итого 150% (не считая свопа, если у вас есть своп, не стесняйтесь добавить def ...
).
Вывод клочка
будет выглядеть примерно так:
shred: a/a: pass 1/1 (random)...
shred: a/a: error writing at offset 1049104384: No space left on device
shred: b/b: pass 1/1 (random)...
# system hangs indefinitely at this point, without swap it never reaches c/c #
RANDOMIZE_BASE
— это функция, доступная на большинстве архитектур, которая рандомизирует виртуальный и физический базовые адреса ядра .
RANDOMIZE_MEMORY
является специфической функцией x86 -64 -, которая дополнительнорандомизирует смещения page_offset_base
, vmalloc_base
, vmemmap_base
, , т.е. местоположения физическое отображение в памяти ядра, пространство vmalloc
и карта виртуальной памяти. Как вы можете видеть из связанной карты памяти, за всеми ними следуют дыры, которые позволяют перемещать их без необходимости иметь дело с перекрытием с тем, что находится до или после них в памяти.