samedi 22 juillet 2017

Comparaison vitesse de transfert en écriture vs système de fichier sur clé USB

Quel système de fichier utiliser sur les supports USB d'un Raspberry Pi (1) pour améliorer le taux de transfert par Samba ? 

Je fais quelques tests sans prétention avec la configuration "de base" sur le Pi 1 B+

Configuration:

Raspberry Pi 1 B+


Kernel Linux 4.9.37+
Processor armv6l
CPU Frequency 700MHz
Load Average 1.59 1.48 0.99
CPU Temperature 44.4℃
Uptime 00:26 (hh:mm)

Memory: 482M
Used 183M
38%
Free 299M
62%
Buffered 27M
6%
Cached 100M
21%

Swap: 0B
Used 0B
0%
Free 0B
0%


Disk Usage
/ (ext4)

Total Size 2G

Used 1G 83%

Available 318M 17%

/boot (vfat)

Total Size 61M

Used 23M 38%

Available 39M 62%

/media/16GO (fuseblk)

Total Size 15G

Used 255M 2%

Available 15G 98%



smb.conf :

 [global]
    server string = SMB Server
    security = USER
    map to guest = Bad User
    guest account = root
    log level = 0
    log file = /var/log/samba.log
    max log size = 100
    syslog = 0
    load printers = No
    printcap name = /dev/null
    disable spoolss = Yes
    preferred master = No
    local master = No
    domain master = No
    dns proxy = No
    create mask = 0775
    directory mask = 0775
    printing = bsd
    socket options = IPTOS_LOWDELAY TCP_NODELAY SO_KEEPALIVE SO_RCVBUF=65535 SO_SNDBUF=65535
    write cache size = 2097152
    use sendfile = yes
    getwd cache = yes
    min receivefile size = 16384



fstab:
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
# Preserver la carte SD:
tmpfs /tmp tmpfs defaults,noatime,nosuid,size=10m 0 0
tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=10m 0 0
tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=10m 0 0


Pas d'autre deamon lancé sur le Raspberry

Clé USB

Clé USB 16 Go Verbatim (modèle bas de gamme avec un taux de transfert sur PC de 17 Mo/s)


Fichiers transférés:

Transfert d'un dossier de 828 Mo contenant 5 fichiers de tailles comprises en 80 et 230 Mo.
Un fichier a un nom contenant des caractères chinois.

Les essais:

Il faudrait parler des tailles d'unité d'allocation, ici j'ai pris les tailles par défaut, je pense que ce n'est pas le meilleurs choix...

 EXfat

Maximum à 11Mo/s
le début de transfert utilise surement le cache RAM et culmine à 11Mo/s (max théorique de l'ethernet à 100 Mb/s)
Vitesse moyenne environ 6.5 Mo/s






VFAT 32

Maximum à 5.2 Mo/s
Fonctionnement erratique : blocage, plantage avec des nom de fichiers en chinois, temps de transfert total très important (plus de 7 minutes)




NTFS

Maximum à 360 Ko/s
Vitesse moyenne environ  355Ko/s
Vitesse stable mais ridicule. Temps de transfert total annoncé très important (plus de 40 minutes)


Je n'ai pas encore compris le PB dans ce cas, j'aurais du obtenir quelque chose ressemblant à l'essai avec VFAT mais sans erreur.


Conclusion à chaud :


UTILISER LE EXFAT SUR VOS SUPPORT USB !

PS : Un petit bémol cependant, en cas de problème sur le support, fsck ne fonctionne pas complètement, il trouvera les erreurs mais ne saura pas réparer l'exfat...

PS 2 : Il faut avoir installé exfat sur le Pi :
$ sudo apt-get install exfat-fuse exfat-utils
et monter le disque :
$ sudo mkdir /media/exfat
$ sudo mount -t exfat /dev/sdc1 /media/exfat
sdc1 doit être remplacer par le bon device, faites 
$ sudo fdisk -l 
pour le connaitre...





jeudi 20 juillet 2017

Réduire les accès à la carte SD et donc la préserver

Les cartes SD, quelques soit leurs performances ou leurs technologies, ne sont pas éternelles.
Il est possible de les préserver en limitant les accès en écriture au maximum.

Une première chose à faire pour cela est de passer les logs en RAM :


sudo nano /etc/fstab

# les fichiers de log et tempo passent en RAM
tmpfs /tmp tmpfs defaults,noatime,mode=1777,size=10m 0 0
tmpfs /var/spool tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777,size=10m 0 0
tmpfs /var/log tmpfs defaults,noatime,mode=0755,size=10m 0 0

Ensuite il faut vérifier et éventuellement modifier les chemins utilisés par les applications pour leurs log:

Samba : /etc/samba/smb.conf
mpd : /etc/mpd.conf
nginx : /etc/nginx/nginx.conf et les autres fichiers par exemple /etc/nginx/sites_enabled/default etc...

Re-créer les dossiers dans var à chaque redémarrage


Créer un script avec nano appelé create_var_folders

cd ~
nano create_var_folders.sh

Ajouter ceci dedans :

#!/bin/bash
# Script to create required directories in tempfs /var (that are not otherwise created)
# Thanks to http://blog.philippklaus.de/2011/02/ssd-optimizations-on-linux/ for the list below :-)

for dir in news ntpstats samba cron anacron nginx dlna; do
 if [ ! -d /var/log/$dir ] ; then
 mkdir /var/log/$dir
fi
done
for dir in cups-pdf anacron; do
if [ ! -d /var/spool/$dir ] ; then
mkdir /var/spool/$dir
fi
done 



Modifier éventuellement la ligne "for dir in .... ; do" selon vos besoin et ajouter des lignes pour relancer certains services comme anacron:

service anacron restart


Rendre le script exécutable :

sudo chmod 755 create_var_folders.sh

Déplacer le script dans un dossier fait pour /usr/local/bin par exemple :

sudo mv create_var_folders.sh /usr/local/bin

Modifier rc.local comme suit:

sudo nano /etc/rc.local

Ajouter la ligne suivante juste avant la ligne "exit 0" :

/usr/local/bin/create_var_folders.sh

Redémarrer et vérifier que le dossier /var/log et /var/spool contiennent bien les dossiers du script

ls -carl /var/log

ls -carl /var/spool

dimanche 2 juillet 2017

Dont forget to update your Raspberry periodicaly....

It's easy and can increase performances and functionalities !

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install rpi-update
$ sudo apt-get clean
$ sudo rpi-update
$ sudo reboot

You could also remove old kernel modules:
$ sudo ls /lib/modules

4.1.19+ 4.1.19-v7+ 4.9.35+  4.9.35-v7+

$ sudo rm -rf /lib/modules.bak
$ sudo rm -rf /lib/modules/4.1.19+
$ sudo rm -rf /lib/modules/4.1.19-v7+


To remove automaticaly old kernel modules :
$ sudo PRUNE_MODULES=1 rpi-update


More informations about kernel releases history:

https://github.com/raspberrypi/firmware/commits/master

And search a modification concerning a specific part as ALSA:
https://github.com/search/advanced?q=alsa