Ți-ai dorit vreodată ca stocarea ta la distanță să funcționeze la fel de rapid ca un SSD NVMe local? Acest ghid îți va arăta mai multe abordări pentru optimizarea performanței stocării la distanță pe sisteme bazate pe Debian/RHEL, cu rezultate dovedite prin teste de benchmark.

Cuprins

Rezultate Benchmark

Iată ce poți obține cu aceste tehnici de optimizare:

Montare Tradițională la Distanță (Fără Optimizare)

dd if=/dev/zero of=./testfile bs=1M count=100
104857600 bytes (105 MB, 100 MiB) copied, 29.1344 s, 3.6 MB/s

Cu Tehnici Avansate de Optimizare

dd if=/dev/zero of=./testfile bs=1M count=100
104857600 bytes (105 MB, 100 MiB) copied, 0.144608 s, 725 MB/s

Metoda 1: Cache Optimizat cu Rclone

Această metodă folosește rclone cu parametri reglați fin pentru performanță maximă.

Cerințe preliminare

  • Stocare la distanță cu acces SFTP
  • Minim 10GB spațiu liber pe disc local pentru cache
  • Debian/Ubuntu: apt install rclone fuse
  • RHEL/CentOS/Fedora: dnf install epel-release && dnf install rclone fuse

Instalare

  1. Creează directoarele necesare
mkdir -p /mnt/storage /mnt/.cache
  1. Configurează rclone

Pentru servere headless:

rclone config

Pentru configurare GUI (desktop acasă):

rclone rcd --rc-web-gui

Creează un nou remote cu aceste setări:

name = storage-sftp
storage type = sftp
host = [Adresa IP a serverului de stocare]
username = [Nume utilizator]
port = [Port SSH - de obicei 22]
password = [Parolă]
  1. Montează cu parametri optimizați
rclone mount storage-sftp:/cale/la/distanță /mnt/storage --daemon \
    --dir-cache-time 72h --cache-dir=/mnt/.cache \
    --vfs-cache-mode full --vfs-cache-max-size 10G \
    --buffer-size 256M --vfs-read-ahead 512M \
    --vfs-read-chunk-size 128M --vfs-read-chunk-size-limit 1G \
    --transfers 4 --checkers 8 --contimeout 60s \
    --timeout 300s --low-level-retries 10
  1. Creează un serviciu systemd pentru montare automată

Creează fișierul /etc/systemd/system/storage-mount.service:

[Unit]
Description=Montare Rclone Optimizată la Distanță
AssertPathIsDirectory=/mnt/storage
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/rclone mount storage-sftp:/cale/la/distanță /mnt/storage \
    --dir-cache-time 72h --cache-dir=/mnt/.cache \
    --vfs-cache-mode full --vfs-cache-max-size 10G \
    --buffer-size 256M --vfs-read-ahead 512M \
    --vfs-read-chunk-size 128M --vfs-read-chunk-size-limit 1G \
    --transfers 4 --checkers 8 --contimeout 60s \
    --timeout 300s --low-level-retries 10
ExecStop=/bin/fusermount -u /mnt/storage
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
  1. Activează și pornește serviciul
systemctl daemon-reload
systemctl enable storage-mount
systemctl start storage-mount

Metoda 2: NFS cu Cache Local

Dacă furnizorul tău de stocare suportă NFS, această metodă oferă adesea performanțe mai bune decât SFTP.

Cerințe preliminare

  • Stocare la distanță cu suport NFS
  • Debian/Ubuntu: apt install nfs-common
  • RHEL/CentOS/Fedora: dnf install nfs-utils

Instalare

  1. Instalează pachetele necesare
# Debian/Ubuntu
apt install nfs-common bcache-tools

# RHEL/CentOS/Fedora
dnf install nfs-utils bcache-tools
  1. Creează o partiție de cache pe NVMe

Avertisment: Acest lucru va șterge datele de pe partiția specificată!

# Identifică dispozitivul tău NVMe
lsblk

# Creează un dispozitiv bcache
# /dev/nvme0n1p1 este partiția ta NVMe pentru cache
# Înlocuiește X cu dispozitivul tău real
make-bcache -C /dev/nvme0n1p1
  1. Montează partajarea NFS
