Files
home-lab/storage/filesystem.md
T

111 lines
3.7 KiB
Markdown

# Notes
We have 3 drives:
* `sda` - SIZE:931.5G, MODEL:ST1000DM003-1ER1, SERIAL:Z4Y2HMTE (1 part: /mnt/storage1)
* `sdb` - SIZE:931.5G, MODEL:ST1000DM010-2EP1, SERIAL:Z9AD9PSB (1 part: /mnt/storage2)
* `nvme0n1` - SIZE:931.5G, MODEL:CT1000P3SSD8, SERIAL:2336431AEC05 (2 part: /boot/efi, /)
## Health checks
### Install tools
```bash
sudo apt update && sudo apt install -y smartmontools nvme-cli
```
### NVMe SSD Health
Run:
```bash
sudo nvme smart-log /dev/nvme0n1
```
critical_warning: 0
percentage_used: 1%
media_errors: 0
This is good.
### HDDs Health
Run:
```bash
sudo smartctl -H /dev/sda
sudo smartctl -i /dev/sda
sudo smartctl -H /dev/sdb
sudo smartctl -i /dev/sdb
```
All passed.
## Setup
Considering the different drives I have, just as I thought, the NVMe SSD will be used for application and databases which require higher I/O throughputs and the HDDs will be used for media storage. In the following setup, the SSD will remain untouched and I'll focus on the HDDs. Because I have fairly limited storage for my media, I will not be using any kind of RAID (like SnapRAID). To make the setup just a bit simpler and not manage 2 file systems in both HDDs I'll use MergerFS to pool both drives into a single mount point.
### Partitioning
Now because I just installed the OS and haven't touched the HDDs yet they don't need to be repartitioned and formatted but I'll still include the process to do so.
First, make sure to identify the drives properly with:
```bash
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINTS
```
We initiliase a new GPT (GUID partition table) on our /dev/sda drive and make it span the entire disk with:
```bash
sudo parted /dev/sda --script mklabel gpt mkpart primary ext4 0% 100%
```
and create the ext4 partition called "storage1" that is /dev/sda1:
```bash
sudo mkfs.ext4 -L "storage1" /dev/sda1
```
Similarly, for our 2nd drive /dev/sdb:
```bash
sudo parted /dev/sdb --script mklabel gpt mkpart primary ext4 0% 100%
sudo mkfs.ext4 -L "storage2" /dev/sdb1
```
Next we create the mount folders for the drives and the merged pool:
```bash
sudo mkdir -p /mnt/storage1 /mnt/storage2 /mnt/storage
```
and get the UUIDs of the partitions for later:
```bash
sudo blkid
```
in our case:
```
/dev/sda1: UUID="711aed59-492f-4978-b8e5-899eb1e7479c"
/dev/sdb1: UUID="1addcd31-341d-447a-8026-8d1c2e64d086"
```
### MergerFS
Now to pool the drives together, we need MergerFS and FUSE (to create the pooled drive filesystem):
```bash
sudo apt update && sudo apt install -y mergerfs fuse3
```
and we allow non-root users (and Docker) to read our FUSE mounts:
```bash
sudo sed -i 's/#user_allow_other/user_allow_other/' /etc/fuse.conf
```
Last, we want the merged pool to be persistent so we edit `/etc/fstab`:
```bash
sudo nano /etc/fstab
```
and add the drives and MergerFS pool by adding the following to `/etc/fstab`:
```
# --- Physical HDDs ---
UUID=711aed59-492f-4978-b8e5-899eb1e7479c /mnt/storage1 ext4 defaults,noatime,nofail 0 2
UUID=1addcd31-341d-447a-8026-8d1c2e64d086 /mnt/storage2 ext4 defaults,noatime,nofail 0 2
# --- MergerFS Unified Storage Pool ---
/mnt/storage1:/mnt/storage2 /mnt/storage fuse.mergerfs defaults,allow_other,use_ino,category.create=mfs,minfreespace=10G,fsname=mergerfs 0 0
```
After saving the file, mount all filesystems:
```bash
sudo mount -a
```
and verify that the pool is of the pool capacity:
```bash
df -h /mnt/storage
```
Now one of the major choices here was the lack of RAID or backup system (for now).
The reason is that it would substantially reduce our available storage space.
That being said if one of the HDDs were to fail then the other would still be safe and operational.
However, if files are deleted from any drives there is no coming back.