To content | To menu | To search


Home sweet Home

 

Sous Debian, un partitionnement très utilisé (et un des choix par défaut de l'installeur) est de choisir des valeurs arbitraires pour certaines partitions, et de garder tout le reste de l'espace disque pour le /home. C'est très pratique pour une station de travail. Sur la Tourmentine j'utilise FreeBSD mais j'ai gardé le même principe, toutes les "données" sont dans /home, ça permet de ne pas se poser de question sur quoi surveiller et quoi sauvegarder.

L'autre jour on me contacte pour un restore sur un MariaDB qui ne fonctionne plus, et pour cause, le disque était plein (merci innodb_file_per_table qui est à Off par défaut, ce qui provoque la création d'un fichier ibdata1 dont on ne peut jamais réduire la taille...)

Le / faisait 20 Go, dont 80% pris par les bases, et il y avait un /home de 1 To (c'est une Debian...). j'ai donc tout déplacé dans /home, et ajusté le my.cnf en conséquence.

Sauf que MariaDB refusait catégoriquement de redémarrer, avec le fort peu diplomatique message suivant dans le status du service:

ExecStart=/usr/sbin/mysqld --skip-grant-tables (code=exited, status=1/FAILURE)

Le plus étrange étant qu'en lançant manuellement avec "mysqld", MariaDB fonctionnait parfaitement. Et évidemment, tout se passait bien dans les logs.

Le truc qui a fini par me mettre la puce à l'oreille est un des messages dans le status de systemd mon amour:

[Warning] Can't create test file /home/mysql/hostname.lower-test

Un Warning, normalement, c'est pas bloquant... sauf là.

En googlant le truc je fini par apprendre que par défaut le service systemd de MariaDB interdit l'accès aux données situées entre autres...dans /home.

Clap clap clap.

La solution consiste donc à copier le fichier /lib/systemd/system/mariadb.service dans /etc/systemd/system/ (pour qu'il ne soit pas écrasé par les éventuelles mises à jour suivantes), puis l'éditer pour mettre la variable en question à false:

# Prevent accessing /home, /root and /run/user
ProtectHome=false

Ne pas oublier le "systemctl daemon-reload" qui va bien ainsi qu'un redémarrage du service pour rendre le changement effectif.

Add a comment

Comments can be formatted using a simple wiki syntax.

This post's comments feed