Intallation du Serveur

Téléchargez l’image .iso de la dernière version LTS d’Ubuntu Server.

Installer l'iso sur une machine ou machine virtuelle (options par défaut).

Paramétrage du réseau

Récupérer l'adresse réseau par la commande ip a.

3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
 link/ether 08:00:27:f0:b7:c9 brd ff:ff:ff:ff:ff:ff
 inet6 fe80::a00:27ff:fef0:b7c9/64 scope link 
 valid_lft forever preferred_lft forever

Pour attribuer une IP statique à cette interface, créez le fichier /etc/netplan/60-lan_statique.yaml :

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
 version: 2
 renderer: networkd
 ethernets:
   enp0s8:
     dhcp4: no
     dhcp6: no
     addresses: [192.168.0.1/24]
     gateway4: 0.0.0.0
     nameservers:
       addresses: [127.0.0.1]

Appliquer la configuration par la commande :

 sudo netplan apply

Ajouter l'adresse et le nom du client dans le fichier /erc/hosts (par ex):

192.168.0.2 vm-client

ping serveur -> client et client -> seveur.

Pour avoir une machine bien à jour :

sudo apt-get update && sudo apt-get dist-upgrade

Gestion des disques

Ajouter un disque (machine virtuelle)

Éteignez la machine vm-serveur et dans VirtualBox, allez dans “configuration”.

Dans la section “Stockage”, cliquez sur “Ajouter un disque dur” au niveau de votre Contrôleur SATA puis sur “Créer un nouveau disque”. Laissez le type de fichier par défaut, choisissez un fichier de taille fixe, donnez-lui un nom et allouez-lui une taille de 1Go (oui d’accord, on ne stockera pas beaucoup de fichiers avec un disque dur pareil).

Maintenant que votre nouveau disque dur est “physiquement” créé, vous pouvez redémarrer le serveur vm-serveur .

Pour pouvoir utiliser votre nouveau disque, il vous reste à :

Partitionner un disque

Liste des disques (ex) :

$ ls -l /dev/sd*
brw-rw---- 1 root disk 8,   0 avril 19 09:54 /dev/sda
brw-rw---- 1 root disk 8,   1 avril 19 09:54 /dev/sda1
brw-rw---- 1 root disk 8,   2 avril 19 09:54 /dev/sda2
brw-rw---- 1 root disk 8, 16 avril 19 09:54 /dev/sdb

On ne trouve pas encore de /dev/sdb1 car nous n’avons pas encore créé de partition sur ce disque.

Infos sur les disques :

$ sudo gdisk -l /dev/sda #pour les informations sur le disque système de 10Go
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 20971520 sectors, 10.0 GiB
Model: VBOX HARDDISK
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): E8F36744-0ECF-4822-90D4-362BA0BBE912
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 20971486
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)

Number Start (sector) End (sector) Size Code Name
1 2048 4095 1024.0 KiB EF02
2 4096 20969471 10.0 GiB 8300

$ sudo gdisk -l /dev/sdb #pour les informations sur le disque additionnel de 1Go
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present

Creating new GPT entries.
Disk /dev/sdb: 2097152 sectors, 1024.0 MiB
Model: VBOX HARDDISK
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): F93AF0D3-EC3A-4A36-9A21-56CCCB2AD17A
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 2097118
Partitions will be aligned on 2048-sector boundaries
Total free space is 2097085 sectors (1024.0 MiB)

Number Start (sector) End (sector) Size Code Nam

Maintenant que vous êtes sûr que le disque additionnel dédié aux données est bien /dev/sdb :

créer une partition sur ce disque

$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present

Creating new GPT entries.

Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this men

Création de la partition (sdb1):

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-2097118, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-2097118, default = 2097118) or {+-}size{KMGTP}: Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem'

Formater un disque

sudo mkfs -t ext4 /dev/sdb1

Monter un disque

Exemple :

