透過 SMB (cifs.ko) 掛載根檔案系統¶
由 Paulo Alcantara 於 2019 年編寫 <palcantara@suse.de>
由 Aurelien Aptel 於 2019 年編寫 <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)。
示例¶
將根檔案系統作為 Samba 共享匯出到 smb.conf 檔案中
...
[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"