166 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
=================================================================
 | 
						|
Test Suite for Bind Mount and Shared Subtree Features in the VFS:
 | 
						|
=================================================================
 | 
						|
Author: Avantika Mathur
 | 
						|
Date: September 16, 2005
 | 
						|
Last update: March 18th, 2008 (by Matt Helsley)
 | 
						|
 | 
						|
About:
 | 
						|
------
 | 
						|
These tests exercise the Linux Kernel's bind mount and shared subtree
 | 
						|
capabilities. With it administrators may use clear semantics to manage
 | 
						|
complex mount trees on a system.
 | 
						|
 | 
						|
Bind mount simply allows administrators to make a directory appear in
 | 
						|
two places at once -- somewhat like hard links for files:
 | 
						|
 | 
						|
# mkdir mnt mnt2
 | 
						|
# mount --bind mnt mnt2
 | 
						|
# touch mnt/a
 | 
						|
# ls mnt2
 | 
						|
a
 | 
						|
 | 
						|
Note that bind mounts are not recursive. To get a recursive bind mount
 | 
						|
use --rbind.
 | 
						|
 | 
						|
Another limitation of simple bind mounts is they cannot propagate future binds:
 | 
						|
 | 
						|
# mkdir mnt mnt2
 | 
						|
# mount --bind mnt mnt2
 | 
						|
# touch mnt/a
 | 
						|
# mkdir mnt/foo
 | 
						|
# ls mnt2
 | 
						|
a foo
 | 
						|
# mkdir sub
 | 
						|
# touch sub/b
 | 
						|
# mount --bind sub /mnt/foo
 | 
						|
# ls mnt/foo
 | 
						|
b
 | 
						|
# ls mnt2/foo
 | 
						|
 | 
						|
mnt2/foo appears to be empty because the second bind mount did not propagate
 | 
						|
to mnt2. Shared subtrees allow propagation whereas bind mounts do not.
 | 
						|
To enable full administrator control of propagation there are several kinds of
 | 
						|
subtrees:
 | 
						|
	private		[default -- this is a "normal" mount]
 | 
						|
	shared		[propagation goes both ways]
 | 
						|
	slave		[propagation goes one way]
 | 
						|
	unbindable	[cannot --bind and hence cannot share]
 | 
						|
 | 
						|
For further details on these types of subtrees please see your kernel source's
 | 
						|
Documentation/filesystems/sharedsubtree.txt file.
 | 
						|
 | 
						|
Building:
 | 
						|
---------
 | 
						|
Uses GNU Make. In the root directory type:
 | 
						|
make
 | 
						|
 | 
						|
Installing:
 | 
						|
-----------
 | 
						|
Type:
 | 
						|
make install
 | 
						|
 | 
						|
Cleaning:
 | 
						|
---------
 | 
						|
Type:
 | 
						|
make clean
 | 
						|
 | 
						|
Running:
 | 
						|
--------
 | 
						|
run LTPROOT/testscripts/test_fs_bind.sh
 | 
						|
 | 
						|
 | 
						|
Testcases:
 | 
						|
----------
 | 
						|
There are multiple testcases testing in each of the following categories,
 | 
						|
testing functionality of different types of mounts, different combinations,
 | 
						|
etc:
 | 
						|
-- bind
 | 
						|
-- rbind
 | 
						|
-- move
 | 
						|
-- regression tests
 | 
						|
-- clone namespace (currently not run)
 | 
						|
 | 
						|
 | 
						|
Directory Structure:
 | 
						|
--------------------
 | 
						|
In the root directory of the suite there are scripts to execute the whole test suite. Logged results are stored in LTPROOT/results/fs_bind. PASS/FAIL
 | 
						|
indications are passed to the LTP API and logged in the results directory too.
 | 
						|
 | 
						|
Basic tests of bind and move mounts are part of the test_fs_bind.sh test
 | 
						|
script itself. These are prerequisites for the more the complicated tests.
 | 
						|
