2008-11-05 9 views
2

J'utilise une machine sur laquelle je n'ai pas d'accès root et qui souhaite accéder aux fichiers sur un serveur Samba en mode d'accès aléatoire. Je sais que je peux transférer les fichiers dans leur intégralité en utilisant smbclient mais les fichiers sont très volumineux (> 1GB) et je préfère les traiter comme des fichiers distants sur lesquels je peux faire un accès aléatoire. Le problème comme noté est que je n'ai pas d'accès root à cette machine (une machine Linux) donc je ne peux pas monter le système de fichiers Samba distant.Utiliser Samba pour un accès aléatoire sans monter le système de fichiers?

Existe-t-il une solution au niveau de l'utilisateur qui me permettra d'accéder de façon aléatoire au contenu d'un fichier sur un serveur Samba? Il semble qu'il devrait être possible de faire tout ce que fait le client du système de fichiers du noyau, mais à partir d'une application au niveau de l'utilisateur.

J'ai seulement besoin d'un accès en lecture seule btw et le fichier distant est garanti de ne pas changer.

Répondre

2

Pour répondre à ma propre question après avoir creusé autour de la source Samba: il y a une libsmbclient de la bibliothèque cliente qui inclut tous les trucs de gestion des fichiers habituels: smbc_open, smbc_fstat, smbc_lseek, smbc_read etc. Par exemple, voici un extrait I vient d'écrire qui lit un fichier vers l'arrière (juste pour vérifier qu'il faisait un véritable Seek):

fd = smbc_open(path, O_RDONLY, 0); 
smbc_fstat(fd, &st); 

for (offset = st.st_size - BUFLEN; offset > 0; offset -= BUFLEN) { 
    smbc_lseek(fd, offset, SEEK_SET); 
    smbc_read(fd, buffer, BUFLEN); 
} 

(contrôle d'erreurs pour plus de clarté)

+0

Depuis que j'ai écrit ce qui précède, j'ai trouvé une bien meilleure solution (pour moi au moins parce qu'elle est en Java) ici: http://jcifs.samba.org/ –

+0

Pourriez-vous partager un code source compilable pour votre solution? – Fernando

1

Essayez d'utiliser smbmount pour monter le système de fichiers sans les permissions root:

mkdir ~/temp 
smbmount //{server}/{share} ~/temp -o username=username={username},password={password} 

Edit: Mise à jour pour utiliser smbmount au lieu de mount.

+0

essayé. Il dit: mount: seule la racine peut le faire –

+0

J'ai mis à jour le message pour utiliser smbmount au lieu de mount. – xsl

+0

Hmmm, eh bien, j'ai téléchargé et installé samba et essayé mount.cifs qui semble être le remplacement de smbmount. Cela échoue également et la raison semble être que la commande a besoin du bit racine suid défini. Attrapez 22! –