通过 SMB (cifs.ko) 挂载根文件系统¶
2019 年由 Paulo Alcantara <palcantara@suse.de> 编写
2019 年由 Aurelien Aptel <aaptel@suse.com> 编写
CONFIG_CIFS_ROOT 选项通过 cifs.ko 启用通过 SMB 协议进行实验性的根文件系统支持。
它引入了一个新的内核命令行选项,称为 'cifsroot=',它将告诉内核通过使用 SMB 或 CIFS 协议在网络上挂载根文件系统。
为了挂载,还需要使用 'ip=' 配置选项来设置网络堆栈。有关更多详细信息,请参见 通过 NFS 挂载根文件系统 (nfsroot)。
CIFS 根挂载目前需要使用 SMB1+UNIX 扩展,这仅由 Samba 服务器支持。SMB1 是该协议较旧的已弃用版本,但它已扩展为支持 POSIX 功能(请参见 [1])。对于较新的推荐协议版本 (SMB3) 的等效扩展尚未完全实现,这意味着 SMB3 不支持某些必需的 POSIX 文件系统对象(例如,块设备、管道、套接字)。
因此,CIFS 根现在将默认为 SMB1,但仍可以通过 'vers=' 挂载选项更改要使用的版本。一旦 SMB3 POSIX 扩展完全实现,此默认值将更改。
服务器配置¶
要启用 SMB1+UNIX 扩展,您需要在 Samba smb.conf 中设置这些全局设置
[global]
server min protocol = NT1
unix extension = yes # default
内核命令行¶
root=/dev/cifs
这只是一个虚拟设备,基本上告诉内核通过 SMB 协议挂载根文件系统。
cifsroot=//<server-ip>/<share>[,options]
使内核能够通过 SMB 挂载位于此选项中指定的 <server-ip> 和 <share> 中的根文件系统。
默认挂载选项在 fs/smb/client/cifsroot.c 中设置。
- server-ip
服务器的 IPv4 地址。
- share
SMB 共享(rootfs)的路径。
- options
可选的挂载选项。有关更多信息,请参见 mount.cifs(8)。
示例¶
在 smb.conf 文件中将根文件系统导出为 Samba 共享
...
[linux]
path = /path/to/rootfs
read only = no
guest ok = yes
force user = root
force group = root
browseable = yes
writeable = yes
admin users = root
public = yes
create mask = 0777
directory mask = 0777
...
重启 smb 服务
# systemctl restart smb
在启用了 CONFIG_CIFS_ROOT 和 CONFIG_IP_PNP 选项的内核上,在 QEMU 下对其进行测试
# qemu-system-x86_64 -enable-kvm -cpu host -m 1024 \
-kernel /path/to/linux/arch/x86/boot/bzImage -nographic \
-append "root=/dev/cifs rw ip=dhcp cifsroot=//10.0.2.2/linux,username=foo,password=bar console=ttyS0 3"