无法在启动时安装CIFS网络驱动器


22

我在fstab中添加了一个共享,以便使用我的所有文件访问网络驱动器... fstab看起来像:

proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
//192.168.1.73/disk1 /media/disk1 cifs username=pi,password=raspberry,_netdev,uid=1000,gid=1000,iocharset=utf8, 0 0
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that

当我sudo mount -a成功运行网络驱动器cd /media/disk1ls,便可以正确地给我列出该网络驱动器上所有文件夹的列表。

但是,当我将pi重新引导cd到该位置并ls再次运行后,就什么也没有了。我必须sudo mount -a再次手动运行,然后再安装驱动器。

我已经在其他论坛上多次看到此报道,并且共识似乎是fstab中的安装发生得太早了-在网络建立之前。我已经尝试去实现我所理解的东西-但老实说,很多事情都困扰着我。我已经添加_netdev到fstab中的行中,已经添加rootdelay=10到/boot/cmdline.txt中,已经安装了networkmanager ...这些都没有帮助。

因此,我转向您,准备将pi扔出窗外-然后是我自己。任何帮助,不胜感激。

Answers:


9

我建议您将安装添加到根目录或用户crontab中。

假设您当前正在使用sudo,则根crontab似乎是最合适的。

sudo crontab -e#编辑根crontab

在crontab中添加一个@reboot条目。您需要以下行

@reboot(睡眠30; / bin / mount / media / disk1)&

这将等待30秒钟,然后再安装磁盘。


1
对于为此花费的时间表示歉意,我只是有机会再次尝试了一下。我很欣慰地说您的解决方案效果很好。非常感谢您的帮助。
路加·Twomey 2015年

这肯定会安装,但是在关机时如何从程序上卸载呢?
贾斯托·皮耶卡兹

14

关于在启动时自动安装网络驱动器,我也有同样的问题。我尝试在编辑后添加mount -a命令,但无济于事。它不起作用的原因是执行之前网络尚未就绪。/etc/rc.local/etc/fstabmount -a

正如其他人提到的那样,问题是甚至在网络启动之前就已经安装了fstab驱动器。为了确保网络是在启动的时候准备好了,有一个选项Wait for Network at Bootraspi-config

sudo raspi-config

并将Wait for Network at Boot选项设置为Slow wait for network connection before completing boot并重新启动。当然,启动时间可能会受到影响,但是如果不是很关键,则可以使用此方法。

重新启动后,您可以检查网络驱动器是否已自动安装:快速检查ls /media/DRIVE_NAMEdf


这当然是对我有用的修复程序,截至2016
ChrisAdmin

我更喜欢使用该/etc/rc.local mount -a解决方案,但不要忘记先入睡。请参阅我刚刚在这里发布的答案:raspberrypi.stackexchange.com/a/63690/49091
Gabriel Staples

4

更新说明,看到它出现在Google上。我在乘坐机场时间胶囊时遇到了同样的挫败感。我正在2018年3月14日发布的具有标准GUI的Rasbian Stretch上运行Raspberry Pi 3B +。

这是我的fstab代码行:

//100.10.10.1/Data /mnt/timecapsule cifs username=********, password=******, vers=1.0, rw, uid=1000, iocharset=utf8, sec=ntlm 0 0

随着时间的流逝,似乎发生了一些变化:

  1. 您需要添加“ vers = 1.0”语句
  2. _netdev在CFIS文件系统上不执行任何操作,仅在NFS文件系统上工作(如下面的Gabriel Staples所述)
  3. “ user =”和“ pass =”现在分别应为“ username =”和“ password =”
  4. 最后,现在有一个“ Wait for network”框,可以在Raspberry Pi Configuration Utility中打勾,该框解决了我的启动时装载问题。

经过2天的奋斗,我的现在终于安装好了,并在启动时进行了安装!


1

解决此问题的另一个技巧是在文件底部追加/etc/rc.local命令:

mount -a

重新启动后,您可以通过键入以下命令来验证一切正常:

df -h

然后您会看到类似以下内容:

