---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ytsaurus.tech/docs/en/user-guide/storage/media.md
  - https://ytsaurus.tech/docs/ru/user-guide/storage/media.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ytsaurus.tech/docs/ru/llms.txt

<!-- source: ru/_includes/user-guide/storage/media.md -->
# Медиумы

В данном разделе описаны типы носителей — медиумы, приведены примеры настроек хранения данных на различных медиумах.

## Общие сведения

Различные типы носителей (HDD, SSD, RAM) логически объединены в специальные сущности, называемые медиумами (medium).
Типы носителей отличаются по объёму доступного пространства, скорости чтения и записи. Чем выше скорость носителя, тем меньше его объём.

На каждом носителе располагается [чанковая локация](https://ytsaurus.tech/docs/ru/user-guide/storage/chunks.md). В случае диска чанковая локация является разделом на файловой системе. Медиумы разделяют всё множество чанковых локаций на непересекающиеся подмножества. При этом один узел кластера может иметь локации, относящиеся к разным медиумам. В пределах каждого такого подмножества осуществляется независимая балансировка чанков и независимое квотирование. При выдаче дисковой квоты аккаунту, квота выдаётся в конкретном медиуме. Пользователь может выбирать, на каком медиуме хранить те или иные данные.

На кластерах YTsaurus распространены следующие виды медиумов:

- default — множество HDD дисков в кластере.
- ssd_blobs — множество SATA SSD дисков в кластере.
- ssd_journals — множество SATA SSD или NVMe SSD дисков для хранения журналов динамических таблиц.

Получить список медиумов на кластере:

CLI
```bash
yt list //sys/media
```

## Назначение медиума

Чтобы настроить, на каких медиумах будут храниться чанки владельца чанков (таблицы, файла или журнала), задайте значение атрибута `media`. Значение этого атрибута — словарь, в котором ключом для каждой записи служит имя медиума, а значением — словарь, имеющий две записи:

- Ключ — `"replication_factor"`, значение — коэффициент репликации в данном медиуме.
- Ключ — `"data_parts_only"`, значение — флаг. На медиумах с `"data_parts_only" = %true` [erasure-coded](https://ytsaurus.tech/docs/ru/user-guide/storage/replication.md#erasure) объекты хранят только data-парты и не хранят erasure-парты. Например:

CLI
```bash
$ yt get //path/to/my/table/@media
```
```
{
  "default" = {
    "replication_factor" = 3;
    "data_parts_only" = %false;
  };
  "ssd_blobs" = {
    "replication_factor" = 1;
    "data_parts_only" = %true;
  };
}
```

Чтобы добавить таблицы реплик на ещё одном медиуме, установите атрибут `media`:

CLI
```bash
yt set //path/to/my/table/@media '
{
  "default" = {
    "replication_factor" = 3;
    "data_parts_only" = %false;
  };
  "ssd_blobs" = {
    "replication_factor" = 1;
    "data_parts_only" = %true;
   };
}'
```

[Кипарис](https://ytsaurus.tech/docs/ru/user-guide/storage/cypress.md) позволяет читать отдельные записи в словарях непосредственно, не считывая весь словарь целиком.
Например, чтобы узнать коэффициент репликации таблицы на медиуме `default`, выполните команду:

CLI
```bash
$ yt get //path/to/my/table/@media/default/replication_factor
```
```
3
```

Чтобы удалить таблицу с медиума, в атрибуте `media` удалите соответствующую запись:

CLI
```bash
yt remove //path/to/my/table/@media/default
```

### Первичный медиум { #primary }

Для каждого владельца чанков задан особый медиум, который называется первичным. Именно на этот медиум будет осуществляться запись чанков, принадлежащих их владельцу. На остальные медиумы чанки попадают в результате репликации и балансировки.

Чтобы узнать первичный медиум таблицы, прочитайте её атрибут `primary_medium`. Изменение первичного медиума осуществляется путём перезаписи атрибута. Новые чанки объекта записываются на новый первичный медиум, фактическое перемещение старых чанков происходит в фоновом режиме и может занимать время.

По умолчанию в момент создания устанавливается первичный медиум `"default"`.

Атрибут `replication_factor` — это синоним для `@media/<primary_medium_name>/replication_factor`. Атрибут сохранен для обратной совместимости и простоты доступа.

### Наследование

Атрибуты `primary_medium` и `media` являются [наследуемыми](https://ytsaurus.tech/docs/ru/user-guide/storage/attributes.md#system_attr). Это означает, что их можно устанавливать на директории, и тогда все создаваемые в поддереве владельцы чанков будут получать соответствующие значения атрибутов автоматически. Использование атрибута `primary_medium` является предпочтительным в большинстве случаев; использовать атрибут `media` таким образом не рекомендуется.

### Ограничения

Редактирование атрибута `media` таблицы — потенциально опасная операция. Например, если указать медиум, где нет места, таблица будет заблокирована на запись. Изменение `media` приводит к перемещению большого количества данных, это может влиять на производительность.


Поэтому есть ряд ограничений.

- Как минимум на одном медиуме должны присутствовать все данные, то есть должно выполняться условие: `replication_factor > 0 && !data_parts_only`.
- Медиум, для которого `data_parts_only == true`, не может быть первичным.
- Попытка сделать первичным медиум, не используемый таблицей, интерпретируется как запрос перенести таблицу со старого первичного медиума на новый.

## Транзиентные медиумы

Оперативная память как носитель отличается от HDD и SSD тем, что хранение данных в оперативной памяти ненадёжно. Оперативная память энергозависима, в случае аварийного отключении питания данные в оперативной памяти будут утеряны.

Подобные носители в системе YTsaurus называются **транзиентными**. Чтобы сообщить системе, что медиум транзиентен, необходимо установить для него атрибут `transient`, равный `%true`:

CLI
```bash
yt set //sys/media/ram/@transient "%true"
```

Выставленное свойство не влияет на процесс репликации и балансировки. Система не запрещает хранить чанки исключительно на транзиентных носителях. Это может быть нужно, чтобы временно зафиксировать промежуточные результаты вычисления в памяти.

Чанки, имеющие реплики только на транзиентных медиумах, называются **шаткими**. Получить их количество можно следующим образом:

CLI
```bash
$ yt get //sys/precarious_chunks
```
```
42
```
```bash
$ yt get //sys/precarious_vital_chunks
```
```
0
```

## Атрибуты

Объект медиума обладает следующими атрибутами:

| **Атрибут** | **Тип**   | **Описание**                                                 |
| ----------- | --------- | ------------------------------------------------------------ |
| `name`      | `string`  | Имя медиума — непустая уникальная строка.                    |
| `index`     | `integer` | Индекс — небольшое целое число, служащее уникальным идентификатором для внутренних целей. |
| `priority`  | `integer` | Приоритет медиума. В случае чтения чанка, имеющего реплики на нескольких медиумах, будут осуществляться попытки чтения реплик в порядке приоритета.                                                      |
| `transient` | `bool`    | Транзиентность медиума.                                      |
<!-- endsource: ru/_includes/user-guide/storage/media.md -->