使用Samba进行随机访问而无需挂载文件系统?

3
我正在使用一台没有root权限的机器,并希望以随机访问模式访问Samba服务器上的文件。我知道可以使用smbclient将文件完整传输,但是文件非常大(>1GB),我宁愿将它们视为远程文件,可以进行随机访问。
问题在于我没有root权限来挂载远程Samba文件系统(一个Linux盒子)。
是否有用户级解决方案,可以让我随机访问Samba服务器上文件的内容?似乎应该可以从用户级应用程序完成内核文件系统客户端正在执行的所有操作。
顺便说一下,我只需要只读访问权限,而且远程文件保证不会更改。
2个回答

3

在深入研究Samba源代码后,我自己回答了这个问题:有一个客户端库libsmbclient,其中包含所有通常的文件处理工具:smbc_open、smbc_fstat、smbc_lseek、smbc_read等。例如,下面是我刚写的一段代码片段,它可以反向读取文件(只是为了检查它是否真正进行了搜索):

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);
}

(由于清晰度而移除错误检查)
格式要求:

(错误检查已移除)


自从写了上面的内容后,我发现了一个更好的解决方案(至少对我来说更好,因为它是用Java编写的),在这里:http://jcifs.samba.org/。 - Dave Griffiths
请问您是否可以分享一份可编译的源代码,作为您的解决方案? - Fernando

0
尝试使用smbmount以非root权限挂载文件系统:
mkdir ~/temp
smbmount //{server}/{share} ~/temp -o username=username={username},password={password}

编辑:更新为使用smbmount而不是mount


尝试过了。它说:挂载:只有root用户可以执行该操作。 - Dave Griffiths
1
嗯,我下载并安装了Samba,并尝试了mount.cifs,这似乎是smbmount的替代品。但这也失败了,原因似乎是该命令需要设置suid root位。陷入困境! - Dave Griffiths

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接