You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
5.1 KiB
166 lines
5.1 KiB
=================================================================
|
|
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.
|