SandboxesPersistent Volumes

Persistent Volumes

Том в Lizard (lizard.build) хранит данные после остановки Sandbox. Он подключается в /workspace, к одной Sandbox за раз. Sandbox работает на том же узле, что и том.

Создание и подключение по имени

Имена уникальны в пределах проекта. Используйте строчные латинские буквы, цифры и дефисы, до 64 символов. Имя должно начинаться и заканчиваться буквой или цифрой.

Чтобы повторно использовать том с заданным именем, вызовите getOrCreate. Размер действует только при создании нового тома; метод не меняет размер существующего. Volume.create возвращает конфликт, если имя занято.

import { Sandbox, Volume } from '@lizard-build/sdk';
 
await Volume.getOrCreate('proj_123', 'agent-workdir', { sizeGb: 10 });
const sandbox = await Sandbox.create('base', {
  projectId: 'proj_123', volumeName: 'agent-workdir',
});
try {
  await sandbox.fs.write('/workspace/state.json', JSON.stringify({ step: 1 }));
} finally {
  await sandbox.kill();
}
 
// A later sandbox mounts the same data by name.
const next = await Sandbox.create('base', {
  projectId: 'proj_123', volumeName: 'agent-workdir',
});
try {
  console.log(await next.fs.read('/workspace/state.json'));
} finally {
  await next.kill();
}
from lizard import Sandbox, Volume
 
Volume.get_or_create("proj_123", "agent-workdir", size_gb=10)
sandbox = Sandbox.create("base", project_id="proj_123", volume_name="agent-workdir")
try:
    sandbox.process.exec_("echo hello > /workspace/state.txt")
finally:
    sandbox.kill()

Размер и цена

Новые тома допускают 1–50 GB, только целые GB, по умолчанию 5 GB. Сервер может менять предел через VOLUME_MAX_SIZE_GB; панель управления и CLI читают текущие ограничения из GET /api/projects/:projectId/volume-limits. Панель также читает цену хранения из этого запроса и показывает её под ползунком размера.

Вы платите за занятое место, а не за весь выделенный объём. Существующие тома больше нового предела сохраняют размер и остаются доступны. Для нового тома нужно достаточно свободного, ещё не зарезервированного места на исправном рабочем узле выбранного региона. Если места нет, API возвращает 503 с кодом volume_capacity_unavailable.

Управление томами

await Volume.list('proj_123');
const volume = await Volume.get('proj_123', 'agent-workdir');
await volume.getInfo('proj_123');
await Volume.delete('proj_123', 'agent-workdir'); // detach first
TypeScriptPythonНазначение
Volume.getOrCreate(projectId, name, options)Volume.get_or_create(project_id, name, size_gb=5)Использовать том или создать его
Volume.create(projectId, name, options)Volume.create(project_id, name, size_gb=5)Создать; вернуть ошибку, если имя занято
Volume.list(projectId)Volume.list(project_id)Список томов проекта
Volume.get(projectId, nameOrId)Volume.get(project_id, name_or_id)Найти том
Volume.delete(projectId, nameOrId)Volume.remove(project_id, name_or_id)Удалить отключённый том

Сгенерированные ID и поля volumeId / volume_id по-прежнему работают. В новом коде используйте имена.

CLI

lizard volume create agent-workdir --size 10 --project proj_123
lizard volume list --project proj_123
lizard sandbox create --volume agent-workdir --project proj_123
# After stopping the sandbox:
lizard volume rm agent-workdir --project proj_123

--size принимает целые GB и проверяет текущий предел сервера до создания тома. volume list показывает имена; для ID используйте --json.

Панель управления

Откройте Sandboxes → Volumes в проекте. Форма создания проверяет имя и предлагает ползунок размера с текущим пределом и ценой. Список показывает занятое и выделенное место, статус и подключённую Sandbox. При необходимости скопируйте ID из сведений о томе.

Жизненный цикл хранения

  • Остановка Sandbox или истечение её срока отключает том и сохраняет данные.
  • Подключённый том нельзя подключить к другой Sandbox или удалить.
  • Приостановленная Sandbox сохраняет подключение.
  • Удаление тома удаляет его данные. Тома хранят данные на узле; экспортируйте данные, которые нужны после отказа узла. См. хранение и восстановление.

Параметры Sandbox описаны в справочнике SDK.