Samba sous Debian 10 = souci de performance suite mise à jour de ma Debian 8

Tags: #<Tag:0x00007f1edf821928>

Bonjour à tous,

Suite à la mise à jour de mon serveur Samba sous Debian 8 en Debian 10 (maj des sources + apt-get update/upgrade/dist-upgrade) j’ai des soucis de performance pour lister les dossiers/temps d’accès :

J’ai la configuration suivante :

USER ----------> FIREWALL ---------> SAMBA 4.9.5 (debian 10) ---- (autofs) —> Machine Windows

Sur la machine Samba j’ai des montages vers des machines Windows (SMB) et un SAN en NFS
Ma machine Samba me sert à centraliser les accès et les droits d’accès

« Hier » (sous Debian 8) les accès pour mes utilisateurs pour liste le contenu d’un dossier avec plus de 10 000 fichiers étaient très rapide.
Depuis ma mise à jour en Debian 10 mes utilisateurs se retrouvent à attendre parfois jusqu’à 30 secondes.

Voici mon smb.conf (suite à la montée de version j’ai du faire des petites MAJ en raison de paramètres qui ont évolués) :

[global]
	pam password change = yes
	dns proxy = no
        client min protocol = NT1
	client max protocol = SMB3_11
	passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
	follow symlinks = yes
	map to guest = bad user
	log file = /var/log/samba/log.%m
	getwd cache = yes
        logging = syslog@2
	encrypt passwords = true
	usershare allow guests = yes
	max log size = 1000
	passwd program = /usr/bin/passwd %u
	panic action = /usr/share/samba/panic-action %d
	security = user
	wide links = no
	server string = %h server
	unix extensions = no
        restrict anonymous = 2
	local master = no
        os level = 10

	obey pam restrictions = yes
	passdb backend = tdbsam
        invalid users = root

[windows-serveur]
        case sensitive = Yes
        default case = lower
        preserve case = yes
        short preserve case = yes

	path = /mnt/divers/windows-serveurs
	comment = Données Windows
        force group = user
        force user = user
        valid users = @group
        write list = @group
        max connections = 100
        vfs objects = full_audit
        full_audit:success = mkdir rmdir read pread write pwrite rename unlink
        full_audit:prefix = %T|%U|%u|%I|%m|%P|%S
        full_audit:failure = connect
        full_audit:facility = local5
        full_audit:priority = notice

…etc (j’utilise toujours les mêmes paramètres pour les autres partages)

Coté serveur Samba lister un dossier génère grand max 8% de CPU de consommé

Je vois pas par où commencer pour identifier mon souci

Merci d’avance pour vos pistes, votre aide

Cordialement,
Guedz

Il y a vraiment un problème.

Pour chaque fichier, il faut retrouver l’utilisateur et le groupe associé. Le système de fichiers contient dans le cas NAS/NFS des numéros uid et gid, par exemple le numéro 1019 est attribué à l’utilisateur albert si la commande

getent passwd 1019

retourne une ligne qui commence par albert:1019:...

Comment samba peut savoir à qui il a à faire ?

on est revenu vraiment au siècle dernier, où on se faisait confiance

je ne connaît pas ces paramètres (je n’ai fait qu’un Samba3 qui s’intègre dans un domaine active directory)

C’est semble-t-il un environnement à la « windows fror workgroup » aks windows 3.11. Cela ne nous rajeunit pas. Même Linus a sorti il y a bien longtemps une version « linux for workgroup (3.11) »
En résumé
Lorsqu’un utilisateur Windows s’identifie et se connecte donc au réseau local, quel est le système Windows qui lui donne le feu vert en vérifiant son identifiant et son mot de passe ? Est-ce vraiment un réseau de type windows for workgroup ?
Dans la configuration de samba, je ne vois pas de référence à aucun contrôleur de domaine (à la winbind ou Active Directory). (le nom Microsoft d’un serveur winbind m’échappe, mais il faut bien qu’il y ait une machine qui fasse la police dans le réseau local et fasse la correspondance entre les noms netbios qui circulent et les machines, utilisateurs et groupes )
Avez-vous installé et configuré winbind et/ou des paquets comme libpam-winbind libnss-winbind ?
Connectez-vous sur le serveur samba et tentez des commandes comme

getent hosts nom_poste
getent  passwd  user

et dites-nous en plus sur la gestion du réseau dans l’environnement windows.

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« L’arbre tombe toujours du côté où il penche. »
Proverbe français

