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/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
 |