# Shared file system repository and Roles

**URL:** <https://discuss.elastic.co/t/shared-file-system-repository-and-roles/381283>\
**Category:** Elasticsearch\
**Created:** [August 23, 2025, 10:48am UTC](https://discuss.elastic.co/t/shared-file-system-repository-and-roles/381283 "2025-08-23T10:48:28Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![GiorgioS13](https://avatars.discourse-cdn.com/v4/letter/g/5fc32e/32.png) [@GiorgioS13](https://discuss.elastic.co/u/GiorgioS13)\
**Post date:** [August 23, 2025, 10:48am UTC](https://discuss.elastic.co/t/shared-file-system-repository-and-roles/381283/1 "2025-08-23T10:48:29Z")

</div>

Hi

I have a cold node with the appropriate roles, but it does not include the **`data`** role.

My goal is to set up a Shared File System repository. I have a dedicated disk attached to the cold node, but I cannot create the repository from Kibana. From what I’ve read, the **`data`** role is required for this.

My concern is that if I assign the `data` role to this node, agents might start writing directly to it which I want to avoid. My goal is for data to be written first to the hot tier and then moved to the cold tier after a certain number of days.

What would you recommend in this case?

---

<div class="post-metadata">

**Author:** ![GiorgioS13](https://avatars.discourse-cdn.com/v4/letter/g/5fc32e/32.png) [@GiorgioS13](https://discuss.elastic.co/u/GiorgioS13)\
**Post date:** [August 23, 2025, 10:51am UTC](https://discuss.elastic.co/t/shared-file-system-repository-and-roles/381283/2 "2025-08-23T10:51:54Z")

</div>

cold roles from yml: node.roles: [master, voting\_only, data\_cold]

---

<div class="post-metadata">

**Author:** ![Rafa\_Silva](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rafa_silva/32/147814_2.png) [@Rafa\_Silva](https://discuss.elastic.co/u/Rafa_Silva)\
**Post date:** [August 23, 2025, 1:25pm UTC](https://discuss.elastic.co/t/shared-file-system-repository-and-roles/381283/3 "2025-08-23T13:25:31Z")

</div>

You don’t need the generic data role , data\_cold already works as a data role.  
Make sure to:  
• Set index templates with \_tier\_preference: data\_hot,… so new writes go to hot.  
• Use ILM to move data to cold later.  
• Keep the cold node out of your ingest/load balancer so agents never write to it directly.  
• For an fs repo, the snapshot path must be mounted and allowed on all master/data nodes. If that’s not possible, use an object store repo (S3, GCS, Azure).

---

<div class="post-metadata">

**Author:** ![GiorgioS13](https://avatars.discourse-cdn.com/v4/letter/g/5fc32e/32.png) [@GiorgioS13](https://discuss.elastic.co/u/GiorgioS13)\
**Post date:** [August 23, 2025, 1:47pm UTC](https://discuss.elastic.co/t/shared-file-system-repository-and-roles/381283/4 "2025-08-23T13:47:02Z")

</div>

Thank you for the attention, but it is not solution.

My problem is specifically that I need to configure the **separate disk attached to the cold node** as a repository. All of my lifecycle policies and related configurations are already functioning correctly.

The documentation states:

_“First mount the file system to the same location on all master and data nodes. Then add the file system’s path or parent directory to the `path.repo` setting in `elasticsearch.yml` for each master and data node. For running clusters, this requires a rolling restart of each node.”_

> **[Shared file system repository | Elastic Docs](https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore/shared-file-system-repository)**
>
> Use a shared file system repository to store snapshots on a shared file system. To register a shared file system repository, first mount the file system...

In my setup, the cold node has the roles **`master`** and **`data_cold`**. However, I believe it also requires a separate **`data`** role, which I already described earlier and that would introduce the issue I mentioned

---

<div class="post-metadata">

**Author:** ![leandrojmp](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/leandrojmp/32/107231_2.png) [@leandrojmp](https://discuss.elastic.co/u/leandrojmp)\
**Post date:** [August 23, 2025, 1:58pm UTC](https://discuss.elastic.co/t/shared-file-system-repository-and-roles/381283/5 "2025-08-23T13:58:29Z")

</div>

> [@GiorgioS13](#):
>
> In my setup, the cold node has the roles **`master`** and **`data_cold`**. However, I believe it also requires a separate **`data`** role, which I already described earlier and that would introduce the issue I mentioned

It does not require the `data` role, the documentation does not mention this, it mention that every `master` and `data` node needs to have access to the shared path, a node with the `data_cold` role is a `data` node.

Also, if you want to use a file system repository, you need this to be a shared file system, all `master` and `data` nodes in the cluster need to have read and write access to it, you can use the attached disk to the cold node I think, but you need to export this as a shared file system to all other nodes and use the shared path to configure the repository in `elasticsearch.yml`.

Have you did it already?

---

<div class="post-metadata">

**Author:** ![Rafa\_Silva](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rafa_silva/32/147814_2.png) [@Rafa\_Silva](https://discuss.elastic.co/u/Rafa_Silva)\
**Post date:** [August 23, 2025, 2:20pm UTC](https://discuss.elastic.co/t/shared-file-system-repository-and-roles/381283/6 "2025-08-23T14:20:13Z")

</div>

Got it the blocker isn’t ILM or roles; it’s the fs repository requirementE

data\_cold already is a data role. You do not need to add the generic data role.

However, an fs snapshot repo cannot live on a disk seen by only one node. By design, the repo path must be mounted at the same location on every master and data node and whitelisted via path.repo on each. This is because data nodes stream shard files directly to the repo.

**What will work**

Share that disk via NFS/SMB (or another shared FS), mount it on all master+data nodes at the same path (e.g., /mnt/es\_snapshots), set:

```auto
path.repo: ["/mnt/es_snapshots"]

```

on every node, do a rolling restart, then:

```auto
PUT _snapshot/my_fs_repo
{
  "type": "fs",
  "settings": { "location": "cluster-a", "compress": true }
}
POST _snapshot/my_fs_repo/_verify

```

Your cold node can still stay master, data\_cold and won’t receive new writes as long as your templates use \_tier\_preference: data\_hot,… and the cold node isn’t behind your ingest/LB.

---

<div class="post-metadata">

**Author:** ![GiorgioS13](https://avatars.discourse-cdn.com/v4/letter/g/5fc32e/32.png) [@GiorgioS13](https://discuss.elastic.co/u/GiorgioS13)\
**Post date:** [August 23, 2025, 5:58pm UTC](https://discuss.elastic.co/t/shared-file-system-repository-and-roles/381283/7 "2025-08-23T17:58:05Z")

</div>

Thanks very much