« Un ordinateur c’est comme un frigo : on le branche et ça marche. »
Laurent Serano Directeur informatique, réunion Délégués du Personnel 2010

Bonjour et merci pour votre réponse :

Il y a 4 machines sous Windows et plus de 30 serveurs sous linux.
Les 4 machines sous Windows font tourner des vieilles applications que l’on peut pas migrer…
et ces 4 machines Windows ne sont pas intégré à un domaine… vive les années 80 et le workgroup…

Cordialement,
Guedz

Ah bon ? Et les administrateurs ils se tournent les pouces ?

Et les utilisateurs ils ont quoi ? Ils s’identifient comment ? Ils sont combien ?
Parmi les 30+ serveurs sous Linux, il n’y en a pas un qui fisse service d’annuaire ? ( LDAP ) ou qui fisse Cerbère ( kerberos ) ?
En supposant un minimum de cohérence dans l’architecture réseau, (en particulier qu’il existe un compte réseau valable sur les machines Linux) pourriez-vous vérifier que les utilisateurs sont bien (rapidement) identifiés sur les différents serveurs (en particulier le serveur Samba) :

for u in user1 user2 ....
do
   ssh serveurSamba getent passwd $u
   ssh serveur2 getent passwd $u
done

Vous pouvez aussi imbriquer une boucle sur les serveurs, ajouter des getent hosts Machine, … )
Je ne pose pas la question des sauvegardes ou de la supervision :laughing:

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

Avoid the Gates of Hell. Use Linux
(Unknown source)

As usual, this being a 1.3.x release, I haven’t even compiled this
kernel yet. So if it works, you should be doubly impressed.
– Linus Torvalds, announcing kernel 1.3.3

Bonjour,

je vois pas où vous voulez en venir dans le sens où je constate pas de souci de droit et que mon souci est après MAJ debian 8 en debian 10.

Cordialement,
Guedz

J’espère que la mise à jour n’a pas été faite directement de la version 8 à la 10…
Pour faire court, ta configuration est peu claire et semble utiliser des directives inutiles ou obsolètes.
Ne penses-tu pas que les directives « full_audit » risquent de plomber les performances ?

Bonjour,

effectivement j’ai réalisé la mise à jour Debian 8 vers Debian 10 en direct et suis conscient (vu que j’ai du adapter mon smb.conf mais pas tant que çà au final) de la notion de directive inutile ou obsolète :

testparm (retourne aucune erreur et permet d’identifier les directives inutiles car = valeur par défaut) :

[global]
client max protocol = SMB3
client min protocol = NT1
dns proxy = No
log file = /var/log/samba/log.%m
logging = syslog@2
map to guest = Bad User
max log size = 1000
obey pam restrictions = Yes
pam password change = Yes
panic action = /usr/share/samba/panic-action %d
passwd chat = Enter\snew\s\spassword:* %n\n Retype\snew\s\spassword:* %n\n password\supdated\ssuccessfully .
passwd program = /usr/bin/passwd %u
security = USER
server string = %h server
socket options = TCP_NODELAY IPTOS_LOWDELAY
unix extensions = No
usershare allow guests = Yes
idmap config * : backend = tdb
invalid users = root
strict locking = No

etc…

Note : j’ai fait sauter cette ligne : restrict anonymous = 2 (qui était juste un test)

Concernant les full audit : effectivement ceci a un impact sur les performances « mais » avant la mise à jour le périmètre d’audit était le même (Complément d’information : pour exemple depuis minuit ce jour, j’ai que 3887 lignes inscrites dans syslog pour le full audit => je ne pense pas que celà soit pénalisant )

Sous Debian 8 un « time find » d’un dossier depuis un poste client ajouté simplement 2 à 3 secondes grand max par rapport à l’exécution de la commande depuis le serveur Debian 8

Sous Debian 10 un « time find » d’un dossier depuis un poste client ajoute 20 à 30 secondes par rapport à l’exécution de la commande depuis le serveur Debian 10

C’est là où je n’arrive pas à comprendre / expliquer ce résultat avec un smb.conf quasiment identique :

Avant : syslog = 0
Après : logging = syslog@2 (à 2 actuellement pour avoir plus de log mais j’ai pas plus d’info)

Avant : socket options = TCP_NODELAY IPTOS_LOWDELAY
Après : suppression de la ligne car valeur par défaut et recommandé sous Samba 4.x de laisser Samba gérer

Voici les seules modifications normalement apportées