sudo su - #On devient root “à plein temps”
mkdir -p /var/data1/non_monte #Création d’un premier répertoire de montage
mkdir -p /mnt/mes_donnees/ #Création d’un deuxième répertoire de montage
mount -t ext4 /dev/sdb1 /mnt/mes_donnees
mkdir -p /mnt/mes_donnees/repertoire1

Montage automatique au démarrage

Ajouter la ligne suivante dans le fichier /etc/fstab:

/dev/sdb1 /var/data1 ext4 defaults 0 0

Gérer le système de fichier ext4

Réparer une partition

sudo e2fsck -y /dev/sdb1

Optimiser une partition

Informations sur la partition

$ sudo tune2fs -l /dev/sdb1
Filesystem volume name:   <none>
Filesystem UUID: 623fac67-a7af-4ae5-9b1d-0fa958e6290
..........
Filesystem state:         clean
..........
Inode count:              65536
Block count:              261883
Reserved block count:     13094
Block size:               409

Sur des partitions très petites avec un grand nombre de fichiers, vous pouvez être à cours d’inodes avant d’être à court de blocs. Si vous avez des erreurs indiquant un “disque plein” alors que vous voyez qu’il vous reste de l’espace libre, pensez à vérifier vos inodes. Vous pouvez vérifier l’espace libre sur vos disques par la commande df -h et le nombre d’inodes disponibles par la la commande df -hi .

On peut utiliser tune2fs pour modifier tous ces attributs :

Redimensionner une partition

Réduire une partition

Pour réduire une partition ext4, il est nécessaire qu’elle soit démontée :

$ sudo umount LABEL=shared_data #Équivalent à umount /dev/sdb1
$ sudo e2fsck -f /dev/sdb1
e2fsck 1.44.1 (24-Mar-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
shared_data: 12/65536 files (0.0% non-contiguous), 8860/261883 block
$ sudo resize2fs /dev/sdb1 700M
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on /dev/sdb1 to 179200 (4k) blocks.
The filesystem on /dev/sdb1 is now 179200 (4k) blocks long

Créer une nouvelle partition

Suppression de la table de partition (cette opération ne touche pas aux données mais seulement à la table de partition):

$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
 MBR: protective
 BSD: not present
 APM: not present
 GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): d
......

Créer la nouvelle partition :

Command (? for help): n
Partition number (2-128, default 2):
First sector (34-2097118, default = 1640448) or {+-}size{KMGTP}:
Last sector (1640448-2097118, default = 2097118) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap

Vérifiez que la table de partition est correcte :

Command (? for help): p
Disk /dev/sdb: 2097152 sectors, 1024.0 MiB
Model: VBOX HARDDISK
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 52A98F48-8F15-4DC8-8483-A65140F9AF00
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 2097118
Partitions will be aligned on 2048-sector boundaries
Total free space is 4061 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size     Code  Name
  1          2048         1638400   799.0 MiB  8300 Linux filesystem
  2            1640448         2097118   223.0 MiB  8200 Linux swap

Enregistrer les changements :

Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully

Réajuster la taille du système de fichiers ext4 à la taille de la partition :

$ sudo resize2fs /dev/sdb1
e2fsck 1.44.1 (24-Mar-2018)
Resizing the filesystem on /dev/sdb1 to 204544 (4k) blocks.
The filesystem on /dev/sdb1 is now 204544 (4k) blocks long

Formatage de la partition de swap :

$ sudo mkswap /dev/sdb2
Setting up swapspace version 1, size = 223 MiB (233807872 bytes)
no label, UUID=fe6fce3a-bc50-4121-95b7-f7112254d25a
$ sudo swapon /dev/sdb2

Pour activer cette partition de swap au démarrage, ajoutez la ligne suivante à votre fichier /etc/fstab :

/dev/sdb2    none    swap    sw    0 0

RAID logiciel

Types de RAID

Mise en place d'un RAID 1 logiciel

