cifs: Add support for root file systems
Introduce a new CONFIG_CIFS_ROOT option to handle root file systems over a SMB share. In order to mount the root file system during the init process, make cifs.ko perform non-blocking socket operations while mounting and accessing it. Cc: Steve French <smfrench@gmail.com> Reviewed-by: Aurelien Aptel <aaptel@suse.com> Signed-off-by: Paulo Alcantara (SUSE) <paulo@paulo.ac> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:

committed by
Steve French

parent
0892ba693f
commit
8eecd1c2e5
97
Documentation/filesystems/cifs/cifsroot.txt
Normal file
97
Documentation/filesystems/cifs/cifsroot.txt
Normal file
@@ -0,0 +1,97 @@
|
||||
Mounting root file system via SMB (cifs.ko)
|
||||
===========================================
|
||||
|
||||
Written 2019 by Paulo Alcantara <palcantara@suse.de>
|
||||
Written 2019 by Aurelien Aptel <aaptel@suse.com>
|
||||
|
||||
The CONFIG_CIFS_ROOT option enables experimental root file system
|
||||
support over the SMB protocol via cifs.ko.
|
||||
|
||||
It introduces a new kernel command-line option called 'cifsroot='
|
||||
which will tell the kernel to mount the root file system over the
|
||||
network by utilizing SMB or CIFS protocol.
|
||||
|
||||
In order to mount, the network stack will also need to be set up by
|
||||
using 'ip=' config option. For more details, see
|
||||
Documentation/filesystems/nfs/nfsroot.txt.
|
||||
|
||||
A CIFS root mount currently requires the use of SMB1+UNIX Extensions
|
||||
which is only supported by the Samba server. SMB1 is the older
|
||||
deprecated version of the protocol but it has been extended to support
|
||||
POSIX features (See [1]). The equivalent extensions for the newer
|
||||
recommended version of the protocol (SMB3) have not been fully
|
||||
implemented yet which means SMB3 doesn't support some required POSIX
|
||||
file system objects (e.g. block devices, pipes, sockets).
|
||||
|
||||
As a result, a CIFS root will default to SMB1 for now but the version
|
||||
to use can nonetheless be changed via the 'vers=' mount option. This
|
||||
default will change once the SMB3 POSIX extensions are fully
|
||||
implemented.
|
||||
|
||||
Server configuration
|
||||
====================
|
||||
|
||||
To enable SMB1+UNIX extensions you will need to set these global
|
||||
settings in Samba smb.conf:
|
||||
|
||||
[global]
|
||||
server min protocol = NT1
|
||||
unix extension = yes # default
|
||||
|
||||
Kernel command line
|
||||
===================
|
||||
|
||||
root=/dev/cifs
|
||||
|
||||
This is just a virtual device that basically tells the kernel to mount
|
||||
the root file system via SMB protocol.
|
||||
|
||||
cifsroot=//<server-ip>/<share>[,options]
|
||||
|
||||
Enables the kernel to mount the root file system via SMB that are
|
||||
located in the <server-ip> and <share> specified in this option.
|
||||
|
||||
The default mount options are set in fs/cifs/cifsroot.c.
|
||||
|
||||
server-ip
|
||||
IPv4 address of the server.
|
||||
|
||||
share
|
||||
Path to SMB share (rootfs).
|
||||
|
||||
options
|
||||
Optional mount options. For more information, see mount.cifs(8).
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
Export root file system as a Samba share in smb.conf file.
|
||||
|
||||
...
|
||||
[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
|
||||
...
|
||||
|
||||
Restart smb service.
|
||||
|
||||
# systemctl restart smb
|
||||
|
||||
Test it under QEMU on a kernel built with CONFIG_CIFS_ROOT and
|
||||
CONFIG_IP_PNP options enabled.
|
||||
|
||||
# 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"
|
||||
|
||||
|
||||
1: https://wiki.samba.org/index.php/UNIX_Extensions
|
Reference in New Issue
Block a user