<h1> Full Virtual Machine </h1>

<h2>Table of Contents </h2>

- [Introduction](#introduction)
- [Deployment](#deployment)
- [Difference Between Full VM and Micro VM](#difference-between-full-vm-and-micro-vm)
- [Manually Mounting Additional Disk](#manually-mounting-additional-disk)
  - [Check All Disks Attached to the VM](#check-all-disks-attached-to-the-vm)
  - [Create a Mount Directory](#create-a-mount-directory)
  - [New file system](#new-file-system)
  - [Mount drive](#mount-drive)

***

## Introduction

We present the steps to deploy a full VM on the TFGrid.

## Deployment

Deploy a new full virtual machine on the Threefold Grid

- Make sure you have a [wallet](wallet_connector.md)
- From the sidebar click on **Applications**
- Click on **Full Virtual Machine**

**Process:**

![ ](./img/solutions_fullvm.png)

- Fill in the instance name: it's used to reference the Full VM in the future.
- Choose the image from the drop down (e.g Alpine, Ubuntu) or you can click on `Other` and manually specify the flist URL and the entrypoint.
- Select a capacity package:
  - **Small**: {cpu: 1, memory: 2, diskSize: 25 }
  - **Medium**: {cpu: 2, memory: 4, diskSize: 50 }
  - **Large**: {cpu: 4, memory: 16, diskSize: 100}
  - Or choose a **Custom** plan
- Choose the network
  - `Public IPv4` flag gives the virtual machine a Public IPv4
  - `Public IPv6` flag gives the virtual machine a Public IPv6
  - `Planetary Network` to connect the Virtual Machine to Planetary network
  - `Mycelium` to enable Mycelium on the virtual machine
  - `Wireguard Access` to add a wireguard access to the Virtual Machine
- `GPU` flag to add GPU to the Virtual machine
  - To deploy a Full VM with GPU, you first need to [rent a dedicated node](node_finder.md#dedicated-nodes)
- `Dedicated` flag to retrieve only dedicated nodes 
- `Certified` flag to retrieve only certified nodes 
- Choose the location of the node
  - `Country`
  - `Farm Name`
- Choose the node to deploy the Full Virtual Machine on
  ![](./img/node_selection.png)

- If you have more than one SSH keys set, you can click on `Manage SSH keys` to select which one to use for this deployment.

You can attach one or more disks to the Virtual Machine by clicking on the Disks tab and the plus `+` sign and specify the following parameters
![ ](./img/new_vm3.png)

- Disk name
- Disk size

At the bottom of the page, you can see a list of all of the virtual machines you deployed. You can click on `Show details` for more details:

![ ](./img/new_vm5.png)

You can also go to JSON tab for full details:

![ ](./img/new_vm6.png)

## Difference Between Full VM and Micro VM

- Full VM contains a default disk attached to it which is not the case in the Micro VM where you needed to make sure to attach a disk to it or the VM will fail
- The default disk is mounted on / so if you want to attach any additional disks, you have to choose a different mounting point
- Only cloud init flists can be deployed on Full VM. You can check official Threefold flists [here](https://hub.grid.tf/tf-official-vms)
- In Full VM, you need to mount the additional disks manually after the VM is deployed

## Manually Mounting Additional Disk

- You can follow the following commands to add your disk manually:

### Check All Disks Attached to the VM

```bash
fdisk -l
```

The additional disk won't be mounted and you won't find it listed

```bash
df -h
```

### Create a Mount Directory

```bash
sudo mkdir /hdd6T
```

### New file system

```bash
sudo mkfs.ext4 /dev/vdb
```

### Mount drive

```bash
sudo mount /dev/vdb /hdd6T/
```

![mounting additional disk](./img/fullvm6.png)