首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >虚拟机文件传输慢?openEuler配置Samba实现高效共享

虚拟机文件传输慢?openEuler配置Samba实现高效共享

原创
作者头像
一只牛博
发布2025-12-11 22:16:52
发布2025-12-11 22:16:52
1.5K0
举报

虚拟机文件传输的痛点

在Mac上用虚拟机运行openEuler,很快会遇到一个实际问题:Mac和虚拟机之间怎么传文件?

scp命令虽然能用,但每次都要敲一长串命令,路径容易写错。想把Mac上的代码传到虚拟机编译,或者把虚拟机生成的日志文件拿出来分析,这种重复操作一天要做很多次。有些人会用网盘中转,但这又多了一个上传下载的环节,网速慢的时候更痛苦。

理想的方案应该是什么样?就像访问本地文件夹一样,在Mac的Finder里直接打开虚拟机的目录,拖拽文件就能完成传输。Samba正好能实现这个需求。

Samba和SMB协议

Samba是一个实现SMB/CIFS协议的开源软件,让Linux系统可以和Windows、macOS等系统进行文件共享。macOS原生支持SMB协议,Finder可以直接连接SMB服务器,不需要安装任何客户端软件。

SMB协议最初由微软开发,用于Windows系统之间的文件共享。Samba实现了这个协议的服务端,让Linux也能提供文件共享服务。对于Mac用户来说,连接Samba服务器和连接另一台Mac电脑的体验完全一样,通过Finder的"连接服务器"功能就能完成。

环境准备

主机名是openEuler,可以通过openEuler.local域名访问。

代码语言:Bash
复制
cat /etc/os-release
img
img

从输出确认系统是openEuler 25.09。Mac连接Samba时就不需要记IP地址,直接用openEuler.local域名即可。

安装Samba

openEuler的官方仓库中包含Samba软件包,直接用dnf安装:

代码语言:Bash
复制
sudo dnf install -y samba samba-client samba-common
img
img

从安装输出可以看到,dnf自动安装了4个相关软件包:samba主程序、samba-client客户端工具、samba-common公共组件、samba-libs库文件。版本是4.22.1,这是一个较新的稳定版本。安装完成后验证版本:

代码语言:Bash
复制
rpm -qa | grep samba
smbd --version

输出显示Samba 4.22.1安装成功,smbd是Samba的守护进程。

创建共享目录

建立一个专门的目录用于文件共享:

代码语言:Bash
复制
sudo mkdir -p /data/share
sudo chmod 777 /data/share
ls -ld /data/share
img
img

权限设置为777是为了确保任何用户都能读写这个目录,避免权限问题导致文件操作失败。在生产环境中可以根据安全需求设置更严格的权限,但对于个人开发虚拟机来说,便利性更重要。

创建一个测试文件验证目录可用:

代码语言:Bash
复制
echo "这是openEuler虚拟机中的测试文件" | sudo tee /data/share/test.txt

文件创建成功,后面可以在Mac上验证能否访问到这个文件。

配置Samba共享

Samba的配置文件是/etc/samba/smb.conf,需要在文件末尾添加共享配置。先备份原配置文件:

代码语言:Bash
复制
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

然后添加共享配置:

代码语言:Bash
复制
sudo tee -a /etc/samba/smb.conf > /dev/null << 'EOF'

[share]
   comment = openEuler Shared Folder
   path = /data/share
   browseable = yes
   writable = yes
   guest ok = no
   valid users = root
   create mask = 0755
   directory mask = 0755
EOF
img
img

从配置内容可以看到几个关键参数。[share]是共享名称,这个名字会在Mac的Finder里看到。path指定共享的实际路径。browseable=yes让这个共享可以被浏览。writable=yes允许写入文件。guest ok=no禁止匿名访问,必须提供用户名密码。valid users=root指定只有root用户能访问。create maskdirectory mask设置新建文件和目录的权限掩码。

创建Samba用户

Samba有自己的用户数据库,需要单独创建用户:

代码语言:Bash
复制
sudo smbpasswd -a root
sudo smbpasswd -e root
img
img

执行smbpasswd命令时会提示输入密码,这个密码是Samba专用的,可以和Linux系统密码不同。输入两次确认后,显示"Added user root"说明用户创建成功。然后用-e参数启用这个用户。

用pdbedit命令可以查看Samba用户的详细信息,输出显示了用户的SID、主目录、登录时间等配置。

启动Samba服务

Samba包含两个服务:smb负责文件共享,nmb负责NetBIOS名称解析。

代码语言:Bash
复制
sudo systemctl start smb
sudo systemctl start nmb
sudo systemctl enable smb
sudo systemctl enable nmb
sudo systemctl status smb
img
img

