adb-remount-test: Add surgically_wipe_overlayfs & is_overlayfs_mounted util
Factor out common code to helper function. Bug: 243116800 Test: adb-remount-test Change-Id: If90e8d1a787fee2507d2b729316a67bf113a9cd8
This commit is contained in:
parent
531229c18c
commit
0331a322b0
1 changed files with 42 additions and 39 deletions
|
@ -59,6 +59,7 @@ TMPDIR=${TMPDIR:-/tmp}
|
|||
print_time=false
|
||||
start_time=`date +%s`
|
||||
ACTIVE_SLOT=
|
||||
OVERLAYFS_BACKING="cache mnt/scratch"
|
||||
|
||||
ADB_WAIT=4m
|
||||
FASTBOOT_WAIT=2m
|
||||
|
@ -788,6 +789,41 @@ skip_unrelated_mounts() {
|
|||
grep -v "[%] /\(data_mirror\|apex\|bionic\|system\|vendor\)/[^ ][^ ]*$"
|
||||
}
|
||||
|
||||
[ "USAGE: surgically_wipe_overlayfs
|
||||
|
||||
Surgically wipe any mounted overlayfs scratch files.
|
||||
|
||||
Returns: true if wiped anything" ]
|
||||
surgically_wipe_overlayfs() {
|
||||
local wiped_anything=false
|
||||
for d in ${OVERLAYFS_BACKING}; do
|
||||
if adb_su test -d "/${d}/overlay" </dev/null; then
|
||||
echo "${BLUE}[ INFO ]${NORMAL} /${d}/overlay is setup, surgically wiping" >&2
|
||||
adb_su rm -rf "/${d}/overlay" </dev/null
|
||||
wiped_anything=true
|
||||
fi
|
||||
done
|
||||
${wiped_anything}
|
||||
}
|
||||
|
||||
[ "USAGE: is_overlayfs_mounted
|
||||
|
||||
Returns: true if overlayfs is mounted" ]
|
||||
is_overlayfs_mounted() {
|
||||
local df_output=$(adb_su df -k </dev/null)
|
||||
local df_header_line=$(echo "${df_output}" | head -1)
|
||||
local overlay_mounts=$(echo "${df_output}" | tail +2 |
|
||||
skip_unrelated_mounts |
|
||||
awk '$1 == "overlay" || $6 == "/mnt/scratch"')
|
||||
if ! echo "${overlay_mounts}" | grep -q '^overlay '; then
|
||||
return 1
|
||||
fi >/dev/null 2>/dev/null
|
||||
( echo "${df_header_line}"
|
||||
echo "${overlay_mounts}"
|
||||
) >&2
|
||||
return 0
|
||||
}
|
||||
|
||||
##
|
||||
## MAINLINE
|
||||
##
|
||||
|
@ -975,7 +1011,6 @@ if ! wait_for_screen && ${screen_wait}; then
|
|||
fi
|
||||
|
||||
# Can we test remount -R command?
|
||||
OVERLAYFS_BACKING="cache mnt/scratch"
|
||||
overlayfs_supported=true
|
||||
if [ "orange" != "`get_property ro.boot.verifiedbootstate`" -o \
|
||||
"2" != "`get_property partition.system.verified`" ]; then
|
||||
|
@ -986,14 +1021,7 @@ if [ "orange" != "`get_property ro.boot.verifiedbootstate`" -o \
|
|||
adb_wait ${ADB_WAIT} ||
|
||||
true
|
||||
if inAdb; then
|
||||
reboot=false
|
||||
for d in ${OVERLAYFS_BACKING}; do
|
||||
if adb_test -d /${d}/overlay; then
|
||||
adb_su rm -rf /${d}/overlay </dev/null
|
||||
reboot=true
|
||||
fi
|
||||
done
|
||||
if ${reboot}; then
|
||||
if surgically_wipe_overlayfs; then
|
||||
adb_reboot &&
|
||||
adb_wait ${ADB_WAIT}
|
||||
fi
|
||||
|
@ -1074,16 +1102,7 @@ echo "${GREEN}[ RUN ]${NORMAL} Checking current overlayfs status" >&2
|
|||
# devices that remount the physical content rather than overlayfs.
|
||||
# So lets do our best to surgically wipe the overlayfs state without
|
||||
# having to go through enable-verity transition.
|
||||
reboot=false
|
||||
for d in ${OVERLAYFS_BACKING}; do
|
||||
if adb_test -d /${d}/overlay; then
|
||||
echo "${YELLOW}[ WARNING ]${NORMAL} /${d}/overlay is setup, surgically wiping" >&2
|
||||
adb_sh rm -rf /${d}/overlay </dev/null ||
|
||||
die "/${d}/overlay wipe"
|
||||
reboot=true
|
||||
fi
|
||||
done
|
||||
if ${reboot}; then
|
||||
if surgically_wipe_overlayfs; then
|
||||
echo "${YELLOW}[ WARNING ]${NORMAL} rebooting before test" >&2
|
||||
adb_reboot &&
|
||||
adb_wait ${ADB_WAIT} ||
|
||||
|
@ -1091,14 +1110,10 @@ if ${reboot}; then
|
|||
adb_root ||
|
||||
die "lost device after elevation to root after wipe `usb_status`"
|
||||
fi
|
||||
D=`adb_sh df -k </dev/null` &&
|
||||
H=`echo "${D}" | head -1` &&
|
||||
D=`echo "${D}" | grep -v " /vendor/..*$" | grep "^overlay "` &&
|
||||
( echo "${H}" &&
|
||||
echo "${D}"
|
||||
) >&2 &&
|
||||
is_overlayfs_mounted &&
|
||||
die "overlay takeover unexpected at this phase"
|
||||
echo "${GREEN}[ OK ]${NORMAL} no overlay present before setup" >&2
|
||||
|
||||
overlayfs_needed=true
|
||||
D=`adb_sh cat /proc/mounts </dev/null |
|
||||
skip_administrative_mounts data`
|
||||
|
@ -1153,14 +1168,7 @@ adb_wait "${ADB_WAIT}" &&
|
|||
die "lost device after adb shell su root disable-verity -R $(usb_status)"
|
||||
|
||||
if ${overlayfs_needed}; then
|
||||
has_overlayfs_setup=false
|
||||
for d in ${OVERLAYFS_BACKING}; do
|
||||
if adb_test -d "/${d}/overlay"; then
|
||||
has_overlayfs_setup=true
|
||||
echo "${GREEN}[ OK ]${NORMAL} /${d}/overlay is setup" >&2
|
||||
fi
|
||||
done
|
||||
if ! ${has_overlayfs_setup}; then
|
||||
if ! is_overlayfs_mounted; then
|
||||
die "no overlay being setup after disable-verity -R"
|
||||
fi
|
||||
fi
|
||||
|
@ -1630,12 +1638,7 @@ echo "${GREEN}[ OK ]${NORMAL} remount command works from setup" >&2
|
|||
# Prerequisite is an overlayfs deconstructed device but with verity disabled.
|
||||
# This also saves a lot of 'noise' from the command doing a mkfs on backing
|
||||
# storage and all the related tuning and adjustment.
|
||||
for d in ${OVERLAYFS_BACKING}; do
|
||||
if adb_test -d /${d}/overlay; then
|
||||
adb_su rm -rf /${d}/overlay </dev/null ||
|
||||
die "/${d}/overlay wipe"
|
||||
fi
|
||||
done
|
||||
surgically_wipe_overlayfs || true
|
||||
adb_reboot &&
|
||||
adb_wait ${ADB_WAIT} ||
|
||||
fixup_from_fastboot ||
|
||||
|
|
Loading…
Reference in a new issue