Tuto configuration espace disque pour Yunohost

Bonjour voici le brouillon d’un tuto que je viens de réaliser.
N’hesitez pas à tester, commenter etc …

Tuto préparation serveur yunohost.

Remarque importante :
Attention il faut un petit peu de connaissances système, usage de fdisk, création d’un file system concepts LVM et cryptsetup.
Donc ne pas hésiter à faire quelques recherches sur la toile avant toute chose.

Périmètre :
Ce tuto s’applique comme dans mon cas sur un VPS fournit par un hébergeur sous debian jessie.
Mais il peut tout à fait s’appliquer à un serveur en auto hébergement.

Je suis hébergé depuis 2 ans, et en suis globalement satisfait.
Mais certaines contraintes me font chercher ailleurs pour voir si l’herbe est plus verte.
Sur mon VPS actuel, il n’est pas possible de gérer facilement l’espace disque disponible, et yunohost comme toute distribution serveur a ses contraintes en termes d’usage de cet espace.

Mes objectifs sont:

  • Isoler les espaces disques data, utilisés par yunohost.
  • Crypter ces espaces.
  • Gérer l’espace dynamiquement par extension ou ajout de disque simplement.

Pour cela je vais utiliser LVM2 et crypsetup.

Je viens donc de louer un nouveau VPS de type KVM chez un hébergeur qui me permet un accès facile à la console linux (ex: accès au boot grub) et un mode rescue qui me permet de monter mon système en cas de problème ou de maintenance.

En effet il est très important d’avoir ces 2 possibilités pour faire ce que j’envisage.

LE VPS dispose de 500Go ce qui est confortable, par contre le disque est decoupé en deux partitions, une toute petite pour /boot et le reste pour / ce qui ne me convient pas du tout.
Je veux diminuer / à environ 6 Go pour configurer le reste de l’espace à ma guise.
Pour cela il faut réduire la partition
Malheureusement sur ext4, on ne peut pas le faire à chaud.
La seule solution le reboot en mode rescue pour modifier le partitionnement initial.

Voici ma config de départ.
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 487423 485376 237M 83 Linux
/dev/vda2 487424 1048573951 1048086528 499.8G 83 Linux

Je boote donc en mode rescue par le panel de mon fournisseur.
Pour ceux qui hébergent chez eux, j’aime bien utiliser knoppix comme distro de rescue.

Se logger root et réduire la partition /.

D’abord le file system

e2fsck -f /dev/vda2
e2fsck 1.42.13 (17-May-2015)
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
/dev/vda2: 21406/32759808 files (0.3% non-contiguous), 2257252/131010816 blocks

resize2fs /dev/vda2 6G
resize2fs 1.42.13 (17-May-2015)
Resizing the filesystem on /dev/vda2 to 1572864 (4k) blocks.
The filesystem on /dev/vda2 is now 1572864 (4k) blocks long

Ensuite avec fdisk
Réduire la partition, attention si erreur, il y a risque de destruction, donc bien réfléchir et utiliser une calculette si nécessaire.
Je la retaille à 6,5 Go ce qui me laisse une marge

Pour cela il faut d’abord la supprimer
fdisk /dev/vda

Welcome to fdisk (util-linux 2.26.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p
Disk /dev/vda: 500 GiB, 536870912000 bytes, 1048576000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5710e40b

Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 487423 485376 237M 83 Linux
/dev/vda2 487424 1048573951 1048086528 499.8G 83 Linux

Command (m for help): d
Partition number (1,2, default 2): 2

Partition 2 has been deleted.

Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2):
First sector (487424-1048575999, default 487424):
Last sector, +sectors or +size{K,M,G,T,P} (487424-1048575999, default 1048575999): +6.5G

Created a new partition 2 of type ‘Linux’ and of size 6.5 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 487423 485376 237M 83 Linux
/dev/vda2 487424 14094335 13606912 6.5G 83 Linux

On redémarre en mode normal pour voir si tout va bien, et normalement cela doit-être le cas :slight_smile:
On réajuste si nécessaire / à la taille réelle de la partition (6,5Go)
resize2fs /dev/vda2

et on créer par fdisk un nouvelle partition de type LVM
fdisk /dev/vda

Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 487423 485376 237M 83 Linux
/dev/vda2 487424 14000000 13512577 6.5G 83 Linux
/dev/vda3 14000128 1048575999 1034575872 493.3G 8e Linux LVM

Profitons pour installer parted afin d’utiliser partprobe pour la relecture de la table des partitions, ce qui évite un reboot.

apt-get install parted

Relecture de la table des partitions
partprobe /dev/vda
Ou sinon reboot du serveur.

