Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Snelste filesharing  (gelezen 2893 keer)

Offline Bloom

  • Lid
Snelste filesharing
« Gepost op: 2011/12/13, 12:39:23 »
Hoi,

Ik heb me eens geamuseerd met benchmarks om te kijken welk protocol het snelst is voor een NAS voor thuisgebruik.

De NAS in kwestie is een zelfbouw op basis van een Debian server (zonder GUI) en een 6x 2 TB RAID-5 in JFS geformatteerd en in zijn geheel gedeeld voor Windows clients (SMB), voor NFS (v4/3/2) en voor SSHFS.
Alleen die laatste ondersteunt standaard encryptie en tunneling over ssh, wat dus voor een ingebouwde vertraging zorgt maar wel veel veliger is. Bovendien kan sshfs ook veilig over het internet heen gebruikt worden. Daar kan Windows nog een puntje aan zuigen!
Als client heb ik getest met een Ubuntu 10.04.3 'Lucid Lynx' LTS en als benchmarksofware heb ik bonnie++ gebruikt.

De resultaten:
1. Het traagst: SMB tijdens het schrijven, sshfs tijdens het lezen
2. Middelmoot: SMB tijdens het lezen, sshfs tijdens het schrijven
3. Het snelst (met voorsprong!): NFS!

Conclusie: je gebruikt best NFS om met een Linux of Mac desktop te werken met een NAS. Windows kan zelf alleen SMB gebruiken. SSHFS is voornamelijk interessant als veilige oplossing om over het internet heen met een fileserver te kunnen werken alsof hij een lokale NAS was.

Als je NFS v4 kunt gebruiken, doe dat dan. Alle moderne Linux'en ondersteunen dat. Anders NFS v3 en pas als laatste NFS v2.

1. Server of NAS:

