pve自动挂载局域网内的smb服务

AI摘要:实现PVE自动挂载局域网SMB服务,通过shell脚本和systemd服务,先ping检查目标服务器,再挂载SMB共享,并创建systemd服务自动执行。

Powered by AISummary.

一、我的应用场景

我的局域网内有一个ip为192.168.8.27的主机,并且该主机开启了smb服务,用户名为max,密码为123456,但是这个服务器不怎么开机,我还有另一个24小时开机的服务器(pve)。我想实现的是,当这个ip为192.168.8.27的主机开机时,我这个24小时开机的服务器能自动挂载smb服务,我尝试过好多方法,比如使用autofs或者systemctl automount都失败了,最后使用如下方法成功了。此方法适合所有debian系的操作系统。

二、具体想法

通过shell脚本和系统服务的方式来实现。

1.Ping 检查

  • 在脚本中,使用 ping 命令循环检查目标服务器(即 IP 为 192.168.8.27 的服务器)是否在线。只有当目标服务器响应 ping 时,脚本才会继续执行挂载命令。
  • 这意味着在目标服务器开机之前,挂载操作不会执行,因此避免了挂载失败的情况。

2.挂载 SMB 共享

  • 一旦目标服务器可达,脚本使用 mount 命令挂载 SMB 共享,利用提供的凭据文件进行身份验证。

3.systemd服务

  • 通过创建一个 systemd 服务,使得这个挂载操作在系统启动时自动执行。服务被设置为在网络可用时启动,并在目标服务器可达时挂载共享。

4.动态挂载

  • 此脚本的设计使得每次你需要访问 SMB 共享时,都会先检查目标服务器是否在线。这意味着,如果目标服务器未开机,访问挂载点将不会失败,而是会提示挂载未成功。

5.手动挂载

  • 如果你发现挂载未成功(例如,目标服务器刚刚开机,但服务尚未完成初始化),你可以随时手动运行脚本或重新启动服务来尝试重新挂载:

systemctl start mount-smb.service

6.挂载点的状态

  • 如果你尝试访问 /mnt/smbshare 时,目标服务器未开机或 SMB 服务未启动,你将看到一个错误,表明无法访问。这个错误是正常的,因为在目标服务器未开机或未提供服务时,挂载点是不可用的。

7.注意事项

  • 延迟

    • 可能会有短暂的延迟,因为目标服务器需要一些时间来完全启动和初始化 SMB 服务。在这种情况下,如果你尝试访问挂载点而目标服务尚未完全可用,你可能会遇到访问错误。

三、实现过程

1. 安装必要的软件

首先,确保你已经安装了 cifs-utils 包,这是用于挂载 SMB/CIFS 共享的工具。

我是root用户登录的,所以不需要sudo命令,其他用户自行加上sudo

apt update
apt install cifs-utils

2. 创建挂载点

在你的24小时开机的服务器上创建一个挂载点,例如 /mnt/smbshare

mkdir -p /mnt/smbshare

3. 创建凭据文件

为了安全起见,使用一个凭据文件存储 SMB 的用户名和密码。创建一个文件并添加你的凭据:

nano /etc/samba/smb-creds

在文件中添加以下内容:

username=max
password=123456

确保仅限 root 用户读取这个文件:

chmod 600 /etc/samba/smb-creds

4.编写系统挂载脚本

创建一个 systemd 服务文件,来挂载 SMB 共享。首先,创建一个脚本文件:

nano /usr/local/bin/mount-smb.sh

在这个文件中添加以下内容:

#!/bin/bash

while ! ping -c 1 -n 192.168.8.27 &>/dev/null; do
    sleep 3
done

mount -t cifs //192.168.8.27/share /mnt/smbshare -o credentials=/etc/samba/smb-creds,iocharset=utf8

其中 //192.168.8.27/share 是你想要挂载的共享名,/mnt/smbshare 是挂载点。

给予脚本可执行权限:

chmod +x /usr/local/bin/mount-smb.sh

5. 创建 systemd 服务

然后,创建一个 systemd 服务文件:

nano /etc/systemd/system/mount-smb.service

在文件中添加以下内容:

[Unit]
Description=Mount SMB Share
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mount-smb.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

6. 启用服务

运行以下命令启用并启动服务:

systemctl enable mount-smb.service
systemctl start mount-smb.service

7. 验证挂载

你可以手动重启你的不常开机的服务器,看看启动后是否能够成功挂载 SMB 共享

打赏
评论区
头像
    头像
    neavcnvubw
      

    真好呢

文章目录

本站已运行: