为什么要使用 Samba
在 VMware 虚拟机中编译 SDK 时,经常需要在 Windows 和 Ubuntu 之间传输文件。Samba 可以让 Ubuntu 虚拟机的目录直接以网络共享的形式映射到 Windows 资源管理器中,让用户在 Windows 中访问 Ubuntu 虚拟机的文件像是本地磁盘一样方便。
主要使用场景:
- 镜像烧录: 编译完成的
.img等镜像文件通常在虚拟机中生成,通过 Samba 共享后可以直接在 Windows 上用烧录工具读取,不需要手动复制镜像到 Windows 中。 - 压缩包下载: 从网盘下载的大体积 SDK 压缩包可以通过 Samba 共享让直接将压缩包下载到虚拟机映射的网络磁盘中,相当于直接下载到了虚拟机中,不需要再手动复制。
- 源码编辑: 可以在 Windows 上用习惯的编辑器(如 VS Code、Notepad++ 等)直接打开虚拟机里的源码进行编辑,保存后立即在虚拟机中编译(文件编辑推荐
SSH + VSCode)。 - 文件备份: 编译产物、日志文件等可以随时从 Windows 侧访问和备份,不用每次都通过 SSH 传输。
相比 VMware 自带的共享文件夹功能,Samba 兼容性更好更稳定可靠。
启动虚拟机
安装 Samba
更新软件包列表:
sudo apt update安装 Samba:
sudo apt install samba smbclient -y检查 Samba 是否安装成功:
samba --version如果看到 Samba 版本号输出,说明安装成功。
在自己的用户目录下为 Samba 创建一个共享目录:
mkdir -p ~/share
chmod -R 0777 ~/share2
配置 Samba
写入配置(使用tee命令向/etc/samba/smb.conf文件末尾追加" "中的内容):
echo "
[ubuntu22-share-folder]
comment = share folder
browseable = yes
path = /home/lckfb/share
valid users = lckfb, lckfb
write list = lckfb, lckfb
inherit owner = yes
browsable = yes
admin users = lckfb, lckfb
public = yes
writable = yes
create mask = 0755
read only = No
directory mode = 0755
" | sudo tee -a /etc/samba/smb.conf2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
参数说明
ubuntu22-share-folder: 共享名称,可以自定义path: 共享目录路径,需与前面创建的目录一致valid users: 允许访问的用户,需与当前登录用户一致write list: 允许写入的用户,需与当前登录用户一致admin users: 管理员用户,需与当前登录用户一致create mask: 创建文件的权限掩码,一般设置为0755directory mode: 创建目录的权限掩码,一般设置为0755writable: 是否允许写入,设置为yes允许写入read only: 是否只读,设置为No允许读写browsable: 是否允许浏览,设置为yes允许浏览public: 是否允许公共访问,设置为yes允许公共访问comment: 共享的描述信息,可以自定义
如果不放心,可以使用 cat /etc/samba/smb.conf 命令查看配置文件内容,确认配置已经写入成功。
设置 Samba 用户密码
为当前用户设置 Samba 访问密码:
sudo smbpasswd -a lckfb我们输入两次密码(可以与登录密码相同),完成后会看到Added user的提示:
之后我们在Windows中映射文件夹登录的用户名就是lckfb,密码就是刚才设置的密码。
都完成之后,我们重启 Samba 服务使配置生效:
sudo systemctl restart smbd在 Windows 映射网络驱动器
我们打开 Windows 此电脑,右键点击 网络,选择 映射网络驱动器:
选择一个驱动器盘符,然后在文件夹栏中输入 \\虚拟机IP地址\虚拟机samba共享名称,例如:
虚拟机samba共享名称是我们前面配置
/etc/samba/smb.conf的[ubuntu22-share-folder],虚拟机IP地址可以通过ip addr命令查看。
之后会让我们输入用户名和密码,我们输入前面设置的samba用户名和samba密码即可。
就会打开这样的窗口,说明映射成功:
测试
我们在Windows中的映射盘符中创建一个测试文件,并且写入一些内容:
然后我们回到Ubuntu虚拟机中,进入samba共享目录,查看是否能看到刚才创建的测试文件:
至此,我们的Samba搭建完成,可以愉快地在Windows和Ubuntu虚拟机之间传输文件了!
注意事项与常见问题
- 防火墙设置: 确保 Ubuntu 虚拟机的防火墙允许 Samba 相关端口(如 137-139, 445)的访问,否则 Windows 可能无法连接到共享。
- 权限问题: Samba 共享目录的权限设置要正确,确保 Windows 用户有读写权限,否则可能无法访问或修改文件。
- 网络配置: 虚拟机网络模式建议使用“桥接模式”,确保虚拟机和宿主机在同一局域网内,方便访问。
- Samba 服务状态: 如果无法访问共享,检查 Samba 服务是否正在运行,可以使用
sudo systemctl status smbd查看状态。 - 用户名密码: 连接 Samba 共享时需要使用正确的用户名和密码,确保在 Samba 配置中添加了相应的用户。
使用apt install时lock-frontend错误
如果在安装Samba时遇到Could not get lock /var/lib/dpkg/lock-frontend错误,说明有其他的包管理进程正在运行。
常见的办法是去休息一下,一会回来继续即可,如果非常着急,可以尝试以下方法解决(杀死进程):
sudo kill -9 2277