CentOS Serveur - Partage de fichiers Samba - 3eme partie - Optimisations et quelques additionnels
La troisième section de notre tuto dédié aux partages Samba.
Ici, il est question d'optimisations et de quelques cas particuliers, pour adapter vos partages aux besoins spécifiques de vos réseaux et/ou logiciels..
Si besoin, les informations de base et la gestion des utilisateurs sont décrites sur les pages précédentes dédiées à Samba Linux sous CentOS :
- Partie 1 - Installation et Configuration de base
- Partie 2 - gestion des utilisateurs et options de partage
IMPORTANT : Vous trouverez ci-après nombre de modifications permettant de meilleures performances dans des cas spécifiques et en fonction de plusieurs paramètres locaux (Type de machines, vitesse du réseau, type de fichiers, etc..). Ne greffez pas des lignes à la légère, effectuez tout d'abord des tests hors production, au plus près de vos situations réelles.
Optimisation des paramètres réseau
Les paramètres par défaut de Samba permettent un fonctionnement optimal adapté à la majorité des cas. Toutefois, en fonction de votre réseau local, de sa vitesse (100 Mb ou Gigabit), de la taille de vos fichiers et du nombre d'utilisateurs simultanés, il est possible de gagner un peu en performances en affinant les réglages.
Le gain n'est pas systématique et dépend de nombreux facteurs ! Effectuez des essais avant de passer vos réglages en production.
- L'option " socket options = TCP_NODELAY " (à ajouter dans la partie " Global " de votre smb.conf), permet souvent une augmentation significative de la vitesse de lecture.
## fichier conf samba ## exemple 3 mgroup.fr [global] workgroup = WORKGROUP server string = samba-test security = users passdb backend = tdbsam load printers = no disable spoolss = Yes socket options = TCP_NODELAY # securite reseau hosts allow = 192.168.0. #===================== Share Definitions =======================
- L'option " IPTOS_LOWDELAY ", peut-être ajoutée à " socket options = TCP_NODELAY ", mais n'est pas supportée par tous les Switchs ou Routeurs réseau.
## fichier conf samba ## exemple 3 mgroup.fr [global] workgroup = WORKGROUP server string = samba-test security = users passdb backend = tdbsam load printers = no disable spoolss = Yes socket options = TCP_NODELAY IPTOS_LOWDELAY # securite reseau hosts allow = 192.168.0. #===================== Share Definitions =======================
- Une autre solution consiste à jouer sur la taille des paquets (Send and Receive Buffers) via les options " SO_RCVBUF= " et " SO_SNDBUF= ". Sur un réseau lent, affectez des valeurs plus basses (exemple 8192). Sur un réseau Gigabit, avec des postes clients récents, essayez avec des paquets plus gros (exemple 65536). Pour info, je n'ai jamais dépassé une valeur de 131072. Notez que les valeurs sont des multiples de 1024.
## fichier conf samba ## exemple 3 mgroup.fr [global] workgroup = WORKGROUP server string = samba-test security = users passdb backend = tdbsam load printers = no disable spoolss = Yes socket options = TCP_NODELAY SO_RCVBUF=65536 SO_SNDBUF=65536 # securite reseau hosts allow = 192.168.0. #===================== Share Definitions =======================
- Il est tout à fait possible de cumuler les trois options de " socket " :
## fichier conf samba ## exemple 3 mgroup.fr [global] workgroup = WORKGROUP server string = samba-test security = users passdb backend = tdbsam load printers = no disable spoolss = Yes socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536 # securite reseau hosts allow = 192.168.0. #===================== Share Definitions =======================
- Peu usitée avec des programmes récents, l'option de désactivation "Lecture Seule" est parfois nécessaire (programmes issus du monde Unix/Linux par exemple). Par ailleurs, dans certaines situations, elle améliore sensiblement les performances réseau. Cette option se rajoute au cas par cas dans les paramètres de chaque partage via la ligne " delete readonly = yes ". Exemple ci-dessous :
#===================== Share Definitions ======================= [partage_test] path = /share/test comment = Partage test delete readonly force directory mode = 777 force create mode = 777 writeable = yes browseable = yes valid users = @sambausers write list = @sambausers delete readonly = yes
Important : Prenez le temps d'effectuer plusieurs tests avec des fichiers de tailles différentes et depuis plusieurs machines de votre réseau. A plus forte raison si vous avez un parc hétérogène (Postes sous XP/Vista/Seven mélangés à des machines plus anciennes ou Mix Stations Windows/Linux, etc..).
Optimisations via les OPLOCKS (aussi appelé verrouillage opportuniste)
Le verrouillage opportuniste (oplocks) est commandé depuis le système de fichiers Windows (par opposition à un API) par l'intermédiaire
des entrées d'enregistrement (sur le serveur et le client) dans le but d'améliorer les performances réseau lors de l'accès à
un fichier résidant sur un serveur. Il est activé par défaut dans Samba.
Si, pour la grande majorité des fichiers, ce fonctionnement est le bienvenu, il peut s'avérer source de ralentissements importants lorsqu'il s'agit de fichiers de type " base de données " attaqués simultanément par plusieurs utilisateurs.
Note Importante : Si vous exportez via Samba des dossiers montés en NFS, les modifs de type " OPLOCKS " risquent d'entrainer un impact négatif sur les performances.
- L'état "OPLOCK" d'un fichier ouvert au travers de Samba est visible depuis une simple commande " smbstatus -v ". Comme dans l'exemple ci-dessous :
Locked files: Pid Uid DenyMode Access R/W Oplock SharePath Name Time -------------------------------------------------------------------------------------------------- 9620 1011 DENY_NONE 0x100001 RDONLY NONE /share/commun . Fri Feb 15 09:52:15 2013 8079 1008 DENY_WRITE 0x2019f RDWR EXCLUSIVE+BATCH /share/commun document.doc Fri Feb 15 10:24:00 2013
- Première solution pour désactiver " OPLOCKS ", via la section " Global " de Samba, avec la ligne d'option " oplocks = False ". C'est la solution la moins conseillée ! Elle imposera à Samba de traiter tous les fichiers des partages sous le même mode.
## fichier conf samba ## exemple 3 mgroup.fr NON Recommandé [global] workgroup = WORKGROUP server string = samba-test security = users passdb backend = tdbsam load printers = no disable spoolss = Yes socket options = TCP_NODELAY SO_RCVBUF=65536 SO_SNDBUF=65536 oplocks = False # securite reseau hosts allow = 192.168.0. #===================== Share Definitions =======================
- Seconde possibilité, traiter l'option spécifiquement pour un ou plusieurs partages via l'option " level2 oplocks = ". La ligne d'option est rajoutée dans les paramètres du partage concerné, et non plus dans " Global ". Un exemple ci-dessous avec le share " partage_special ". Notez que cette option ne fonctionne pas si vous avez laissé " oplocks = False " dans " Global "
## fichier conf samba ## exemple 3 mgroup.fr oplocks level 2 [global] workgroup = WORKGROUP server string = samba-test security = users passdb backend = tdbsam load printers = no disable spoolss = Yes socket options = TCP_NODELAY SO_RCVBUF=65536 SO_SNDBUF=65536 # securite reseau hosts allow = 192.168.0. #===================== Share Definitions ======================= [partage_special] path = /share/special comment = Partage specifique sans oplocks force directory mode = 777 force create mode = 777 writeable = yes browseable = yes valid users = @sambausers write list = @sambausers level2 oplocks = False
- 3eme méthode, et à vrai dire celle que je recommande, qui consiste (toujours dans les options de chaque partage), à désactiver les " OPLOCKS " mais uniquement pour certains types de fichiers (comme les bases de données propriétaires par exemple). La ligne étant " veto oplock files = ". Exemple ci dessous pour les bases de données Access (fichiers .mdb) :
#===================== Share Definitions ======================= [partage_special] path = /share/special comment = Partage specifique sans oplocks force directory mode = 777 force create mode = 777 writeable = yes browseable = yes valid users = @sambausers write list = @sambausers veto oplock files = *.mdb
- Notez qu'il est possible d'indiquer plusieurs types de fichiers :
#===================== Share Definitions ======================= [partage_special] path = /share/special comment = Partage specifique sans oplocks force directory mode = 777 force create mode = 777 writeable = yes browseable = yes valid users = @sambausers write list = @sambausers veto oplock files = /*.xls/*.mdb/
Partage spécifique pour logiciel dédié - Principe de l'utilisateur Samba unique
A destination des logiciels utilisant une base de données commune (au Format Propriétaire la plupart du temps), il peut s'avérer plus performant de forcer, via Samba, un utilisateur unique pour le partage dédié à ladite base de données. Sous réserve que le logiciel ne soit pas incompatible avec ce fonctionnement.
Notez qu'il s'agit d'un utilisateur unique au sens translation Samba/Linux, et non un utilisateur unique dans le logiciel propriétaire.
Un exemple avec le logiciel DUCHNOC qui utilise, comme base de données partagée, le fichier " tartempion.mabase ".
- Création du partage dédié au fichier " tartempion.mabase "
# mkdir /share/duchnoc_folder # chmod 700 /share/duchnoc_folder
- On limite l'accès à ce partage (via samba) à l'utilisateur " duchnoc " créé pour la circonstance :
# useradd -s /bin/false -g sambausers duchnoc # passwd duchnoc # chown duchnoc /share/duchnoc_folder
- le partiel samba de ce partage va ressembler à :
#===================== Share Definitions ======================= [partage_special] path = /share/duchnoc_folder comment = Partage reserved duchnoc valid users = duchnoc write list = duchnoc force user = duchnoc force group = sambausers force directory mode = 700 force create mode = 700 writeable = yes browseable = yes
- Sur les postes clients Windows, on utilise la fonction "connexion d'un lecteur réseau" permanente (depuis outils dans la fenêtre du poste de travail) et on renseigne avec l'utilisateur "duchnoc" et son mot de passe associé (ligne se connecter sous un nom d'utilisateur différent). Pensez à laisser la case "se reconnecter à l'ouverture de session" cochée. Ne reste plus qu'à placer la base de données dans son nouvel emplacement réseau (via le poste de travail) et à l'indiquer au logiciel qui l'utilise.
Note : Vérifiez la compatibilité de vos logiciels avec ce mode de fonctionnement, notamment avec plusieurs utilisateurs connectés à la base de données.
Offrir une corbeille réseau à vos utilisateurs via Samba
Avec Samba, il est effectivement possible de fournir une " corbeille réseau ", ou plus explicitement un dossier dans lequel viendraient se jeter les fichiers ou dossiers effacés par les utilisateurs.
Plutôt qu'un simple résumé, voici une page dédiée à la corbeille réseau sous Samba Linux, sur mgroup.fr
Liens utiles et Sources qui ont permis la rédaction de ce tuto :
- Infos globales Samba
- Infos Samba relatives au Locking
- Extraits relatifs à OPLOCK du livre "Using samba"
- Page oplock pour Microsoft Windows
Les pages précédentes dédiées à Samba Linux sous CentOS sur Mgroup.fr :
- Partie 1 - Installation et Configuration de base
- Partie 2 - gestion des utilisateurs et options de partage
Vous pouvez commenter ou participer à l'amélioration de cet article via le topic dédié du forum.