| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- .. 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
|