我正在尝试通过 samba 共享 NTFS 驱动器或驱动器上的目录,并且我找到了几个教程,这些教程显示只需几分钟即可完成此操作(减去更新和软件包安装)。我已经用了大约三周了,但我无法让它工作。 目前,网络上的其他计算机无法解析主机名,我相信这是错误0x80070035的根本原因。
如果我使用这样的 IP 地址:\\192.168.1.xx\,我可以看到共享“shares”并提示输入用户名/密码。但是,输入用户名和密码后,我收到错误代码:0x80070035 找不到网络路径(关于超级用户问题的图片)。我已经开始了这个问题在 SuperUser 那里,它已经停滞了,所以我想我应该来这里并询问可以对这一切做些什么。
我使用的教程
教程 1 - Raspberry Pi NAS:构建 Raspberry Pi Samba 服务器
教程 2 - 如何将 Raspberry Pi 变成低功耗网络存储设备
教程 3 / Youtube DIY - 使用 Samba 将 Raspberry Pi 作为 NAS - 操作方法
问题与研究
n00b 如何开始排除 samba 故障?有教程可以帮助我完成这项工作吗?
我已经刻录了一个新的树莓派图像并从头开始,但这没有帮助。我不需要 avahi/Bonjour,因为我使用的是 samba/netbios,而且我不想使用 HOSTS 文件修改,因为我有几台机器想要使用它。鉴于有软件包和教程,我很困惑为什么我无法启动并运行它以及为什么我遇到如此困难。特别是考虑到指令的同质性。
nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat
group: compat
shadow: compat
hosts: files mdns4_minimal dns mdns4 wins [NOTFOUND=return]
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
从树莓派 ping:
$ ping -c3 raspberrypi
PING raspberrypi (127.0.1.1) 56(84) bytes of data.
64 bytes from raspberrypi (127.0.1.1): icmp_req=1 ttl=64 time=0.208 ms
64 bytes from raspberrypi (127.0.1.1): icmp_req=2 ttl=64 time=0.200 ms
64 bytes from raspberrypi (127.0.1.1): icmp_req=3 ttl=64 time=0.240 ms
--- raspberrypi ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.200/0.216/0.240/0.017 ms
smb配置文件
[global]
workgroup = WORKGROUP
# NetBIOS name = raspberrypi
server string = %h server
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
security = user
encrypt passwords = true
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n$
pam password change = yes
map to guest = bad user
usershare allow guests = yes
[homes]
comment = Home Directories
browseable = no
read only = yes
create mask = 0700
directory mask = 0700
valid users = %S
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
[Shares]
comment = Shares Folder
path = '/media/80Gigger/shares'
browsable = yes
read only = no
系统表
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
#/dev/sda1 /media/USB auto gid=1002,uid=1001 0 0
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[o$
更新1
等\主机
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 raspberrypi
更新2
Windows 计算机未加入域。 pi 具有默认主机名和主机文件。当你说“摆弄”时,我应该改变什么?
$ hostname
raspberrypi
$ nmblookup raspberrypi
querying raspberrypi on 192.168.1.255
192.168.1.14 raspberrypi<00>
$ nmblookup -M -- -
querying __MSBROWSE__ on 192.168.1.255
192.168.1.14 __MSBROWSE__<01>
$ smbclient -L 192.168.1.14
Enter pi's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
Shares Disk Shares Folder
IPC$ IPC IPC Service (raspberrypi server)
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]
Server Comment
--------- -------
D-WHALEY2
LAPTOP
RASPBERRYPI raspberrypi server
Workgroup Master
--------- -------
WORKGROUP RASPBERRYPI
更新3
我取消了树莓派中 NetBios 字段的注释,现在在 Windows 资源管理器中遇到了不同的错误;错误 0x80004005。如果我尝试导航到 \raspberrypi\ ,则会收到此错误。 我发现这个问题这描述了错误的许多方面。不过我只找到了 1 个 Microsoft 6to4 适配器。删除并重新启动没有效果。
如果我导航到 \192.168.1.14\ 并输入适当的凭据,我仍然收到错误 0x80070035。
我在 Windows 7 笔记本电脑上禁用了 ipv6。但我认为这不会对这种现象产生任何影响。
在树莓派上,我无法 ping 通 Windows 机器的名称,也无法访问 Windows 7 机器上的 samba 共享。我不确定 PCMANFM 是否可以做到这一点,但它肯定不起作用。
更新4
我现在可以使用 samba 并让我查看共享中的文件,但名称解析仍然无法工作。进步!感谢迄今为止大家的帮助!
看来我正在解决不止一个问题,而且我刚刚解决了访问共享问题。该驱动器需要一个永久挂载点来供 samba 读/写,因此我必须修改 fstab 文件。另外,似乎当我删除卷名中的空格时,我在 smb.conf 文件中的 oath 周围留下了单引号,并且在 samba 日志中查看,这导致了问题,所以我也必须对其进行编辑。
我仍然无法通过 ping 来将 pi 的名称解析为 IP,尽管我将尝试破译下面的答案,看起来会有所帮助。
我为我正在使用的帐户重新执行了 smbpasswd,以防万一我之前忘记执行此操作:
sudo smbpasswd -a backups
这是我的新主机文件:
127.0.0.1 raspberrypi localhost
::1 raspberrypi localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
#127.0.0.1 raspberrypi
#127.0.1.1 raspberrypi
这是我的 fstab 文件:
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
/dev/sda1 /media/80Gigger auto gid=1002,uid=1001 0 $
# a swapfile is not a swap partition, so no using swapon|off from here on, use $
这是我的新 smb.conf:
[global]
workgroup = WORKGROUP
#netbios name = raspberrypi
server string = %h server
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
security = user
encrypt passwords = true
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n$
pam password change = yes
map to guest = bad user
usershare allow guests = yes
[homes]
comment = Home Directories
browseable = no
read only = yes
create mask = 0700
directory mask = 0700
valid users = %S
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
[Shares]
comment = Shares Folder
path = /media/80Gigger/shares
browsable = yes
答案1
如果你说“ping raspberrypi”,它不会使用与 Windows 机器相同的方式进行名称查找......大概。也就是说,SMB/CIFS 协议具有三种执行名称查找的方法,但其他两种方法实际上仅在您配置域时使用,而您没有配置域。
这意味着您需要通过 NMB 协议进行名称查找。 Samba 将默认使用本地计算机的主机名(命令的输出hostname
)作为 NMB 名称。尝试运行它,并验证它是否是您期望的主机名。如果没有,就继续摆弄,/etc/hosts
直到出现为止。您可能还需要修复 /etc/hostname (但请注意,在运行hostname
init 脚本或重新启动之前,后一个文件中的更改不会生效)。
毫不奇怪,用于执行 NMB 查找的 samba 工具称为nmblookup
.在树莓派上运行该程序,并以 的输出hostname
作为参数,并验证它是否与树莓派的 IP 地址匹配。如果没有,请发布输出。如果确实如此,但 IP 地址前面有一个位于尖括号 (<>) 之间的十六进制数字,那就没问题(十六进制数字是结果的类型;有许多可能的结果类型)。
NMB 协议非常糟糕,部分原因是它想要选举一个“主浏览器”主机,但这并不总是能正常工作。尝试运行nmblookup -M -- -
(即,nmblookup
dash-capital m-space-dash-dash-space-dash。是的,这很难看)。这将查找主浏览器。记下您返回的 IP 地址。跑smbclient -L ip
,哪里ip是那个ip地址。验证您的树莓派是否已列出。如果不是,您可以尝试通过preferred master = yes
在您的smb.conf
.但是,如果您正在运行域,则不要这样做(域主机必须是主浏览器,否则域登录将失败)。
如果您运行的是已加入域的 Windows 7 或更高版本,则默认情况下 Windows 将不再执行 NMB 查找。在这种情况下,您可能需要设置一些注册表项来更改这些默认值(这些项可以在 samba wiki 上找到)。或者,您可以将树莓派加入 Windows 域,这样就不再需要 NMB。
答案2
这可能会为您指明正确的方向,但可能无法解决问题。路由器上的 DHCP 和 DNS 恶魔可能会把事情搞砸。就我而言,我在 opensuse 和 raspberypi 上遇到了同样的问题。以下是我所做的所有步骤:
- 编辑的主机名文件 /etc/hostname
mymacnine
也尝试过,但mycmachine.domain
都不起作用。 - 搞乱了 resolv.conf 一直工作,直到 Windows 机器中更新或删除了某些内容
- 发现我的WRT1900ac有可以输入域名的地方并执行了它,每次都有效。
有人指出您的 NetBIOS 名称已被注释掉。
答案3
解决方案
我无法在评论中提供此内容,但我希望您看到一个工作hosts
文件(来自我的工作 Gentoo 安装):
# /etc/hosts: Local Host Database
#
# This file describes a number of aliases-to-address mappings for the for
# local hosts that share this file.
#
# In the presence of the domain name service or NIS, this file may not be
# consulted at all; see /etc/host.conf for the resolution order.
#
# IPv4 and IPv6 localhost aliases
127.0.0.1 bedroom-gentoo.myISP.net bedroom-gentoo localhost
::1 bedroom-gentoo.myISP.net bedroom-gentoo localhost
#
# Imaginary network.
#10.0.0.2 myname
#10.0.0.3 myfriend
#
# According to RFC 1918, you can use the following IP networks for private
# nets which will never be connected to the Internet:
#
# 10.0.0.0 - 10.255.255.255
# 172.16.0.0 - 172.31.255.255
# 192.168.0.0 - 192.168.255.255
#
# In case you want to be able to connect directly to the Internet (i.e. not
# behind a NAT, ADSL router, etc...), you need real official assigned
# numbers. Do not try to invent your own network numbers but instead get one
# from your network provider (if any) or from your regional registry (ARIN,
# APNIC, LACNIC, RIPE NCC, or AfriNIC.)
#
请注意,localhost
的地址127.0.0.1
可以解析为多个名称。
- FQDN(第二列),以防应用程序需要。 (这在OP提供的链接中进行了解释)。
- 我的机器名称(第三列)。
- 本地主机(第四列)。
另请注意,我不区分 IPv4 和 IPv6
此格式消除了对127.0.1.1
.由于我不希望网络上的其他人看到我的机器,因此我将虚构的网络部分注释掉,但如果我想这样做,我会添加(假设我有您的设备):
#
# Real Network
192.168.1.14 raspberrypi.myISP.net raspberrypi
192.168.1.x D-WHALEY2.myISP.net D-WHALEY2
192.168.1.xx LAPTOP.myISP.net LAPTOP
# Imaginary Network
#10.0.0.2 myname
#10.0.0.3 myfriend
#
为了每次都能正常工作,我必须登录路由器并通过 MAC 过滤进行分配,并从 Raspianhosts
文件中删除 127.0.1.1。此操作只需完成一次:(MAC 地址解析为静态 IP 地址)
- Pi的MAC地址 --> 192.168.1.14
- D-WHALEY2 的 MAC 地址 --> 192.168.1.x
- 笔记本电脑的 MAC 地址 --> 192.168.1.xx
这样做可以确保每次启动网络上的设备时,都会为其分配与您的hosts
文件匹配的地址。它还消除了 Windows 计算机解析内部地址的需要。
问题
Windows 无法解析 Pi 的地址,原因有 2 个:
127.0.1.1
不是有效的内部地址,根据RFC 1918, 取代为RFC 6761。另请参阅hosts
文件中的注释。- 由于 Windows 有一个不包含该
127.0.1.1
地址的主机文件,因此它将其视为另一个本地主机地址(请参阅谁选择 127.0.0.1 作为 localhost,为什么?它有什么意义呢?),为什么。这种行为会导致OP描述的错误。
简而言之,这是 Windows 的问题,也是基于 Debian 的发行版的“功能”。删除“功能”并配置路由器以“修复”Windows 中的问题应该允许 Samba 连接