Utilizzo del disco

Utilizzo del disco#

NethServer 8 utilizza podman per gestire i container OCI. Quando si eseguono più container, l’utilizzo del disco crescerà abbastanza velocemente e si potrebbe rapidamente esaurire lo spazio.

I container rootless inseriscono i dati all’interno della directory /home dell’utente. Quindi, se si prevede di eseguire molti servizi sullo stesso host, prendere in considerazione montare un disco o una partizione supplementare sul percorso /home.

I container rootful solitamente salvano immagini e volumi all’interno della directory /var/lib/containers/storage.

Per ispezionare la configurazione di storage di podman della distribuzione, è possibile utilizzare il seguente comando:

podman info -f json | jq .store.graphRoot

C’è un’altra directory che tende a crescere /var/lib/nethserver: contiene l’interfaccia utente e le azioni dei moduli rootful.

Aggiungere più spazio#

Se stai esaurendo lo spazio su disco, considera di espandere il filesystem /home.

Su una macchina fisica, l’opzione migliore è quella di impostare LVM durante l’installazione della distribuzione. D’altra parte, su una macchina virtuale si potrebbe facilmente espandere l’intero filesystem root.

Se non è possibile nessuna delle suddette azioni, si può prendere in considerazione l’aggiunta di un nuovo disco e la migrazione dei dati esistenti utilizzando lo script qui sotto. Lo script:

  • arresta tutti i container rootless

  • copia tutti i container rootless all’interno del nuovo disco

  • recupera spazio dal filesystem root

  • monta il nuovo disco sotto /home

  • riavvia tutti i container rootless

Prima di eseguire lo script, assicurarsi di collegare il disco alla macchina, formattarlo e montarlo in un percorso personalizzato come /mnt/temp_disk. Quindi lanciare lo script inserendo il percorso di mount come parametro, così:

migrate /mnt/temp_disk

Lo script migrate`:.

#!/bin/bash
set -e
mount_dir=$1
if [ -z "$mount_dir" ]; then
  echo "Please provide the disk mount dir"
  exit 1
fi
if [ ! -d "$mount_dir" ]; then
  echo "Mount dir not found"
  exit 1
fi
if ! which rsync &>/dev/null; then
  echo "rsync not found, please install it before proceed"
  exit 1
fi
device=$(grep $(echo "$mount_dir" | sed 's/\/$//') /etc/mtab | awk '{print $1}')
if [ -z "$device" ]; then
  echo "Device not found for $mount_dir"
  exit 1
fi
for userhome in /home/*[0-9]; do
  moduleid=$(basename $userhome)
  echo "Disabling rootless module ${moduleid}..."
  systemctl stop user@$(id -u $moduleid)
done
echo "Copying files..."
rsync -avrX --delete-after /home/ $mount_dir/
echo "Reclaim space..."
for userhome in /home/*[0-9]; do
 rm -rf $userhome
done
echo "Remount disk to /home..."
umount $device
mount $device /home
for userhome in /home/*[0-9]; do
  moduleid=$(basename $userhome)
  echo "Starting rootless module ${moduleid}..."
  systemctl start user@$(id -u $moduleid)
done
echo "Done"
echo
eval $(blkid $device -o export)
echo "Add this line to fstab:"
echo
echo "UUID=$UUID /home $TYPE rw,errors=remount-ro 0 1"