Voor het geval je die nog zelf moet installeren, heb je het pakket nfs-kernel-server nodig. Mocht die nog niet geïnstalleerd zijn dan kun je dat (bij Debian-achtigen waaronder ook Ubuntu) doen met behulp van:
sudo aptitude -y install nfs-kernel-server(Als je hier een foutmelding krijgt dat aptitude niet gevonden kan worden, gebruik dan apt-get overal waar ik hier aptitude schrijf. Je kunt aptitude ook installeren op systemen waar dat niet aanwezig is via sudo apt-get install aptitude.
Daarna neem je alle shares op in een tekstbestand /etc/exports. Bijvoorbeeld:
/data/pub 10.0.0.0/24(rw,async,no_subtree_check,no_root_squash)Hierbij is /data/pub wat ik over het netwerk wil delen. Dat mag aan heel mijn interne netwerk (10.0.0.0-adressen, de /24 wil zeggen een netmasker van 255.255.255.0) en elke netwerkgebruiker die toegang wil moet als user aangemaakt zijn op de server of NAS, dan heb je geen rechtenproblemen.
De opties uitgelegd:
rw: dit volume is voor lezen en schrijven
async: lieg clients voor dat I/O-opdrachten succesvol afgewerkt zijn zodra de opdracht ontvangen wordt, ook al is die dan nog niet uitgevoerd. Dit mag je alleen doen als je een ZEER BETROUWBARE server of NAS hebt. Dat wil zeggen een stabiel OS en voorzien van een noodvoeding (UPS). Zoniet zou data gecorrumpeerd kunnen raken als de netwerkverbinding verbroken wordt terwijl I/O-opdrachten nog niet uitgevoerd zijn. Bij een minder betrouwbare server gebruik je best sync in plaats van async. Bij sync wordt gewacht tot een einde van een I/O-opdracht en het echte resultaat dan meegedeeld aan de client. Die moet dan dus daarop wachten.
no_subtree_check: voor elk bestand wordt de hele subtree waarin zich dat bevindt iedere keer weer gecontroleerd, wat nodeloos tijdverkwistend is en daarom kun je deze optie weergeven. Dit doe je beter niet bij een snel veranderende NAS met veel gebruikers.
no_root_squash: omdat de root op een clientpc niet noodzakelijk dezelfde is als die op de server, wordt alle toegang voor de gebruiker root normaal door de server omgezet naar een anonieme gebruiker. Daardoor werken rootopdrachten niet zoals je verwacht als je wél de root bent van zowel de clientpc als de server. Dan kun je deze opdracht opgeven om de root behoorlijk te laten werken.

2. Clientpc (alleen Linux of Unix, Windows ondersteunt dit niet):

Aan de clientkant heb je het pakket nfs-common nodig. Normaal zou je verwachten dat elke Linux dit standaard al aan boord heeft, maar mijn Ubuntu 10.04.3 LTS had het dus niet geïnstalleerd. Dan doe je dit:
sudo aptitude -y install nfs-commonNu kun je de netwerkshare toevoegen in /etc/fstab:
10.0.0.251:/data/pub /media/MijnNAS nfs4 rw,hard,intr,async,actimeo=0,nodev,nosuid 0 0waarbij 10.0.0.251 het ip-adres van de NAS of server in mijn eigen netwerk is. Dat moet je natuurlijk vervangen door die van jou.
En /media/MijnNAS is het koppelpunt dat ik aangemaakt heb. Ook hier vul je weer je eigen voorkeur in.
Dan de opties:
nfs4: we geven aan dat we met nfs4 willen werken. Merk op dat geen blocksizes gedefinieerd zijn. NFS4 bepaalt die zelf in een onderhandeling tussen client en server en dat kan dus veel groter zijn dan bij NFS3 (tot 32 soms 64 KB) of NFS2 (tot 8KB). In mijn geval (Gigabit Ethernet netwerk) kozen client en server een blocksize van 1 GB! Bij Linux-systemen die geen nfs4 als filetype ondersteunen kun je nfs opgeven en dan nfsver=4 in de opties daarachter. Werk je met een ouder Linux-systeem dat geen nfs4 ondersteunt, dan kun je natuurlijk ook met nfs3 werken. Ook dan kunnen client en server zelf een blokgrootte onderhandelen. Bij nfs2 moet je het echter zelf opgeven.
rw: we gebruiken een volume voor lezen en schrijven.
hard: gebruik hardlinks in plaats van softlinks. Dat is veiliger (softlinks staan er bekend voor dat ze bij NFS nogal eens geleid hebben tot datacorruptie). Het nadeel is dat als de server offline gaat, de client tot in alle eeuwigheid wacht op die server en dus muurvast zit. Dat lossen we op via:
intr: de onderbreekbaar-vlag zorgt ervoor dat als de server niet meer reageert, de client zelf de verbinding kan afbreken.
async: zie hoger bij de server. Je moet aan beide kanten hetzelfde definiëren: alletwee async of alletwee sync. Sync is veiliger, maar trager. Async is sneller maar de ingebakken onveiligheid hoeft geen probleem te zijn als de NAS of server stabiel is en een noodvoeding heeft.
actimeo=0: dit zet een hele batterij attribuutcachetijden op 0. Normaal worden attributen gecacht en dat kan dus tot een minuut lang zijn. Als bij een NAS de bestanden snel veranderen, dan wil je dit niet. Zeker bij een NAS die gebruikt wordt om multimediabestanden naar een of meer streamers te sturen, krijg je allerlei ongewenste effecten als die attributen te lang gecacht worden. Moderne computers zijn snel genoeg en dus vond ik het wel kunnen om de attributencaches gewoon uit te schakelen.
nodev en nosuid: beveiligingen om aan te geven dat het volume zeker geen block-devices bevat en ook geen dingen die als "hogere user" (meestal root) uitgevoerd moeten worden.

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: Snelste filesharing
« Reactie #1 Gepost op: 2011/12/13, 13:01:59 »
Is het voor NFS 4 niet noodzakelijk om de data die je wil delen eerst te "bind mounten" in een apart filesysteem?
Stel dat je /data/pub wil delen, dan zal je die map eerst moeten mounten op /exports/pub (of een andere map die je zelf uitkiest). Vervolgens deel je /exports/pub via de NFS server.

Zie bijv. deze Nederlandse handleiding: http://lcardinaals.wordpress.com/2011/08/07/ubuntu-de-perfecte-server-virtuele-machine-en-nfsv4-datapartitie/#more-4678
Alleen klopt in deze uitleg de extra toevoeging aan /etc/stab niet.
Dat zou dan iets als dit moeten zijn:
/data/pub    /exports/pub    none    rw,bind    0    0

Offline jan11000

  • Lid
Re: Snelste filesharing
« Reactie #2 Gepost op: 2011/12/13, 16:29:20 »
FTP zou sneller zijn.

Je hebt dus geen 3 resultaten, maar 2
1 samba
2 nfs

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: Snelste filesharing
« Reactie #3 Gepost op: 2011/12/13, 17:22:07 »
FTP is alleen echt bruikbaar als je hele bestanden in 1 keer over wil sturen.
Zodra je films wil gaan kijken, beginnen die pas te spelen als je hele bestand overgestuurd is.
Bij het schrijven naar een DB zal bij iedere bewerking de hele DB over de lijn moeten, enz.

Offline Bloom

  • Lid
Re: Snelste filesharing
« Reactie #4 Gepost op: 2011/12/13, 17:27:15 »
Is het voor NFS 4 niet noodzakelijk om de data die je wil delen eerst te "bind mounten" in een apart filesysteem?
Nee, dat hoeft niet. Met Debian als NAS/Server en Ubuntu of Debian als client werkt het zoals ik het beschreven heb.

Re: Snelste filesharing
« Reactie #5 Gepost op: 2011/12/15, 12:58:52 »
Ik gebruik al een tijdje NFS en bevalt goed. Ik zit alleen op NFS3. Veranderen naar 4 wordt niet geaccepteerd, ook nieuw shares gemaakt op versie 4 worden teruggezet op 3.

Wat zou ik kunnen missen?

Server: Ubuntu 14.04 server edition
1 x Desktop: Mint 17.1
Netbook: Acer Aspire One Xubuntu 12.04.
Laptops: 1 x Asus Linux Mint 17.1, 1 x Acer XUbuntu 12.04


Re: Snelste filesharing
« Reactie #7 Gepost op: 2011/12/15, 19:16:50 »
Gezien de uitkomst van nfsstat denk ik versie 3 client op mijn lappie.
« Laatst bewerkt op: 2011/12/15, 19:38:02 door flyerman »
Server: Ubuntu 14.04 server edition
1 x Desktop: Mint 17.1
Netbook: Acer Aspire One Xubuntu 12.04.
Laptops: 1 x Asus Linux Mint 17.1, 1 x Acer XUbuntu 12.04

Offline Bloom

  • Lid
Re: Snelste filesharing
« Reactie #8 Gepost op: 2011/12/15, 19:34:14 »
Als je op de client
ps -A|grep -i nfs,
dan zie je mogelijk een versienummer vermeld staan.
Je kunt ook
rpcinfo -u localhost nfsof
grep -i nfs /proc/filesystemsproberen. Welke versie van Ubuntu of Debian of andere Linux heb je draaien op je client en je server?

Re: Snelste filesharing
« Reactie #9 Gepost op: 2011/12/15, 19:39:07 »
Had net mijn voorgaande post aangepast. Ubuntu 10.04 server en clients.

Dit is de uitkomst op mijn laptop.

martin@Pluto:~$ rpcinfo -u localhost nfs
programma 100003 versie 2 is gereed en wacht
programma 100003 versie 3 is gereed en wacht
programma 100003 versie 4 is gereed en wacht

martin@Pluto:~$ grep -i nfs /proc/filesystems
nodev   nfsd
nodev   nfs
nodev   nfs4
martin@Pluto:~$

En dit op de server:

martin@server:~$ rpcinfo -u localhost nfs
programma 100003 versie 2 is gereed en wacht
programma 100003 versie 3 is gereed en wacht
programma 100003 versie 4 is gereed en wacht


martin@server:~$ grep -i nfs /proc/filesystems
nodev   nfs
nodev   nfs4
nodev   nfsd
 

Let op de rode kleur.
« Laatst bewerkt op: 2011/12/15, 19:43:40 door flyerman »
Server: Ubuntu 14.04 server edition
1 x Desktop: Mint 17.1
Netbook: Acer Aspire One Xubuntu 12.04.
Laptops: 1 x Asus Linux Mint 17.1, 1 x Acer XUbuntu 12.04

Offline Bloom

  • Lid
Re: Snelste filesharing
« Reactie #10 Gepost op: 2011/12/15, 19:43:34 »
Ah ja, nfsstat was ik natuurlijk weer vergeten. Die vertelt je inderdaad ook welke versie je draait.
Ik draai zelf op mijn client Ubuntu 10.04.3 desktop en deze meldt via nfsstat een nfs versie 4.
En nfs-kernel-server toont bij mij ook versie 4 voor een Ubuntu 10.04.3.
Dan zou het moeten werken aan beide kanten met versie 4, maar je moet aan de clientzijde natuurlijk wel nfs4 als filetype opgeven en als in de opties een nfsver=3 staat, moet je die weghalen.

Ik zie net je vorige bericht en dat toont aan dat je wel degelijk nfs4 ondersteunt aan client- en serverzijde. Als dat dan niet gebruikt wordt, komt dat door opties die je opgaf in /etc/fstab.

Kun je de inhoud van /etc/fstab bij de client en van /etc/exports op de server even tonen? Ik heb alleen maar de NFS-regel nodig bij de eerste, en de share-regel bij de tweede.

Re: Snelste filesharing
« Reactie #11 Gepost op: 2011/12/15, 19:44:28 »
Client:

#mounten NFS systeem
192.168.1.20:/mnt/server/data /mnt/server nfs noauto,user    0  0
192.168.1.20:/mnt/server/series /mnt/server2 nfs noauto,user    0  0

Ik had nfs vervangen door nfs4 maar toen deed het niks meer.

Server:

/mnt/server/series      (ro)
/mnt/server/data        (ro,fsid=0)

Denk dat het probleem server kant is?
                                   
« Laatst bewerkt op: 2011/12/15, 19:49:09 door flyerman »
Server: Ubuntu 14.04 server edition
1 x Desktop: Mint 17.1
Netbook: Acer Aspire One Xubuntu 12.04.
Laptops: 1 x Asus Linux Mint 17.1, 1 x Acer XUbuntu 12.04