mkdir -p /mnt/storage-backend
mount -t nfs server.stocare:/cale /mnt/storage-backend
  1. Configurează bcache cu NFS ca backend
# Înregistrează montarea NFS ca dispozitiv backend bcache
echo /mnt/storage-backend > /sys/fs/bcache/register

# Găsește numele dispozitivului bcache
ls /dev/bcache*
mkdir -p /mnt/storage
mount /dev/bcache0 /mnt/storage
  1. Creează fișiere de serviciu systemd pentru montare automată

Creează fișierul /etc/systemd/system/storage-nfs-backend.service:

[Unit]
Description=Montare Backend NFS
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/mount -t nfs server.stocare:/cale /mnt/storage-backend
ExecStop=/bin/umount /mnt/storage-backend

[Install]
WantedBy=multi-user.target

Creează fișierul /etc/systemd/system/storage-cached.service:

[Unit]
Description=Montare NFS cu Bcache
After=storage-nfs-backend.service
Requires=storage-nfs-backend.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c 'echo /mnt/storage-backend > /sys/fs/bcache/register && mount /dev/bcache0 /mnt/storage'
ExecStop=/bin/umount /mnt/storage

[Install]
WantedBy=multi-user.target
  1. Activează și pornește serviciile
systemctl daemon-reload
systemctl enable storage-nfs-backend storage-cached
systemctl start storage-nfs-backend storage-cached

Metoda 3: Wireguard + I/O Avansat

Utilizarea Wireguard în locul SSH tradițional reduce overhead-ul de criptare păstrând în același timp securitatea.

Cerințe preliminare

  • Control asupra atât a clientului cât și a serverului la distanță
  • Debian/Ubuntu: apt install wireguard-tools
  • RHEL/CentOS/Fedora: dnf install wireguard-tools

Instalare

  1. Instalează Wireguard pe ambele sisteme
# Debian/Ubuntu
apt install wireguard-tools

# RHEL/CentOS/Fedora
dnf install wireguard-tools
  1. Generează chei pe sistemul local
wg genkey | tee local-private.key | wg pubkey > local-public.key
  1. Generează chei pe serverul de stocare la distanță
wg genkey | tee remote-private.key | wg pubkey > remote-public.key
  1. Configurează Wireguard pe sistemul local

Creează fișierul /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = <cheie-privată-locală>
Address = 10.10.10.1/24
ListenPort = 51820

[Peer]
PublicKey = <cheie-publică-remote>
AllowedIPs = 10.10.10.2/32
Endpoint = <ip-server-la-distanță>:51820
PersistentKeepalive = 25
  1. Configurează Wireguard pe serverul de stocare la distanță

Creează fișierul /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = <cheie-privată-remote>
Address = 10.10.10.2/24
ListenPort = 51820

[Peer]
PublicKey = <cheie-publică-locală>
AllowedIPs = 10.10.10.1/32
  1. Pornește Wireguard pe ambele sisteme
wg-quick up wg0
systemctl enable wg-quick@wg0
  1. Optimizează parametrii de rețea pe ambele sisteme
# Creează un fișier /etc/sysctl.d/99-network-performance.conf cu aceste conținuturi:
cat > /etc/sysctl.d/99-network-performance.conf << EOF
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_congestion_control = bbr
net.core.netdev_max_backlog = 5000
EOF

# Aplică modificările
sysctl -p /etc/sysctl.d/99-network-performance.conf
  1. Montează folosind NFS peste Wireguard cu io_uring

Pe serverul de stocare la distanță, configurează NFS:

# Debian/Ubuntu
apt install nfs-kernel-server

# RHEL/CentOS/Fedora
dnf install nfs-utils

# Exportă directorul
echo '/storage 10.10.10.1(rw,sync,no_subtree_check)' >> /etc/exports
exportfs -a
systemctl restart nfs-server

Pe sistemul local:

mkdir -p /mnt/storage
mount -t nfs -o vers=4.2,fsc,nocto,noatime,nodiratime 10.10.10.2:/storage /mnt/storage

# Pentru kernel Linux 5.1+ cu suport io_uring
mount -t nfs -o vers=4.2,fsc,nocto,noatime,nodiratime,io_uring 10.10.10.2:/storage /mnt/storage
  1. Creează un serviciu systemd pentru montare automată

