xref: /freebsd/tools/test/stress2/misc/unionfs4.sh (revision 4d846d26)
1bab40683SPeter Holm#!/bin/sh
2bab40683SPeter Holm
3bab40683SPeter Holm#
44d846d26SWarner Losh# SPDX-License-Identifier: BSD-2-Clause
5bab40683SPeter Holm#
6bab40683SPeter Holm# Copyright (c) 2021 Peter Holm
7bab40683SPeter Holm#
8bab40683SPeter Holm# Redistribution and use in source and binary forms, with or without
9bab40683SPeter Holm# modification, are permitted provided that the following conditions
10bab40683SPeter Holm# are met:
11bab40683SPeter Holm# 1. Redistributions of source code must retain the above copyright
12bab40683SPeter Holm#    notice, this list of conditions and the following disclaimer.
13bab40683SPeter Holm# 2. Redistributions in binary form must reproduce the above copyright
14bab40683SPeter Holm#    notice, this list of conditions and the following disclaimer in the
15bab40683SPeter Holm#    documentation and/or other materials provided with the distribution.
16bab40683SPeter Holm#
17bab40683SPeter Holm# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18bab40683SPeter Holm# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19bab40683SPeter Holm# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20bab40683SPeter Holm# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21bab40683SPeter Holm# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22bab40683SPeter Holm# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23bab40683SPeter Holm# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24bab40683SPeter Holm# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25bab40683SPeter Holm# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26bab40683SPeter Holm# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27bab40683SPeter Holm# SUCH DAMAGE.
28bab40683SPeter Holm#
29bab40683SPeter Holm
30bab40683SPeter Holm# "mkdir: mkdir(d2), level 2. mkdir.c:96: No such file or directory" seen
31bab40683SPeter Holm# with a non debug kernel.
32bab40683SPeter Holm
33bab40683SPeter Holm[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
34bab40683SPeter Holm. ../default.cfg
35bab40683SPeter Holm
36bab40683SPeter Holm# unionfs usage example from the man page:
37bab40683SPeter Holm#	   mount -t cd9660 -o ro /dev/cd0 /usr/src
38bab40683SPeter Holm#	   mount -t unionfs -o noatime /var/obj	/usr/src
39bab40683SPeter Holm
40bab40683SPeter Holmmd1=$mdstart
41bab40683SPeter Holmmd2=$((md1 + 1))
42bab40683SPeter Holmmp1=/mnt$md1
43bab40683SPeter Holmmp2=/mnt$md2
44bab40683SPeter Holmmkdir -p $mp1 $mp2
45bab40683SPeter Holmset -e
46bab40683SPeter Holmfor i in $mp1 $mp2; do
47bab40683SPeter Holm	mount | grep -q "on $i " && umount -f $i
48bab40683SPeter Holmdone
49bab40683SPeter Holmfor i in $md1 $md2; do
50bab40683SPeter Holm	mdconfig -l | grep -q md$i && mdconfig -d -u $i
51bab40683SPeter Holmdone
52bab40683SPeter Holm
53bab40683SPeter Holmmdconfig -a -t swap -s 2g -u $md1
54bab40683SPeter Holmmdconfig -a -t swap -s 2g -u $md2
55b274854dSPeter Holm[ "$newfs_flags" = "-U" ] &&
56b274854dSPeter Holm    newfs_flags="-j"	# "out of inodes" work around
57bab40683SPeter Holmnewfs $newfs_flags -n md$md1 > /dev/null
58bab40683SPeter Holmnewfs $newfs_flags -n md$md2 > /dev/null
59bab40683SPeter Holmmount /dev/md$md1 $mp1
60bab40683SPeter Holmmount /dev/md$md2 $mp2
61bab40683SPeter Holm
62bab40683SPeter Holmmount -t unionfs -o noatime $mp1 $mp2
63bab40683SPeter Holmset +e
64bab40683SPeter Holmmount | grep -E "$mp1|$mp2"
65bab40683SPeter Holm
66bab40683SPeter Holmexport RUNDIR=$mp2/stressX
67bab40683SPeter Holmexport runRUNTIME=2m
68bab40683SPeter Holm
69bab40683SPeter Holm(cd ..; ./run.sh marcus.cfg)
70bab40683SPeter Holm
71bab40683SPeter Holm../tools/killall.sh
729e8fbb95SPeter Holmwhile mount | grep -Eq "on $mp2 .*unionfs"; do
739e8fbb95SPeter Holm	umount $mp2 && break
749e8fbb95SPeter Holm	sleep 5
759e8fbb95SPeter Holmdone
76bab40683SPeter Holmumount $mp2
77bab40683SPeter Holmn=`find $mp1/stressX | wc -l`
78bab40683SPeter Holm[ $n -eq 1 ] && s=0 || { find $mp1/stressX -ls | head -12; s=1; }
79bab40683SPeter Holmumount $mp1
80bab40683SPeter Holmmdconfig -d -u $md2
81bab40683SPeter Holmmdconfig -d -u $md1
82bab40683SPeter Holmexit $s
83