Limiter la taille d'un répertoire

Bonjour,

Tout d’abord une petite présentation, car nouveau sur se forum. J’utilise Linux depuis bientôt 10ans (redhat au départ), principalement sous Debian (pour mes serveurs) et Ubuntu pour la maison.

À la base, je cherche à limiter la taille d’une base de donnée mysql (sur mon serveur dédié). N’y arrivant pas sous MySQL (car ce n’est tout simplement pas possible directement dans mysql), je souhaiterais alors limiter la taille des bases en limitant la taille du répertoire qui les stockent.

Certes il existe les quotas (qui fonctionnent très bien sur mes serveurs), mais cela s’appliquent à un système de fichiers et non à un répertoire (ou alors j’ai loupé quelque chose)

Comment pourrais je limiter la taille d’un répertoire ?

Merci,

Elekaj

A ma connaissance, ce n’est pas possible.
Sans les quotas, tu peux dédier un filesystem de la taille souhaitée et le monter sur ton répertoire, ou au pire (mais les performances sont dégradées) créer un filesystem dans un fichier et le monter sur le répertoire en loopback, genre:

dd if=/dev/zero of=le_fichier_de_filesystem bs=1M count=128 mkfs.ext2 le_fichier_de_filesystem mount le_fichier_de_filesystem /some/dir -o loop
si ça te satisfait, tu peux mettre le montage en automatique dans fstab comme n’importe quel autre en mettant juste une option root.

[quote=“mattotop”]A ma connaissance, ce n’est pas possible.
Sans les quotas, tu peux dédier un filesystem de la taille souhaitée et le monter sur ton répertoire, ou au pire (mais les performances sont dégradées) créer un filesystem dans un fichier et le monter sur le répertoire en loopback, genre:

dd if=/dev/zero of=le_fichier_de_filesystem bs=1M count=128 mkfs.ext2 le_fichier_de_filesystem mount le_fichier_de_filesystem /some/dir -o loop
si ça te satisfait, tu peux mettre le montage en automatique dans fstab comme n’importe quel autre en mettant juste une option root.[/quote]

Pour la première solution, cela permet simplement de limiter la taille de l’ensemble des bases. Mais cela ne permet pas de limiter la base ‘toto’ à 50Mo par ex et la base ‘tata’ à 100Mo.

Il faut dans ce cas adopté la seconde solution. Moi j’opterais pour une taille de fichier de disons 100Mo, puis de limiter la taille du filesystem par les quotas adhoc sur l’utilisateur mysql (de façon à pouvoir augmenter son quota facilement).
Pour moi cette solution est faisable, mais reste le problème des performances (surtout pour une forte utilisation) et dans une moindre mesure celui de l’espace disque (une base de 1Mo en demandera 100 sur le HD)

Les deux solutions sont fondamentalement identiques: si tu arrives à saturation du filesystem dans un fichier, tu seras obligé pareil de migrer tes bases sur un autre fs/fichier plus grand.

Par contre, il y a la possibilité de faire ce type de filesystem dans un fichier “à trous” qui ne prend sur le disque que la place réellement occupée par les données.
Je ne sais pas en créer avec les outils standard unix (c’est possible, mais je ne sais pas faire) par contre, il y a l’outil qemu-img qui est dans le paquet qemu qui fait ce genre de filesystem.
Ce que tu peux faire alors, c’est de créer un fichier “à trous” avec qemu-img de la taille la plus grande possible (je te rappelle qu’il ne prendra sur le disque que la taille réellement occupée) de le formatter, le monter, et lui appliquer des quotas ajustés, que tu pourras ensuite étendre jusqu’à la taille potentielle de ton filesystem/fichier.
Pour les perfs, ça dépend de combien de clients et du types de requètes que tu fais (en dessous de quelques centaines, et de requètes limitées à quelques megas en taille de réponse AMA c’est insensible), mais je ne peux pas te dire du tout ce que ça peut donner. J’ai utilisé ce genre de trucs, mais pas avec suffisament de charge pour avoir un retour à te donner.

le terme anglais pour fichier à trou est sparse file, et je viens de trouver sur wikipedia comment les créer avec dd:
en.wikipedia.org/wiki/Sparse_file

Ou, une autre solution, créer un groupe utilisant les bases, et fixer les quotas sur le groupe.
Reste à savoir si la configuration de ton mysql te permet de passer les users dans un groupe.

Ben oui, suis je bête: mysql tourne sous l’id mysql quel que soit l’user qui consulte le démon, et ses bases appartiennent à mysql.mysql !
Qu’est ce que je suis allé chercher la complication: il suffit de donner des quotas à l’user mysql…

cepcasa, je te hait de me rappeler ma bêtise.

:slightly_smiling:
par contre je ne sais pas s’il n’y aura pas d’effets de bord si l’on applique les quotas directement sur l’user mysql. Je ne sais pas.

Merci pour toutes ces infos.

Par contre, lorsque l’on arrive au quota, mysql ne pouvant plus ecrire, il y a corruption des données :confused: à plus forte raison pour les tables innoDB (qui partagent leur index entre les tables je crois).

Finalement, je regarde du coté de mysql_quota
http://lrem.net/pages/view/mysql_quota
http://projects.marsching.org/mysql_quota/

Par contre je retiens le sparse file sous Linux … j’avais entendu dire mais ne savais pas faire non plus.