Creează fișierul /etc/systemd/system/storage-wireguard.service:

[Unit]
Description=Montează stocare peste Wireguard
After=network-online.target wg-quick@wg0.service
Requires=wg-quick@wg0.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/mount -t nfs -o vers=4.2,fsc,nocto,noatime,nodiratime 10.10.10.2:/storage /mnt/storage
ExecStop=/bin/umount /mnt/storage

[Install]
WantedBy=multi-user.target
  1. Activează și pornește serviciul
systemctl daemon-reload
systemctl enable storage-wireguard
systemctl start storage-wireguard

Metoda 4: Abordare Hibridă Local/La Distanță

Această abordare îți oferă performanță reală de NVMe local în timp ce se sincronizează automat cu stocarea la distanță.

Cerințe preliminare

  • Debian/Ubuntu: apt install lsyncd
  • RHEL/CentOS/Fedora: dnf install epel-release && dnf install lsyncd

Instalare

  1. Instalează pachetele necesare
# Debian/Ubuntu
apt install lsyncd

# RHEL/CentOS/Fedora
dnf install epel-release
dnf install lsyncd
  1. Creează puncte de montare locale și la distanță
mkdir -p /mnt/local-nvme /mnt/remote-storage
  1. Montează unitatea ta NVMe locală
# Înlocuiește cu partiția ta NVMe reală
mount /dev/nvme0n1p1 /mnt/local-nvme
  1. Montează stocarea ta la distanță folosind una dintre metodele anterioare
# Exemplu folosind rclone
rclone mount storage-sftp:/cale/la/distanță /mnt/remote-storage --daemon
  1. Configurează lsyncd pentru sincronizare în timp real

Creează fișierul /etc/lsyncd/lsyncd.conf.lua:

settings {
   logfile = "/var/log/lsyncd/lsyncd.log",
   statusFile = "/var/log/lsyncd/lsyncd-status.log",
   statusInterval = 10
}

sync {
   default.rsync,
   source = "/mnt/local-nvme/",
   target = "/mnt/remote-storage/",
   delay = 5,
   rsync = {
      archive = true,
      compress = true,
      bwlimit = 10000  -- limită de bandă de 10MB/s
   }
}
  1. Creează directoarele necesare pentru log
mkdir -p /var/log/lsyncd
  1. Pornește și activează lsyncd
systemctl start lsyncd
systemctl enable lsyncd
  1. Creează link-uri simbolice pentru comoditate (opțional)
ln -s /mnt/local-nvme /storage

Depanare

Probleme de Conexiune

# Verifică dacă montarea răspunde
ls -la /mnt/storage

# Verifică log-urile de sistem pentru erori
journalctl -u storage-mount -n 50

# Repornește serviciul de montare
systemctl restart storage-mount

# Forțează demontarea dacă e blocată
fusermount -uz /mnt/storage

Degradarea Performanței

# Verifică spațiul pe disc pentru cache
df -h /mnt/.cache

# Golește cache-ul rclone (dacă folosești rclone)
rm -rf /mnt/.cache/*
systemctl restart storage-mount

# Verifică performanța rețelei
iperf3 -c <ip-server-la-distanță>

Monitorizarea Sănătății Montării

# Monitorizează transferurile în curs cu rclone
rclone rc core/stats

# Urmărește activitatea I/O în timp real
iostat -xm 2

Considerații de Securitate

  1. Folosește autentificarea bazată pe chei în loc de parolă Generează o pereche de chei SSH:
   ssh-keygen -t ed25519 -f ~/.ssh/storage_key

Pentru rclone, actualizează configurația pentru a folosi cheia:

   rclone config

Alege remote-ul tău, apoi:

   key_file = /root/.ssh/storage_key
   key_use_agent = false
  1. Criptează datele sensibile Dacă stochezi date sensibile, folosește rclone crypt:
   rclone config

Creează un nou remote de tip "crypt" care indică către remote-ul tău existent.

  1. Restricționează permisiunile de montare
   chmod 700 /mnt/storage

Ține minte că, deși aceste metode creează impresia unor viteze de acces locale, transferurile efective de fișiere către stocarea la distanță au loc în continuare în fundal. Pentru cea mai bună experiență, asigură-te că ai o conexiune la internet stabilă și rapidă.