从服务状态可以看到smb服务已经active (running),主进程PID是9955,内存占用7.4MB。日志显示"smbd version 4.22.1 started"和"ready to serve connections",说明服务已经准备好接受连接。

enable命令让服务开机自动启动,这样虚拟机重启后不需要手动启动Samba。

配置防火墙

openEuler默认启用防火墙,需要开放Samba使用的端口:

代码语言:Bash
复制
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
sudo firewall-cmd --list-services
img
img

第一条命令将samba服务添加到防火墙规则,--permanent参数让规则持久化。reload让新规则生效。最后一条命令验证配置,输出中包含"samba"说明规则已经生效。

这一步非常关键,如果忘记配置防火墙,Mac会连接不上Samba服务,这是最常见的问题之一。

Mac连接Samba

在Mac上打开Finder,按Cmd+K或者选择菜单"前往" -> "连接服务器",输入地址:

代码语言:Plain
复制
smb://openEuler.local
img
img

点击连接后会提示输入用户名和密码。选择"注册用户",输入用户名root和之前设置的Samba密码。认证通过后会显示可用的共享列表,选择"share"进行挂载。

如果avahi没有配置,这里也可以直接用IP地址,比如smb://10.211.55.3,但用域名更方便,IP变化时不需要修改配置。

文件访问验证

连接成功后,Finder左侧边栏会出现"share",点击进入可以看到之前在虚拟机中创建的test.txt文件和"测试"文件夹。

img
img

从Finder窗口可以看到共享目录下的文件列表。test.txt显示文件大小43字节,修改时间是2025年11月2日22:22。双击可以直接打开查看内容:"这是openEuler虚拟机中的测试文件"。

在Mac的Finder里可以像操作本地文件一样进行各种操作:拖拽文件到共享目录、创建新文件夹、重命名、删除等。这些操作会实时同步到虚拟机的/data/share目录中。

SELinux问题排查

配置过程中可能会遇到一个问题:服务启动正常,防火墙也配置了,Mac能连接,但是看不到共享目录下的任何文件。这很可能是SELinux导致的。

openEuler默认启用SELinux,它会阻止Samba访问文件系统。检查SELinux状态:

代码语言:Bash
复制
getenforce

如果显示Enforcing,说明SELinux处于强制模式。临时关闭SELinux试试:

代码语言:Bash
复制
sudo setenforce 0
getenforce

执行后显示Permissive,SELinux切换到宽容模式。这时回到Mac的Finder刷新一下,应该就能看到文件了。

这个临时方案重启后会失效。如果要永久解决,可以配置SELinux策略:

代码语言:Bash
复制
sudo semanage fcontext -a -t samba_share_t "/data/share(/.*)?"
sudo restorecon -Rv /data/share
sudo setsebool -P samba_enable_home_dirs on
sudo setsebool -P samba_export_all_rw on

或者直接禁用SELinux,编辑/etc/selinux/config,将SELINUX=enforcing改成SELINUX=disabled,重启生效。

易获得性的提升

通过Samba配置,Mac和openEuler虚拟机之间的文件传输变得像访问本地文件一样简单。

对于开发场景,可以在Mac上用VS Code或其他编辑器打开共享目录,直接编辑虚拟机里的代码文件。保存后虚拟机里立即生效,不需要scp同步。编译日志、测试结果等文件也能直接在Mac上查看,不用来回复制。

对于日常使用,下载文件、文档传输都可以通过共享目录完成。虚拟机控制台复制粘贴不方便,共享目录提供了更好的交互方式。

对于多虚拟机管理,可以给每个虚拟机配置不同的共享目录,在Mac的Finder里同时挂载多个虚拟机的共享,切换访问非常方便。

这种文件共享方式基于标准的SMB协议,不依赖虚拟机软件的专有工具,适用性更广。即使换了虚拟机软件,或者在物理机上运行openEuler,Samba配置依然有效。

总结

通过在openEuler虚拟机上配置Samba服务,实现了Mac和虚拟机之间的无缝文件共享。整个配置过程包括安装Samba软件包、创建共享目录、配置smb.conf文件、创建Samba用户、启动服务并配置防火墙。配置完成后Mac可以通过Finder直接访问虚拟机的共享目录,像操作本地文件一样进行读写操作。配置中最容易遇到的问题是防火墙拦截和SELinux阻止,通过相应的命令都能快速解决。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 虚拟机文件传输的痛点
  • Samba和SMB协议
  • 环境准备
  • 安装Samba
  • 创建共享目录
  • 配置Samba共享
  • 创建Samba用户
  • 启动Samba服务
  • 配置防火墙
  • Mac连接Samba
  • 文件访问验证
  • SELinux问题排查
  • 易获得性的提升
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档