Préparation de l’espace disque.

Installation si nécessaire de crytpsetup
apt-get install cryptsetup

D’abord création du device crypté, il faudra créer une passphrase (ne pas l’oublier)
cryptsetup -y -v luksFormat /dev/vda3

WARNING!
========
This will overwrite data on /dev/vda3 irrevocably.


Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

Création du mapping
cryptsetup luksOpen /dev/vda3 yuno_crypt

vérification
ls -ali /dev/mapper/yuno_crypt

Formatage du volume
apt-get install pv
pv -tpreb /dev/zero | dd of=/dev/mapper/yuno_crypt bs=128M
Remarque: L’exécution de la commande a durée pratiquement 7H

Pour plus d’information sur cryptsetup voir :

Préparation de la configuration LVM

Installation de lvm si nécessaire
apt-get install lvm2

éditer le fichier /etc/lvm/lvm.conf
et dans la section filter ajouter une ligne pour prendre en compte les devices mapper
filter = [ “a|dev/sda[2-9]$|”, “a/mapper./", "r/./” ]

Créer la struture LVM

D’abord le physical volume
pvcreate /dev/mapper/yuno_crypt

Ensuite le volume group
vgcreate vg_yuno /dev/mapper/yuno_crypt

Afficher l’UUID du de la partition
lsblk -o name,uuid,mountpoint
NAME UUID MOUNTPOINT
vda
├─vda1 11102a8e-c64c-40f2-af1a-caa8c48e2abe /boot
├─vda2 9930e9a9-ee56-44eb-99a8-3a6577408604 /
└─vda3 58e1bc55-0abd-4528-8a20-fb98c6ec2da4

Modifier le fichier /etc/crypttab comme suit
yuno_crypt UUID=58e1bc55-0abd-4528-8a20-fb98c6ec2da4 none luks

Tester
cryptdisks_stop yuno_crypt
cryptdisks_start yuno_crypt

Préparation des logicals volumes.

Dans ma vision des choses, je veux 4 espaces différents pour les données yunohost
• /var/mail pour la messagerie
• /home pour des données utilisateurs et également owncloud
• /home/yunohost.transmission pour transmission
• /tmp

lvcreate -L 50G -n lv_mail vg_yuno
** Logical volume “lv_mail” created**
lvcreate -L 10G -n lv_tmp vg_yuno
** Logical volume “lv_tmp” created**
lvcreate -L 150G -n lv_home vg_yuno
** Logical volume “lv_home” created**
lvcreate -L 150G -n lv_transmission vg_yuno
** Logical volume “lv_transmission” create**

Bien entendu, chacun fera en fonction de ses besoins en termes de nombre de file system et de taille.
Dans mon cas je n’utilise pas tout l’espace disque disponible, ce n’est pas nécessaire et cela me permettra de l’utiliser en fonction de mes besoins futurs (extension de FS, ajout de nouveaux FS,etc …)

Formater en ext4

for i in /dev/mapper/vg_yuno-lv_*; do mkfs.ext4 $i; done

On creer les points de montage si nécessaire.

mkdir /var/mail /home /home/yunohost.transmission
on modifie /etc/fstab en conséquence

pour cela récupération des UUUID
lsblk -o name,uuid,mountpoint

NAME UUID MOUNTPOINT
vda
├─vda1 11102a8e-c64c-40f2-af1a-caa8c48e2abe /boot
├─vda2 9930e9a9-ee56-44eb-99a8-3a6577408604 /
└─vda3 58e1bc55-0abd-4528-8a20-fb98c6ec2da4
└─yuno_crypt f9D7W9-A2o6-1L25-lamS-d4WG-8Cxa-axtBDX
├─vg_yuno-lv_mail 34fa7d71-6f73-4a8c-8850-cb746b064088
├─vg_yuno-lv_tmp 77ba5f46-7fed-4602-bd59-277508cfe4e4
├─vg_yuno-lv_home 3feb02c1-2178-4be4-8305-fa613947c0f9
└─vg_yuno-lv_transmission 117545b1-9417-4bb0-9167-4430ac25c6ca

cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use ‘blkid’ to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#
# / was on /dev/vda2 during installation
UUID=9930e9a9-ee56-44eb-99a8-3a6577408604 / ext4 errors=remount-ro 0 0
# /boot was on /dev/vda1 during installation
UUID=11102a8e-c64c-40f2-af1a-caa8c48e2abe /boot ext4 defaults,noatime 0 0
UUID=77ba5f46-7fed-4602-bd59-277508cfe4e4 /tmp ext4 errors=remount-ro 0 1
UUID=34fa7d71-6f73-4a8c-8850-cb746b064088 /var/mail ext4 errors=remount-ro 0 1
UUID=3feb02c1-2178-4be4-8305-fa613947c0f9 /home ext4 errors=remount-ro 0 1
#UUID=117545b1-9417-4bb0-9167-4430ac25c6ca /home/yunohost.transmission ext4 errors=remount-ro 0 1

