Attaching a file storage to a VM
Warning
You can only attach a file storage to VMs running a Linux OS with kernel version 5.4 or higher.
To check the kernel version, run sudo uname -r
.
-
Attach a file storage to the VM in Compute Cloud:
Management consoleCLITerraformAPI- In the management console
, select the folder where you created the file storage. - Select Compute Cloud.
- In the left-hand panel, select
File storages. - Select the storage.
- Go to the Virtual machines tab.
- Click
Attach to VM. - In the window that opens:
- Select the VM.
- Specify the device name to represent the file storage in the VM. Save this name as you will need it when mounting the storage.
- Click Attach to VM.
If you do not have the Yandex Cloud CLI installed yet, install and initialize it.
By default, the CLI uses the folder specified when creating the profile. To change the default folder, use the
yc config set folder-id <folder_ID>
command. You can also set a different folder for any specific command using the--folder-name
or--folder-id
parameter.-
See the description of the CLI command for attaching a file storage to a VM:
yc compute instance attach-filesystem --help
-
Get a list of file storages in the default folder:
yc compute filesystem list
Result:
+----------------------+-------------------+------------+---------------+--------+-------------+ | ID | NAME | SIZE | ZONE | STATUS | DESCRIPTION | +----------------------+-------------------+------------+---------------+--------+-------------+ | epdtcr9blled******** | first-filesystem | 1073741824 | ru-central1-a | READY | | | epd3f4gv8bs4******** | second-filesystem | 1073741824 | ru-central1-a | READY | | +----------------------+-------------------+------------+---------------+--------+-------------+
-
Get a list of VMs in the default folder:
yc compute instance list
Result:
+----------------------+-------+---------------+---------+--------------+-------------+ | ID | NAME | ZONE ID | STATUS | EXTERNAL IP | INTERNAL IP | +----------------------+-------+---------------+---------+--------------+-------------+ | epdj4upltbiv******** | vm-01 | ru-central1-a | RUNNING | 51.250.**.** | 192.168.*.* | | 1pc3088tkv4m******** | vm-02 | ru-central1-a | RUNNING | 84.201.**.** | 192.168.*.* | +----------------------+-------+---------------+---------+--------------+-------------+
-
Attach the file storage to the VM:
yc compute instance attach-filesystem \ --id <VM_ID> \ --filesystem-id <file_storage_ID> \ --device-name <device_name>
Where:
-
--id
: VM ID.Instead of the ID, you can specify the VM name in the
--name
parameter. -
--filesystem-id
: File storage ID.Instead of the ID, you can specify the file storage name in the
--filesystem-name
parameter. -
--device-name
: Device name to represent the file storage in the VM. This is an optional parameter.By default, the file storage ID is used as the device name.
Result:
id: epdj4upltbiv******** folder_id: b1g681qpemb4******** created_at: "2024-04-29T15:50:19Z" name: vm-01 ... filesystems: - mode: READ_WRITE device_name: attached-filesystem filesystem_id: epdtcr9blled******** ...
-
If you do not have Terraform yet, install it and configure the Yandex Cloud provider.
Set the
allow_stopping_for_update
parameter totrue
on your VM, if you have not done it yet.To attach a file storage to your VM, add the
filesystem
section with thefilesystem_id
parameter to the VM description (see the example below).-
Open the Terraform configuration file and add a section specifying the storage to the VM description:
Example of specifying a storage in the VM configuration using Terraform
... resource "yandex_compute_instance" "vm-1" { name = "test-vm" platform_id = "standard-v3" zone = "ru-central1-a" filesystem { filesystem_id = "fhmaikp755gr********" } } ...
-
Apply the changes:
-
In the terminal, go to the directory where you edited the configuration file.
-
Make sure the configuration file is correct using this command:
terraform validate
If the configuration is correct, you will get this message:
Success! The configuration is valid.
-
Run this command:
terraform plan
You will see a detailed list of resources. No changes will be made at this step. If the configuration contains any errors, Terraform will show them.
-
Apply the changes:
terraform apply
-
Type
yes
and press Enter to confirm the changes.
-
You can check whether the storage has been attached to the VM using the management console
or this CLI command:yc compute instance get <VM_name>
Use the attachFilesystem REST API method for the Instance resource or the InstanceService/AttachFilesystem gRPC API call.
- In the management console
-
Mount the file storage on the VM:
-
If you do not know the device name, run this command:
yc compute instance get <VM_name>
Result:
... filesystems: - mode: READ_WRITE device_name: storagename filesystem_id: epdb1jata63j******** ...
Save the value of the
device_name
field underfilesystems
. This is the name of the device to mount your file storage on; you will need it later. -
Connect to the VM over SSH.
-
Run this command:
sudo mount -t virtiofs <device_name> <mount_path>
Where:
<device_name>
: Value of thedevice_name
field you saved before. In the example above, it isstoragename
. Your device name may be different.<mount_path>
: Folder or disk to mount the file storage to, e.g.,/mnt/vfs0
.
-
Check that the file storage has been mounted:
df -T
Result:
Filesystem Type 1K-blocks Used Available Use% Mounted on udev devtmpfs 988600 0 988600 0% /dev tmpfs tmpfs 203524 780 202744 1% /run /dev/vda2 ext4 13354932 1909060 10861420 15% / tmpfs tmpfs 1017604 0 1017604 0% /dev/shm tmpfs tmpfs 5120 0 5120 0% /run/lock tmpfs tmpfs 1017604 0 1017604 0% /sys/fs/cgroup tmpfs tmpfs 203520 0 203520 0% /run/user/1000 storagename virtiofs 66774660 0 66774660 0% /mnt/vfs0
-
To mount the file storage every time the VM starts, add the following line to the
/etc/fstab
file:<device_name> <mount_path> virtiofs rw 0 0
-