106 lines
2.9 KiB
ReStructuredText
106 lines
2.9 KiB
ReStructuredText
|
.. SPDX-License-Identifier: GPL-2.0
|
||
|
|
||
|
===========================================
|
||
|
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/admin-guide/nfs/nfsroot.rst.
|
||
|
|
||
|
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/smb/client/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
|