DerivedData, npm, pip, Cargo и Gradle на RAM-диске

DerivedData, npm, pip, Cargo и Gradle на RAM-диске

Сборка пишет тысячи мелких файлов, которые через день никому не нужны: DerivedData, target, build, кэши пакетов. На RAM-диске вся эта работа идёт в памяти: сборки и обращения к кэшу ускоряются, а SSD не изнашивается. Разберём, какие папки стоит переносить, какой настройкой это делается в каждом инструменте и как всё не потерять после перезагрузки.

Коротко
  • Переносить: DerivedData Xcode, кэши npm, pip, Cargo и Gradle, папки сборки, TEMP.
  • Не держать только в памяти: исходники, репозитории, архивы, всё несохранённое и незакоммиченное.
  • Сохранять между перезагрузками: кэши пакетов да, DerivedData и папки сборки по желанию.
  • Размер: 2 ГБ на один кэш пакетов, 8 ГБ на несколько кэшей или DerivedData.

Что переносить, а что не трогать

RAM-диск теряет файлы, когда его извлекают или выключают компьютер, если их нигде не сохранять. Поэтому на нём место тем папкам, которые инструмент сам соберёт или скачает заново.

На RAM-диск
  • DerivedData Xcode: результаты сборки и индексы
  • кэши npm, Yarn, pip, Cargo, Gradle, Maven
  • папки сборки: target, build, obj
  • TEMP на Windows, TMPDIR на Mac
Оставить на SSD
  • исходный код и Git-репозитории
  • архивы Xcode (Archives) выпущенных сборок
  • настройки и учётные данные: ~/.npmrc, gradle.properties
  • всё, что существует в одном экземпляре

Вручную: настройка каждого инструмента

Сначала создайте RAM-диск (на Mac, на Windows), потом направьте каждый инструмент в папку на нём. Все настройки ниже взяты из документации самих инструментов.

Инструмент Папка по умолчанию Как перенести
DerivedData Xcode ~/Library/Developer/Xcode/DerivedData Xcode > Settings > Locations > Derived Data: Custom. В скриптах: xcodebuild -derivedDataPath <путь>
кэш npm ~/.npm, Windows: %LocalAppData%\npm-cache npm config set cache <путь>
кэш pip ~/.cache/pip, Mac: ~/Library/Caches/pip, Windows: %LocalAppData%\pip\Cache PIP_CACHE_DIR=<путь> или --cache-dir
сборка Cargo target в каждом проекте CARGO_TARGET_DIR=<путь> или build.target-dir в .cargo/config.toml
Gradle ~/.gradle GRADLE_USER_HOME=<путь>

На macOS или Linux это выглядит так (диск здесь смонтирован в /Volumes/RAMDisk):

npm config set cache /Volumes/RAMDisk/npm
export PIP_CACHE_DIR=/Volumes/RAMDisk/pip
export CARGO_TARGET_DIR=/Volumes/RAMDisk/cargo-target

Xcode, только на macOS (потом перезапустите Xcode):

defaults write com.apple.dt.Xcode IDECustomDerivedDataLocation /Volumes/RAMDisk/DerivedData
Учтите побочные эффекты. GRADLE_USER_HOME переносит и gradle.properties, и init-скрипты, и дистрибутивы Wrapper, а в CARGO_HOME лежат установленные утилиты и учётные данные. Здесь лучше перенести только папки кэша (~/.gradle/caches, ~/.cargo/registry) символической ссылкой (ln -s, на Windows mklink /J). И помните: после перезагрузки RAM-диска нет, и все настройки и ссылки ведут в пустоту, пока вы не создадите его снова.

С Exlade RamDisk: шаблоны

Exlade RamDisk - бесплатный RAM-диск для Windows, macOS и Linux. Его шаблоны делают всё это за вас и отменяют, когда диск извлекают.

Выберите шаблон