pi@raspberrypi ~ $ df -h
File system      Dim. Usati Dispon. Uso% Montato su
/dev/root        7,2G  6,3G    584M  92% /
devtmpfs         119M     0    119M   0% /dev
tmpfs             25M  412K     25M   2% /run
tmpfs            5,0M     0    5,0M   0% /run/lock
tmpfs             49M     0     49M   0% /run/shm
/dev/mmcblk0p1    56M   20M     37M  36% /boot
//192.168.1.1/ws 466G  452G     14G  98% /mnt/winshare  <----------

0

对于CIF份额,_netdevin /etc/fstab中的选项似乎根本不起作用。该资源(https://help.ubuntu.com/community/Fstab)似乎可以确认,当其显示“ _netdev-这是一个网络设备,请在启动网络后将其安装。仅对fstype nfs有效 ”。

我更喜欢使用/etc/rc.local文件来解决此问题,方法是先休眠然后mount -a在其中调用,而不是使用中的crontabWait for network at boot选项raspi-config。但是,要获得/etc/rc.local修复,请不要忘记睡觉,如下所述。

为了解决此问题(在我的Pi3上),我所做的是修改/etc/rc.local为休眠20秒(通过致电sleep 20),然后致电mount -a。这样,即使网络尚未连接,当系统第一次读取fstab文件时,挂载也会失败,因此我在此处强制系统等待20秒(给网络时间以连接),然后我强制其mount -a再次调用挂载fstab文件中的所有驱动器。

这是我的/etc/rc.local文件现在的样子:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
#GS notes: a *minimum* of sleep 10 is required for the mount below to work on the Pi 3; it failed with sleep 5, but worked with sleep 10, sleep 15, and sleep 30
sleep 20
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
  mount -a #GS: mount all drives in /etc/fstab
fi

exit 0

做完了!现在,它对我来说非常完美!

参考文献:


0

在我的情况下,我购买了Raspberry Pi 3并安装了Raspbian Stretch,我用喜欢的网络驱动器排列来编辑fstab,如下所示:

//172.30.0.54/mnt/anim /mnt/share/Z cifs  username=frieza,password=meh,uid=1000,gid=1000,vers=2.0 0 0
//172.30.0.56/share/V /mnt/share/V cifs  username=goku,password=meh,uid=1000,gid=1000,vers=2.0 0 0
//172.30.0.56/share/M /mnt/share/M cifs  username=piccolo,password=meh,uid=1000,gid=1000,vers=2.0 0 0
//172.30.0.56/share/O /mnt/share/O cifs  username=drbrief,password=meh,uid=1000,gid=1000,vers=2.0 0 0
//172.30.0.56/share/R /mnt/share/R cifs  username=vegeta,password=meh,uid=1000,gid=1000,vers=2.0 0 0

所以每当我使用:

sudo mount -a

fstab中列出的每个驱动器都会自动挂载,然后我将其添加到rc.local和其他几个位置,以便我可以在启动时享受这些驱动器的内容,总之,直到我决定在根目录中添加一行后,它才起作用crontab喜欢者:

sudo crontab -e

选择我的编辑器(在y情况下为nano),然后在底部添加此行

@reboot (sleep 20;/bin/mount -a)&

在我的情况下,重启后一切正常。希望这对你们有帮助。

注意:

如果遇到任何问题,可以随时运行:

service cron status

它将提示您运行了什么,没有运行了什么


0

您可以在fstab中添加_netdevcomment = systemd.automount属性,重启后一切正常。我曾经在重启时面临同样的问题。

\\network_shared_location\directory /your_mount_location/mount_directory cifs _netdev,username=<your_username>,password=<your_password>,workgroup=<YOUR_WORKGROUP>,users,auto,user_xattr,comment=systemd.automount 0 0

-1

我知道这是一个较晚的答复,但是我遇到了同样的问题,这与fstab调用时网络没有启动有关。我尝试了crontab第一次,但效果很好,但认为有点混乱...

这里有一篇很棒的文章其中介绍init.d了如何在启动时使用脚本来运行挂载……现在对我来说非常有用。


1
如果将来链接失效,您是否可以编辑答案以提供链接中的重要信息。
Greenonline
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.