Merci d’avance pour votre aide

Cordialement,
Guedz

Il faudrait tester avec iperf la vitesse de transfert depuis les deux serveurs afin d’éliminer un problème réseau.

Les directives client min/max protocol ne sont utiles que si tu as des clients qui ne gèrent que SMB1/NT1

Bonjour,

Concernant la ligne :
client min protocol = NT1

Je fais parti des petits veinards qui ont encore des Windows 2003 non R2 car l’application qui tourne en 16bits peut pas être migré sur du 64 bits :slight_smile:

Pour le iperf j’essaie çà asap

Cordialement,
Guedz

Bonjour,

voici un rapide test iperf :

Sur le serveur samba :

iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  4] local 192.168.xxx port 5001 connected with 192.168.xxx port 35890
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  1.10 GBytes   941 Mbits/sec
[  4] local 192.168.xxx port 5001 connected with 192.168.xxx port 35906
[  4]  0.0-10.0 sec  1.10 GBytes   940 Mbits/sec
[  4] local 192.168.xxx port 5001 connected with 192.168.xxx port 35916
[  4]  0.0-10.0 sec  1.10 GBytes   941 Mbits/sec

Sur mon poste utilisateur :

iperf -c 192.168.xxx
------------------------------------------------------------
Client connecting to 192.168.xxx, TCP port 5001
TCP window size:  332 KByte (default)
------------------------------------------------------------
[  3] local 192.168.xxx port 35890 connected with 192.168.xxx port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.10 GBytes   942 Mbits/sec

etc…

Cordialement,
Guedz

Un getent hosts bidule_ou_IP c’est une interrogation sur la résolution de noms des machines du réseau. Vous avez un problème de performances d’une application réseau. Et je vois dns proxy = no dans smb.conf
Nous ne savons pas si dans le monde antique de Windows for workgroup vous avez installé un serveur « Voisinage réseau » (master browser ou je ne sais plus comment cela s’appelait), et s’il y a « winbind » sur les machines Linux. En tout cas, sur un réseau physique 1Gbit (résultats bruts iperf) le serveur samba est à la ramasse.
Il y a aussi une partie NFS pour un SAN. Qu’en est-il des performances avec le SAN ?

Il se peut, que vous soyez victime d’une régression de samba entre les versions Debian 8 et 10 dans le support d’un protocole obsolète depuis longtemps.

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

En 2009 nous avons réduit notre endettement qui n’est plus que de 1,5 fois le cash flow
Franck Piedelièvre le 29 janvier 2010. Les voeux du Président.

Dieu règne au ciel, et l’argent sur la terre.
Proverbe allemand

Bonjour,

Sur la machine samba :
getent hosts IP ou hostname = pas de souci constaté
getent passwd xxxx = pas de souci constaté

Sur un poste user :
getent hosts IP ou hostname = pas de souci constaté
getent passwd xxxx = ne fonctionne que pour le compte user

Concernant les performances NFS :

USER <-----> SAMBA <---- (nfs) ----> SAN

samba/san : iozone -R -l 1 -u 1 -r 4k -s 100m

« Output is in kBytes/sec »

" Initial write " 1573352.88
" Rewrite " 2259144.00
" Read " 2963051.50
" Re-read " 2761081.25
" Reverse Read " 1802178.88
" Stride read " 2005168.62
" Random read " 1956252.00
" Mixed workload " 1951106.62
" Random write " 1629951.25
" Pwrite " 1830989.62
" Pread " 2980550.25
" Fwrite " 1766430.88
" Fread " 2744794.75

user (via samba) / san :

« Output is in kBytes/sec »
" Initial write " 2328756.25
" Rewrite " 1759029.88
" Read " 106960.60
" Re-read " 113208.23
" Reverse Read " 4210.92
" Stride read " 20247.18
" Random read " 8051.32
" Mixed workload " 7797.21
" Random write " 1310888.75
" Pwrite " 1730315.00
" Pread " 107505.67
" Fwrite " 1844982.12
" Fread " 107389.62

J’ai testé également mon serveur samba en modifiant :

avant : client min protocol = NT1
apres : client min protocol = SMB2

et supprimer tout ce qui est en lien avec des machines ne gérant pas au minimum SMB2 et je constate aucune amélioration

Merci pour votre aide

Cordialement,
Guedz

Bonjour,