The bind, rbind, and move directories contain tests for bind, rbind, move in
 | 
						|
combination with the various kinds of subtrees. The regression and cloneNS
 | 
						|
directories perform basic regression tests and combine some of the tests with
 | 
						|
mount namespaces respectively.
 | 
						|
 | 
						|
The bin directory contains scripts used by each of the testcases for
 | 
						|
common setup, creating, and comparing mounts.
 | 
						|
 | 
						|
Running the Test Suite:
 | 
						|
-----------------------
 | 
						|
To run the entire testsuite run:
 | 
						|
test_fs_bind.sh
 | 
						|
 | 
						|
Log directories where the results are stored in LTPROOT/results/fs_bind
 | 
						|
 | 
						|
Reading the Test Suite Results:
 | 
						|
-------------------------------
 | 
						|
Test suite results are logged, by default, in the LTPROOT/results/fs_bind
 | 
						|
directory. Its structure is:
 | 
						|
fs_bind-\
 | 
						|
	|-> errors		 (stderr of main test suite script itself)
 | 
						|
	|-> summary		 (stdout of main test suite script itself)
 | 
						|
	|-move--\
 | 
						|
	|	|->test01-\	(logs of test01)
 | 
						|
	|	|	  |-> log		(stdout)
 | 
						|
	|	|	  |-> err		(stderr)
 | 
						|
	|	|	  |-> mtab.before
 | 
						|
	|	|	  |-> mtab.after
 | 
						|
	|	|	  |-> proc_mounts.before
 | 
						|
	|	|	  |-> proc_mounts.after
 | 
						|
	|	|	  |-> files.before	(files  before running)
 | 
						|
	|	|	  |-> dirs.before	(dirs   before running)
 | 
						|
	|	|	  |-> files.after	(files  after  running)
 | 
						|
	|	|	  \-> dirs.after	(dirs   after  running)
 | 
						|
	|	|->test02-\
 | 
						|
	|	|	  |
 | 
						|
	|	...	  ...
 | 
						|
	|-rbind--\
 | 
						|
	|        |-->
 | 
						|
	...       ...
 | 
						|
 | 
						|
An testXX/err file will only be left for those tests that had errors and
 | 
						|
stderr was non-empty. mounts.*, files.*, and dirs.* files will be left for
 | 
						|
tests that appear to have broken cleanup sections. The test_fs_bind.sh
 | 
						|
script robustly handles cleanup so, unless the tests are run individually, this
 | 
						|
is not an issue that prevents testing from completing successfully nor does it
 | 
						|
interfere with test results.
 | 
						|
 | 
						|
These files make it easy to determine what happened during a given test.
 | 
						|
It's easy to see which tests need to be debugged and which do not. It also
 | 
						|
makes it easy to aggregate output or trace sandbox dirtying from test to test.
 | 
						|
 | 
						|
Running individual Tests:
 | 
						|
-------------------------
 | 
						|
Currently tests cannot be run individually because there are several important
 | 
						|
LTP environment dependencies. Some of them are documented below:
 | 
						|
	LTP test script environment variables:
 | 
						|
		LTPROOT
 | 
						|
		TCID
 | 
						|
		TST_TOTAL
 | 
						|
		TST_COUNT
 | 
						|
	LTP commands/functions:
 | 
						|
		tst_resm
 | 
						|
		tst_brkm
 | 
						|
		tst_exit
 | 
						|
	LTP contents:
 | 
						|
		LTPROOT/testcases/bin
 | 
						|
 | 
						|
It's important to note that the individual test scripts use the current working
 | 
						|
directory extensively but never exit it. This may allow the tests to be run
 | 
						|
individually once the above LTP environment dependencies are resolved.
 | 
						|
Lastly none of the logging or debugging information will appear in the
 | 
						|
LTPROOT/results/fs_bind directory when tests are invoked individually since
 | 
						|
those are collected by the test_fs_bind.sh script.
 |