Currently we use "\b" (word boundary) as the delimiter for ro option,
which is not correct. For mount options like
"defaults,errors=remount-ro" the ro on the tail will also be replaced
and result in an invalid mount option.
So we use a more strict logic on detecting ro mount option. It should
either starts with "," or "^" (begin of line) and ends with "," or "$"
(end of line), and keep the delimiter untouched. This should ensure
only valid mount option got detected and replaced.
This passed following tests:
defaults,ro,noauto,errors=remount-ro,nobootwait,nofail => defaults,rw,errors=remount-ro,
defaults,errors=remount-ro => defaults,errors=remount-ro
defaults,ro,relatime => defaults,rw,relatime
defaults,ro => defaults,rw
Signed-off-by: Kairui Song <kasong(a)redhat.com>
---
mkdumprd | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/mkdumprd b/mkdumprd
index de9ca48..6fc68fe 100644
--- a/mkdumprd
+++ b/mkdumprd
@@ -106,14 +106,14 @@ to_mount() {
_options=$(echo $_options | sed 's/,clientaddr=[^,]*//')
fi
fi
+ # mount fs target as rw in 2nd kernel
+ _options=$(echo $_options | sed 's/\(^\|,\)ro\($\|,\)/\1rw\2/g')
# with 'noauto' in fstab nfs and non-root disk mount will fail in 2nd
# kernel, filter it out here.
- _options=$(echo $_options | sed 's/\bnoauto\b//')
- #mount fs target as rw in 2nd kernel
- _options=$(echo $_options | sed 's/\bro\b/rw/')
+ _options=$(echo $_options | sed 's/\(^\|,\)noauto\($\|,\)/\1/g')
# drop nofail or nobootwait
- _options=$(echo $_options | sed 's/\bnofail\b//')
- _options=$(echo $_options | sed 's/\bnobootwait\b//')
+ _options=$(echo $_options | sed 's/\(^\|,\)nofail\($\|,\)/\1/g')
+ _options=$(echo $_options | sed 's/\(^\|,\)nobootwait\($\|,\)/\1/g')
_mntopts="$_target $_fstype $_options"
#for non-nfs _dev converting to use udev persistent name
--
2.20.1