Developer (8 ГБ, Windows и Linux) переносит кэши npm, Yarn, pip, Cargo, Gradle, Maven, Go и NuGet. npm (2 ГБ) есть на всех трёх системах, Xcode (8 ГБ, macOS) забирает DerivedData. Папки неустановленных инструментов шаблон пропускает.

Создание RAM-диска в Exlade RamDisk для Windows: шаблоны Browsers, Developer, npm и Temp, имя и размер
Добавьте папку сборки

В разделе «Папки на этом диске» нажмите «Добавить папку…» и выберите target, build или obj проекта. Включите «Создавать при запуске Windows», а для кэшей пакетов и «Сохранять файлы».

Параметры нового диска в Exlade RamDisk для Windows: создавать при запуске Windows, сохранять файлы, добавить папку сборки
Работайте с прежними путями

На Windows и Linux на месте папки остаётся ссылка на диск (на Windows - junction, права администратора не нужны), и инструменты видят привычные пути. На Mac шаблон Xcode меняет место DerivedData в настройках Xcode (перезапустите Xcode), а шаблон npm прописывает cache в ~/.npmrc. Когда диск извлекают, всё возвращается.

Папку с открытыми файлами перенести нельзя: сначала закройте Xcode, IDE или остановите демон Gradle. Подробнее в разделе Перенос папок.

Сохранять ли файлы после перезагрузки

Папка Сохранять? Почему
кэши npm, pip, Cargo, Gradle да иначе пакеты скачиваются заново после каждой перезагрузки
DerivedData Xcode по желанию заполняется заново при первой сборке
папки сборки по желанию первая сборка после перезагрузки будет полной
TEMP, TMPDIR нет это временные файлы

Поэтому шаблон Developer на Windows сохраняет файлы, а Xcode нет. Диск при запуске с «Сохранять файлы» сохраняет их по расписанию и перед выключением; при внезапном отключении питания теряется только то, что изменилось после последнего сохранения.

Сколько памяти отдать

Начните с размера шаблона. На Windows, Linux и macOS 26 диск занимает память по мере записи файлов, а не весь размер сразу. На macOS 15 весь размер резервируется, как только диск создан, поэтому шаблон Xcode на 8 ГБ сразу держит 8 ГБ памяти: там выбирайте размер, который ваш Mac может отдать. Размер диска можно поменять и позже: на Mac и Linux файлы остаются, а на Windows на месте меняется только диск NTFS (поэтому шаблоны Developer и npm создают NTFS), диск exFAT или FAT32 придётся создать заново. Через день работы «История использования» покажет, сколько на самом деле нужно каждому диску. На компьютере с 8 ГБ памяти RAM-диск быстро начнёт отнимать её у IDE и компиляторов. Подробнее: стоит ли заводить RAM-диск и Память и история.

Сборочные серверы и CI

У утилиты eramdisk одни и те же команды на Windows, macOS и Linux и вывод в JSON для скриптов. На Linux-сервер можно поставить только службу и утилиту, без графического интерфейса.

eramdisk create -t Developer                    # кэши пакетов (Windows, Linux)
eramdisk create -s 4G -n Build --startup        # диск, создаваемый при каждом запуске
eramdisk redirect add Build ~/src/app/target    # перенести на него папку сборки
eramdisk list --json                            # диски и сколько они занимают

Частые вопросы

Заметит ли Xcode, что DerivedData переехала?

Да, после перезапуска Xcode: шаблон Xcode меняет то же место Derived Data, что задаётся в Xcode > Settings > Locations. Когда диск извлекают, прежняя настройка возвращается.

Можно ли держать исходники на RAM-диске?

Лучше не надо. Если диск пропадёт до сохранения файлов, незакоммиченная работа потеряется. Держите код на SSD, а на RAM-диск кладите только то, что можно собрать или скачать заново.

Скачайте Exlade RamDisk бесплатно

Windows 10 и 11, macOS 15 и новее, Ubuntu, Debian и Fedora. Без регистрации и пробного периода.

Скачать бесплатно Возможности