Ex : mise en place d'une solution RAID 1 avec trois disques :

Reconstruire un RAID suite à un défaut disque

Pour essayer, vous pouvez simuler la perte du disque /dev/sdb et vérifier que le disque /dev/sdd prend bien le relai automatiquement :

$ sudo mdadm --manage /dev/md0 --fail /dev/sdb
$ sudo mdadm --query --detail /dev/md

Gestion des partitons avec LVM

Une fois que vous avez partitionné votre disque, il est laborieux et risqué de redimensionner les partitions et d’en ajouter de nouvelles. De plus, quand on manque de place dans une partition, on pourrait être tenté d’en ajouter une nouvelle mais on ne pourra pas répartir automatiquement les données sur les deux partitions. Il faudra créer un point de montage pour chaque partition et répartir manuellement nos données entre ces différents points de montage. Ça peut vite devenir compliqué à gérer...

LVM (logical Volume Management)répond à ces problématiques et va vous permettre de gérer beaucoup plus facilement vos espaces de stockage.

Fonctionnement de LVM

Un volume physique peut être un disque entier, une partition ou un volume RAID. On doit “marquer” un volume physique pour pouvoir l’utiliser avec LVM.

ex : LVM avec un disque RAID

$ sudo umount /dev/md0 #Le volume doit être démonté
$ sudo pvcreate /dev/md0
WARNING: ext4 signature detected on /dev/md0 at offset 1080. Wipe it? [y/n]: y
 Winping ext4 signature on /dev/md0
 Physical volume “/dev/md0” successfully created

Informations sur les volumes physiques avec les commandes sudo pvs ou sudo pvdisplay.

Ensuite, vous regrouperez ces volumes physiques dans des groupes de volumes. Pour l’instant, vous allez créer un groupe de volumes appelé “raid-volume” qui ne contient que votre RAID. Vous pourrez plus tard ajouter dynamiquement n’importe quel volume physique à ce groupe.

$ sudo vgcreate raid-volume /dev/md0

Informations sur less groupes de volumes avec les commandes sudo vgs ou sudo vgdisplay.

Découper ces groupes de volumes en volumes logiques qui sont l’équivalent LVM des partitions.

Ex : Pour l’instant, vous allez créer un volume logique “data1” de 800Mo et un volume “data2” de 200Mo sur votre groupe de volume.

$ sudo lvcreate --name data1 --size 800M raid-volume
$ sudo lvcreate --name data2 --size 200M raid-volume

Informations sur vos volumes logiques avec les commandes sudo lvs ou sudo lvdisplay.

toutes les commandes qui concernent :

Redimensionner des volumes avec LVM

Pour pouvoir réduire par exemple /var/data1 de 800Mo à 600Mo, il vous faut d’abord réduire le système de fichiers et ensuite réduire le volume logique. LVM vous permet de faire tout ça en une seule commande !

$ sudo lvreduce --size 600M --resizefs /dev/raid-volume/data1
Do you want to unmount “/var/data1” ? [Y|n] y
fsck from util-linux 2.31.1
/dev/mapper/raid--volume-data1: 11/51296 files (0.0% non-contiguous), 7726/204800 blocks
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystème on /dev/mapper/raid--volume-data1 to 153600 (4k) blocks.
The filesystème on /dev/mapper/raid--volume-data1 is now 153600 (4k) blocks long.

Size of logical volume raid-volume/data1 changed from 800.00 MiB (200 extents) to 600.00 MiB 
(150 extents).
Logical volume raid-volume/data1 successfully resized

Éteignez votre serveur, ajoutez un nouveau disque de 1Go et rallumez-le.

Commencez par sortir le disque de spare /dev/sdb de votre RAID : il faudra simplement être plus réactif pour changer un disque qui tomberait en défaut ;)

$ sudo mdadm --manage /dev/md0 --fail /dev/sdb --remove /dev/sdb