Pour relire /etc/fstab :
mount -a

Remettre les droits corrects sur /tmp sous peine d’avoir de gros soucis d’installation de yunohost
chmod 1777 /tmp

puis df pour vérifier ques les Files sytems se montent bien.

df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda2 6518232 1751004 4413036 29% /
udev 10240 0 10240 0% /dev
tmpfs 1225684 85392 1140292 7% /run
tmpfs 3064208 0 3064208 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 3064208 0 3064208 0% /sys/fs/cgroup
/dev/vda1 230925 34076 180619 16% /boot
/dev/mapper/vg_yuno-lv_mail 51475068 20256024 28581220 42% /var/mail
/dev/mapper/vg_yuno-lv_tmp 10190136 23772 9625692 1% /tmp
/dev/mapper/vg_yuno-lv_home 154687468 40412804 106393960 28% /home
tmpfs 612844 0 612844 0% /run/user/1007

Le dernier test, attention il est délicat, le reboot du serveur.

Il faut absolument un accès à la console, parce qu’il vous sera demandé la passphrase pour l’activation du volume crypté.
Dans mon cas j’ai choisi une passphrase en chiffres uniquement par peur d’avoir des problèmes de clavier au démarrage (clavier en qwerty par exemple …)

Si le reboot c’est bien passé, vérifier par df que tous les FS sont bien présents.
Notez que à chaque reboot il faudra intervenir et entrer la passphase, cela implique un accès permanent à la console du serveur.

Voilà maintenant j’ai un partitionnement crypté et à mon sens, mieux adapté à yunohost.
Je vais pouvoir grâce à lvm gérer dynamiquement l’espace disque, étendre, ajouter un autre disque, faire du mirroring, etc …

Nino

2 Likes

Lenny, sérieusement !? Lenny ne reçoit plus de mise à jour de sécurité depuis 2012, et cette version à presque 6 ans…

Desolé c’est jessie , mais bien sur c’etait evident. :sunglasses:

:smiley: j’ai eu peur…

Sinon, pour améliorer la qualité du chiffrement, tu peux remplir la partition avec des zéro avant de formater le volume (on peut aussi le faire après en blindant le disque chiffré avec des fichiers ):

dd if=/dev/zero of= /dev/mapper/yuno_crypt bs=1M

L’idée est de rendre le bruit de fond indisociable du contenu chiffré. Ça évite des attaques par cryptanalyses turbo ninja ultra plus plus hyper complexe. Mais il semblerait qu’ il y ait des gens dans le monde qui sont assez matheux pour pouvoir faire ça.

L’install Debian parle d’ailleurs d’une légère réduction de la qualité de chiffrement si l’on ne procède pas à cette étape.

Je le fait, mais avec cette commande
pv -tpreb /dev/zero | dd of=/dev/mapper/backup2 bs=128M

Ah ouais, j’avais pas vu. Mea culpa.

Désolé pour ce vieux déterrage mais la question reste pertinente malgré tout, as tu un retour d’expérience à faire sur cette répartition?

Je souhaite également partitionner mon disque mais je m’interroge sur la proportion à donner à chaque dossier:

  • /var
  • /home
  • /tmp

Je suis tenté de partir sur une répartition 20% (var) - 70% (home) - 10% (tmp) mais je suis preneur d’un retour avec expérience.

Thanks

Bonsoir,
Dans mon cas, j’ai taillé /var/mail pour mon usage personnel et moderé de messagerie.
Ca me permet également d’eviter l’usage de /var pour des données.

Pour /tmp je l’avais fait suffisamment grand, car à l’époque owncloud le remplissait allègrement lors de la copie de gros fichiers ( ce n’est peut être plus d’actualité).

Un max pour /home.

Surtout garder de l’espace disponible dans le vg, pour permettre un agrandissement à chaud en cas de soucis de place sur un file-system, ou l’eventuelle creation d’un nouveau.

Nino

Merci pour ta réponse.
J’ai finalement alloué 50Go pour /var, 10Go pout /tmp et le reste pour /home. Je verrai à l’usage…
Actuellement j’ai un disque de 250Go (récup) que je vais probablement remplacer à terme par un RAID1 de 1To, je pourrai réajuster à ce moment là.