@Bruno1 : je viens d’explorer la piste d’une régression au niveau des full_audit et d’après les premiers résultats (même si je suis conscient que celà prend des ressources) après désactivation de tous les « full_audit » j’obtiens des performances identiques

Rappel de l’utilisation de mon samba :

USER <----> SAMBA <---- (nfs) ------> Volume du SAN
USER <----->SAMBA < -------- (smb) -------> partage de poste Windows

Lister un grand volume de fichier/dossier :
Sous Debian 8 avec full_audit actif :
La différence entre SAMBA/SAN et USER/SAMBA/SAN était de quelques secondes

Sous Debian 10 :

     avec full_audit :
     La différence entre SAMBA/SAN et USER/SAMBA/SAN était de quelques dizaines de secondes (minimum 20 secondes dans les meilleurs cas identifiés)

     sans full_audit :
     identique avec full_audit

Donc le souci ne semble pas venir de là…

Cordialement,
Guedz

Voilà qui est un peu plus clair. Ajoutez éventuellement time devant les commandes, pour avoir une idée des délais éventuels (toute valeur > 1ms est inacceptable sur un réseau local Gbits .
Il semblerait que les postes utilisateurs soient des Linux. Et donc

Chapeau à l’architecte réseau :laughing: Je comprends aisément que le paramétrage d’une solution SAN (quel modèle, quel OS ?) ne soit pas très aisé ni enthousiasmant, mais franchement pourquoi utiliser Samba pour forcer un seul utilisateur du côté des fichiers (du côté du SAN ou des applicatifs windows ) ?
Dès le départ, Unix est multi-utilisateur. Sur chaque poste Linux, un utilisateur connecté a une identification numérique uid, il appartient à un groupe gid et peut faire parie d’autres groupes. En utilisant Samba comme vous le faites, vous cassez ce schéma simple et efficace (si géré globalement sur le réseau) en décidant arbitrairement que du côté des systèmes de fichiers tout le monde s’appelle ‹ user › et fait partie du groupe ‹ group ›. Pourquoi ne pas avoir utilisé le directement le serveur NFS du SAN ou installé un serveur NFS sur une machine intermédiaire ?
Une mauvaise langue dirait « difficile de distinguer les proportions de paresse ou d’ignorance chez l’architecte réseau », mais c’est une mauvaise langue et cela ne fait pas avancer le scmilblick.
Vous allez me dire : c’est un simple regroupement d’utilisateurs pour chacun des partages, et cela peut se comprendre, c’était difficile de le deviner à aprtir de votre premier message.
Maintenant que le problème est un tout petit peu plus clair, vous comprenez qu’il est grand temps de définir une architecture réseau autrement que par de vagues schémas. Pour chaque entité poste client, serveur, utilisateur, groupe il faut définir précisément les attributs caractéristiques (nom, IP) ou (nom, uid, gid, groups) par exemple, quels sont les serveurs qui gèrent tout cela (serveur DNS, DHCP, LDAP, NIS, AD, …).
Bref, il y a du boulot.
Commencez d’abord par répertorier les contenus des fichiers suivants pour les serveurs (SAN, Samba, serveur DNS, DHCP, …)
/etc/nsswitch.conf /etc/resolv.conf
et faites les commandes getent non pas avec les noms mais avec les numéros ( IP, uid, gid ). La boucle for que je vous avais suggéré à la fin du message 4 est toujours d’actualité. Cela vous permet de voir comment cela fonctionne et cela suppose que vous avez au moins un compte sur tous les serveurs du réseau pour l’accès ssh.

Pour gérer les différentes entités du réseau, depuis Linux, il y a pas mal de solutions. Par exemple, NIS est particulièrement simple (simpliste diront les détracteurs) mais pourrait convenir pour un réseau de taille modeste.
Pour créer un nouvel utilisateur, il suffit de le faire sur le serveur NIS principal et de lancer une commande make dans un certain répertoire pour que l’information soit répliquée sur les machines du domaine NIS.
Je vous conseille aussi d’avoir un groupe unique (users) pour tous les comptes utilisateurs, comme cela est fait chez Süse Linux (SLES) au contraire de Debian où par défaut, un groupe est créé pour chaque utilisateur.
Pour les postes Windows, si vous utilisez des versions « Pro » de ce système, le poste client est automatiquement configuré pour être intégré à un domaine Active Directory, et dans ce cas il serait plus simple d’intéger les machines Linux dans AD (client Kerberos, + samba + winbind ).
Comme il semble que les systèmes Windows sont minoritaires, une solution NIS me semble plus adaptée (mais rien ne vous empêche d’envisager un annuaire LDAP ou autre). De plus NIS et NFS sont historiquement proches.
Pour un poste Linux donné, l’utilisateur habituel peut avoir deux comptes : un compte local et un compte réseau pour accéder aux fichiers qui sont sur le réseau. Mais, en pratique c’est le compte réseau qui est utilisé, au fil du temps. Le compte local peut servir pour du dépannage ou l’installation de paquets spécifiques au poste.

Bon courage.

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« L’arbre tombe toujours du côté où il penche. »
Proverbe français

« Un ordinateur c’est comme un frigo : on le branche et ça marche. »
Laurent Serano Directeur informatique, réunion Délégués du Personnel 2010

Bonjour,

merci pour cette analyse mais si on devait aller dans ce sens il faudrait que vous sachiez dans quel domaine j’applique mon architecture et mon souci reste toujours pourquoi j’ai cette dégradation très importante des performances entre Debian 8 et Debian 10.

Sur mon infra j’ai juste besoin de mon serveur DNS, DHCP et le reste c’est du stockage ou du réseau.
Désolé mais je vais pas déployer un LDAP à maintenir ou d’autres solutions à maintenir si j’en ai pas besoin.
Historiquement nous avons eu ce genre de serveur…

Pour répondre à votre question sur les time :

time getent hosts unhostname

real 0m0,003s
user 0m0,002s
sys 0m0,000s

time getent hosts IP

real 0m0,002s
user 0m0,000s
sys 0m0,002s

Désolé mais faut rester dans le contexte, j’ai pas besoin d’un switch d’un routeur, d’une connexion Internet, d’un serveur LDAP et d’un i7 si je veux juste jouer au démineur.

Ma base d’authentification est sur le serveur Samba car c’est le seul serveur qui a besoin d’une authentification de ce type

Une idée de piste par rapport à mon souci ?

Cordialement,
Guedz

Associé aux fichiers et répertoires, il y a bien l’information à qui appartient ce fourbi. Faut quand même savoir si ce sont les fichiers de Martine la secrétaire du patron, de Thomas de la compta ou des commerciaux.
Il semblerait que pour chaque partage vous avez défini un utilisateur et un groupe et que cela corresponde à des informations gérées par le NAS. Dans ce cas, c’est l’interface logicielle entre le serveur Samba et le NAS qui pose des problèmes de performance.

Trouver le modèle de NAS, son OS embarqué, lire la documentation et depuis un poste Linux faire un montage automatique d’une arborescence typique exportée par ledit NAS. Autrement dit (sur le poste client)
créer un point de montage,
créer un utilisateur de même nom que sur le NAS
faire chown sur le point de montage
créer les fichiers /etc/auto.* qui vont bien
lancer et tester le montage NFS
Cela revient à réaliser sur un autre poste ce que vous avez fait pour la partie autofs du serveur Samba, sans la partie qui est dans smb.conf.
Le contenu des fichiers /etc/auto.* du serveur Samba, ainsi que /etc/exports du NAS (*) serait très intéressant ceci dit, à moins qu’il ne soit couvert par le secret Défense. (+ ls -l sur les points de montage )
L’avantage d’un montage NFS direct est que vous disposez de commande comme nfsstat pour investiguer.
Si les performances sont correctes, vous avez une solution de contournement possible (provisoire) en copiant la configuration sur les postes clients les plus impactés (ou appartenant à ceux qui ont le bras long )
Bien sûr le problème n’est que reporté, à moins qu’on découvre des choses dans la configuration.
Si les performances ne sont pas au rendez-vous sur votre poste de test, vous savez que vous avez mal paramétré l’accès au NAS, ou que le NAS est nase.

Sinon, c’est reparti à bidouiller smb.conf et sa ribambelle de paramètres, éplucher des journaux, …
De plus la sécurité apportée est très faible, pas vraiment supérieure au codage en dur des identifiants NAS sur le poste utilisateur.

Note
(*) j’ose espérer que vous avez un vrai accès ssh au NAS . S’il n’y a qu’un accès à un serveur Web intégré pour paramétrer l’appareil, comme ce qu’on trouve sur les box des FAI, vous pouvez engueuler celui qui a choisi le truc, une box appartient au FAI, le NAS appartient à l’entreprise qui l’a acheté.

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« Celui qui, parti de rien, n’est arrivé nulle part n’a de merci à dire à personne !! »
Pierre Dac