Vous allez alors pouvoir utiliser ce disque /dev/sdb “libéré” pour créer un RAID 1 avec le nouveau disque /dev/sde

$ sudo   mdadm   --create /dev/md1 --level=raid1 --raid-devices=2 /dev/sdb /dev/sde

Enfin, pensez à mettre votre fichier /etc/mdadm/mdadm.conf à jour :

Snapshots LVM

Un “snapshot” ou “instantané” en français est une image de l’état de votre volume logique à un instant t. Un snapshot est stocké sur le volume groupe donc il vous faut un peu d’espace non utilisé sur votre volume groupe.

$ sudo lvreduce --size -300M --resizefs /dev/raid-volume/data2
$ sudo dd if=/dev/zero of=/var/data2/fichier_5M bs=1k count=5000
$ sudo dd if=/dev/zero of=/var/data2/fichier_10M bs=1k count=1000

Ici, vous avez réduit le volume logique /dev/raid-volume/data2 de 300Mo et vous avez créé deux fichiers dans /var/data2 : un de 5Mo et un de 10Mo. Pour ça, vous avez utilisé la commande dd qui copie des données bit par bit.

Créez maintenant un snapshot appelé backup_ddmmyyyy du volume logique /dev/raid-volume/data2 et allouez lui une taille de 100Mo par la commande :

$ sudo lvcreate --snapshot --name backup_ddmmyyyy --size 100M /dev/raid-volume/data2

Vous pouvez voir votre snapshot par les commandes sudo lvs ou sudo lvdisplay.

À sa création, un snapshot a une taille de 0. Il n’y a pas eu de copie des données, on a juste marqué le moment à partir duquel on va enregistrer les changements. Un snapshot est donc quasi-instantané même sur de très gros volumes de données. Ensuite, quand vous continuez à travailler, à ajouter, supprimer et modifier des fichiers sur votre volume logique, tous vos changements vont être enregistrés dans votre snapshot et ce dernier va grossir :

$ sudo rm /var/data2/fichier_10M && sudo lvs
$ sudo rm /var/data2/fichier_5M && sudo lv

Vous pouvez ensuite utiliser votre snapshot comme n’importe quel volume logique. Pour récupérer des fichiers effacés par erreur, vous pouvez par exemple monter ce volume et retrouver vos fichiers dans l’état où ils étaient au moment où vous avez fait le snapshot :

$ sudo mkdir /var/snapshot
$ sudo mount -t ext4 /dev/raid-volume/backup_ddmmyyyy /var/snapshot
$ sudo cp /var/snapshot/fichier_* /var/data2

Une fois que vous n’avez plus besoin de votre snapshot, vous pouvez le supprimer :

$ sudo umount /var/snapshot
$ sudo lvremove /dev/raid-volume/backup_ddmmyyy

Sauvegardes

Sauvegardes synchrones

Ce sont les sauvegardes qui se font en temps réel comme dans le cas du RAID 1. À chaque instant, vous avez un double des données sur un autre support.

L’inconvénient, c’est qu’en cas de bug ou de mauvaise manipulation, vous pouvez perdre vos données partout en même temps. Par exemple, si vous effacez par erreur un fichier sur un système en RAID 1, il est effacé des deux disques en même temps. Et là, c’est le drame…

Sauvegardes asynchrones

Ce sont des sauvegardes à faire à intervalle régulier. En cas de problème, ça permet de revenir dans le passé mais vous pouvez perdre toutes les mises à jour depuis la dernière sauvegarde. La durée de l’intervalle est donc une affaire de compromis.

NFS

NFS est un protocole historique de partage de fichiers entre machines UNIX (famille de systèmes d’exploitation dont Linux et Mac OS X font partie).

En présence de pare-feu, le port par défaut alloué à NFSv4 et qu’il faudrait ouvrir serait le port TCP 2049 entrant.

Ex : Vous allez partager par NFS les deux partitions de données sous LVM+RAID :

Configurer le serveur

Configurer le client