* [PATCH v2 0/2] xfs_admin: unify online/offline fs label setting @ 2019-12-03 2:47 Darrick J. Wong 2019-12-03 2:47 ` [PATCH 1/2] xfs_admin: support external log devices Darrick J. Wong 2019-12-03 2:47 ` [PATCH 2/2] xfs_admin: enable online label getting and setting Darrick J. Wong 0 siblings, 2 replies; 5+ messages in thread From: Darrick J. Wong @ 2019-12-03 2:47 UTC (permalink / raw) To: sandeen, darrick.wong; +Cc: linux-xfs Hi all, Here are two fixes for the xfs_admin script. The first enables callers to pass an external log device, because xfs_db requires that to work on filesystems that do not have an internal log. The second patch enables xfs_admin to call xfs_io, which is then used to pass label get and set commands (-l and -L) to the kernel (via xfs_io) if the filesystem is mounted. v2: Improve the manpage updates. This is an extraordinary way to destroy everything. Enjoy! Comments and questions are, as always, welcome. --D ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] xfs_admin: support external log devices 2019-12-03 2:47 [PATCH v2 0/2] xfs_admin: unify online/offline fs label setting Darrick J. Wong @ 2019-12-03 2:47 ` Darrick J. Wong 2019-12-09 15:14 ` Carlos Maiolino 2019-12-03 2:47 ` [PATCH 2/2] xfs_admin: enable online label getting and setting Darrick J. Wong 1 sibling, 1 reply; 5+ messages in thread From: Darrick J. Wong @ 2019-12-03 2:47 UTC (permalink / raw) To: sandeen, darrick.wong; +Cc: linux-xfs From: Darrick J. Wong <darrick.wong@oracle.com> Add to xfs_admin the ability to pass external log devices to xfs_db. This is necessary to make changes on such filesystems. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> --- db/xfs_admin.sh | 12 ++++++++++-- man/man8/xfs_admin.8 | 14 ++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/db/xfs_admin.sh b/db/xfs_admin.sh index 305ef2b7..bd325da2 100755 --- a/db/xfs_admin.sh +++ b/db/xfs_admin.sh @@ -7,7 +7,7 @@ status=0 DB_OPTS="" REPAIR_OPTS="" -USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device" +USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device [logdev]" while getopts "efjlpuc:L:U:V" c do @@ -33,7 +33,15 @@ done set -- extra $@ shift $OPTIND case $# in - 1) if [ -n "$DB_OPTS" ] + 1|2) + # Pick up the log device, if present + if [ -n "$2" ]; then + DB_OPTS=$DB_OPTS" -l '$2'" + test -n "$REPAIR_OPTS" && \ + REPAIR_OPTS=$REPAIR_OPTS" -l '$2'" + fi + + if [ -n "$DB_OPTS" ] then eval xfs_db -x -p xfs_admin $DB_OPTS $1 status=$? diff --git a/man/man8/xfs_admin.8 b/man/man8/xfs_admin.8 index 20a114f5..8afc873f 100644 --- a/man/man8/xfs_admin.8 +++ b/man/man8/xfs_admin.8 @@ -15,6 +15,9 @@ xfs_admin \- change parameters of an XFS filesystem .I uuid ] .I device +[ +.I logdev +] .br .B xfs_admin \-V .SH DESCRIPTION @@ -31,6 +34,17 @@ A number of parameters of a mounted filesystem can be examined and modified using the .BR xfs_growfs (8) command. +.PP +The optional +.B logdev +parameter specifies the device special file where the filesystem's external +log resides. +This is required only for filesystems that use an external log. +See the +.B mkfs.xfs \-l +option, and refer to +.BR xfs (5) +for a detailed description of the XFS log. .SH OPTIONS .TP .B \-e ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] xfs_admin: support external log devices 2019-12-03 2:47 ` [PATCH 1/2] xfs_admin: support external log devices Darrick J. Wong @ 2019-12-09 15:14 ` Carlos Maiolino 0 siblings, 0 replies; 5+ messages in thread From: Carlos Maiolino @ 2019-12-09 15:14 UTC (permalink / raw) To: Darrick J. Wong; +Cc: sandeen, linux-xfs On Mon, Dec 02, 2019 at 06:47:49PM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@oracle.com> > > Add to xfs_admin the ability to pass external log devices to xfs_db. > This is necessary to make changes on such filesystems. > > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Looks good Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com> > --- > db/xfs_admin.sh | 12 ++++++++++-- > man/man8/xfs_admin.8 | 14 ++++++++++++++ > 2 files changed, 24 insertions(+), 2 deletions(-) > > > diff --git a/db/xfs_admin.sh b/db/xfs_admin.sh > index 305ef2b7..bd325da2 100755 > --- a/db/xfs_admin.sh > +++ b/db/xfs_admin.sh > @@ -7,7 +7,7 @@ > status=0 > DB_OPTS="" > REPAIR_OPTS="" > -USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device" > +USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device [logdev]" > > while getopts "efjlpuc:L:U:V" c > do > @@ -33,7 +33,15 @@ done > set -- extra $@ > shift $OPTIND > case $# in > - 1) if [ -n "$DB_OPTS" ] > + 1|2) > + # Pick up the log device, if present > + if [ -n "$2" ]; then > + DB_OPTS=$DB_OPTS" -l '$2'" > + test -n "$REPAIR_OPTS" && \ > + REPAIR_OPTS=$REPAIR_OPTS" -l '$2'" > + fi > + > + if [ -n "$DB_OPTS" ] > then > eval xfs_db -x -p xfs_admin $DB_OPTS $1 > status=$? > diff --git a/man/man8/xfs_admin.8 b/man/man8/xfs_admin.8 > index 20a114f5..8afc873f 100644 > --- a/man/man8/xfs_admin.8 > +++ b/man/man8/xfs_admin.8 > @@ -15,6 +15,9 @@ xfs_admin \- change parameters of an XFS filesystem > .I uuid > ] > .I device > +[ > +.I logdev > +] > .br > .B xfs_admin \-V > .SH DESCRIPTION > @@ -31,6 +34,17 @@ A number of parameters of a mounted filesystem can be examined > and modified using the > .BR xfs_growfs (8) > command. > +.PP > +The optional > +.B logdev > +parameter specifies the device special file where the filesystem's external > +log resides. > +This is required only for filesystems that use an external log. > +See the > +.B mkfs.xfs \-l > +option, and refer to > +.BR xfs (5) > +for a detailed description of the XFS log. > .SH OPTIONS > .TP > .B \-e > -- Carlos ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] xfs_admin: enable online label getting and setting 2019-12-03 2:47 [PATCH v2 0/2] xfs_admin: unify online/offline fs label setting Darrick J. Wong 2019-12-03 2:47 ` [PATCH 1/2] xfs_admin: support external log devices Darrick J. Wong @ 2019-12-03 2:47 ` Darrick J. Wong 2019-12-09 15:42 ` Carlos Maiolino 1 sibling, 1 reply; 5+ messages in thread From: Darrick J. Wong @ 2019-12-03 2:47 UTC (permalink / raw) To: sandeen, darrick.wong; +Cc: linux-xfs From: Darrick J. Wong <darrick.wong@oracle.com> Connect xfs_admin -L to the xfs_io label command so that we can get and set the label for a live filesystem. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> --- db/xfs_admin.sh | 42 ++++++++++++++++++++++++++++++++++++++++-- man/man8/xfs_admin.8 | 4 +++- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/db/xfs_admin.sh b/db/xfs_admin.sh index bd325da2..d18959bf 100755 --- a/db/xfs_admin.sh +++ b/db/xfs_admin.sh @@ -7,8 +7,30 @@ status=0 DB_OPTS="" REPAIR_OPTS="" +IO_OPTS="" USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device [logdev]" +# Try to find a loop device associated with a file. We only want to return +# one loopdev (multiple loop devices can attach to a single file) so we grab +# the last line and return it if it's actually a block device. +try_find_loop_dev_for_file() { + local x="$(losetup -O NAME -j "$1" 2> /dev/null | tail -n 1)" + test -b "$x" && echo "$x" +} + +# See if we can find a mount point for the argument. +find_mntpt_for_arg() { + local arg="$1" + + # See if we can map the arg to a loop device + local loopdev="$(try_find_loop_dev_for_file "${arg}")" + test -n "$loopdev" && arg="$loopdev" + + # If we find a mountpoint for the device, do a live query; + # otherwise try reading the fs with xfs_db. + findmnt -t xfs -f -n -o TARGET "${arg}" 2> /dev/null +} + while getopts "efjlpuc:L:U:V" c do case $c in @@ -16,8 +38,16 @@ do e) DB_OPTS=$DB_OPTS" -c 'version extflg'";; f) DB_OPTS=$DB_OPTS" -f";; j) DB_OPTS=$DB_OPTS" -c 'version log2'";; - l) DB_OPTS=$DB_OPTS" -r -c label";; - L) DB_OPTS=$DB_OPTS" -c 'label "$OPTARG"'";; + l) DB_OPTS=$DB_OPTS" -r -c label" + IO_OPTS=$IO_OPTS" -r -c label" + ;; + L) DB_OPTS=$DB_OPTS" -c 'label "$OPTARG"'" + if [ "$OPTARG" = "--" ]; then + IO_OPTS=$IO_OPTS" -c 'label -c'" + else + IO_OPTS=$IO_OPTS" -c 'label -s "$OPTARG"'" + fi + ;; p) DB_OPTS=$DB_OPTS" -c 'version projid32bit'";; u) DB_OPTS=$DB_OPTS" -r -c uuid";; U) DB_OPTS=$DB_OPTS" -c 'uuid "$OPTARG"'";; @@ -41,6 +71,14 @@ case $# in REPAIR_OPTS=$REPAIR_OPTS" -l '$2'" fi + # Try making the changes online, if supported + if [ -n "$IO_OPTS" ] && mntpt="$(find_mntpt_for_arg "$1")" + then + eval xfs_io -x -p xfs_admin $IO_OPTS "$mntpt" + test "$?" -eq 0 && exit 0 + fi + + # Otherwise try offline changing if [ -n "$DB_OPTS" ] then eval xfs_db -x -p xfs_admin $DB_OPTS $1 diff --git a/man/man8/xfs_admin.8 b/man/man8/xfs_admin.8 index 8afc873f..220dd803 100644 --- a/man/man8/xfs_admin.8 +++ b/man/man8/xfs_admin.8 @@ -26,7 +26,7 @@ uses the .BR xfs_db (8) command to modify various parameters of a filesystem. .PP -Devices that are mounted cannot be modified. +Devices that are mounted cannot be modified, except as noted below. Administrators must unmount filesystems before .BR xfs_admin " or " xfs_db (8) can convert parameters. @@ -67,6 +67,7 @@ log buffers). .TP .B \-l Print the current filesystem label. +This command can be run if the filesystem is mounted. .TP .B \-p Enable 32bit project identifier support (PROJID32BIT feature). @@ -102,6 +103,7 @@ The filesystem label can be cleared using the special "\c .B \-\-\c " value for .IR label . +This command can be run if the filesystem is mounted. .TP .BI \-U " uuid" Set the UUID of the filesystem to ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] xfs_admin: enable online label getting and setting 2019-12-03 2:47 ` [PATCH 2/2] xfs_admin: enable online label getting and setting Darrick J. Wong @ 2019-12-09 15:42 ` Carlos Maiolino 0 siblings, 0 replies; 5+ messages in thread From: Carlos Maiolino @ 2019-12-09 15:42 UTC (permalink / raw) To: Darrick J. Wong; +Cc: sandeen, linux-xfs On Mon, Dec 02, 2019 at 06:47:55PM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@oracle.com> > > Connect xfs_admin -L to the xfs_io label command so that we can get and > set the label for a live filesystem. > > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> > --- > db/xfs_admin.sh | 42 ++++++++++++++++++++++++++++++++++++++++-- > man/man8/xfs_admin.8 | 4 +++- > 2 files changed, 43 insertions(+), 3 deletions(-) > Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com> > > diff --git a/db/xfs_admin.sh b/db/xfs_admin.sh > index bd325da2..d18959bf 100755 > --- a/db/xfs_admin.sh > +++ b/db/xfs_admin.sh > @@ -7,8 +7,30 @@ > status=0 > DB_OPTS="" > REPAIR_OPTS="" > +IO_OPTS="" > USAGE="Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device [logdev]" > > +# Try to find a loop device associated with a file. We only want to return > +# one loopdev (multiple loop devices can attach to a single file) so we grab > +# the last line and return it if it's actually a block device. > +try_find_loop_dev_for_file() { > + local x="$(losetup -O NAME -j "$1" 2> /dev/null | tail -n 1)" > + test -b "$x" && echo "$x" > +} > + > +# See if we can find a mount point for the argument. > +find_mntpt_for_arg() { > + local arg="$1" > + > + # See if we can map the arg to a loop device > + local loopdev="$(try_find_loop_dev_for_file "${arg}")" > + test -n "$loopdev" && arg="$loopdev" > + > + # If we find a mountpoint for the device, do a live query; > + # otherwise try reading the fs with xfs_db. > + findmnt -t xfs -f -n -o TARGET "${arg}" 2> /dev/null > +} > + > while getopts "efjlpuc:L:U:V" c > do > case $c in > @@ -16,8 +38,16 @@ do > e) DB_OPTS=$DB_OPTS" -c 'version extflg'";; > f) DB_OPTS=$DB_OPTS" -f";; > j) DB_OPTS=$DB_OPTS" -c 'version log2'";; > - l) DB_OPTS=$DB_OPTS" -r -c label";; > - L) DB_OPTS=$DB_OPTS" -c 'label "$OPTARG"'";; > + l) DB_OPTS=$DB_OPTS" -r -c label" > + IO_OPTS=$IO_OPTS" -r -c label" > + ;; > + L) DB_OPTS=$DB_OPTS" -c 'label "$OPTARG"'" > + if [ "$OPTARG" = "--" ]; then > + IO_OPTS=$IO_OPTS" -c 'label -c'" > + else > + IO_OPTS=$IO_OPTS" -c 'label -s "$OPTARG"'" > + fi > + ;; > p) DB_OPTS=$DB_OPTS" -c 'version projid32bit'";; > u) DB_OPTS=$DB_OPTS" -r -c uuid";; > U) DB_OPTS=$DB_OPTS" -c 'uuid "$OPTARG"'";; > @@ -41,6 +71,14 @@ case $# in > REPAIR_OPTS=$REPAIR_OPTS" -l '$2'" > fi > > + # Try making the changes online, if supported > + if [ -n "$IO_OPTS" ] && mntpt="$(find_mntpt_for_arg "$1")" > + then > + eval xfs_io -x -p xfs_admin $IO_OPTS "$mntpt" > + test "$?" -eq 0 && exit 0 > + fi > + > + # Otherwise try offline changing > if [ -n "$DB_OPTS" ] > then > eval xfs_db -x -p xfs_admin $DB_OPTS $1 > diff --git a/man/man8/xfs_admin.8 b/man/man8/xfs_admin.8 > index 8afc873f..220dd803 100644 > --- a/man/man8/xfs_admin.8 > +++ b/man/man8/xfs_admin.8 > @@ -26,7 +26,7 @@ uses the > .BR xfs_db (8) > command to modify various parameters of a filesystem. > .PP > -Devices that are mounted cannot be modified. > +Devices that are mounted cannot be modified, except as noted below. > Administrators must unmount filesystems before > .BR xfs_admin " or " xfs_db (8) > can convert parameters. > @@ -67,6 +67,7 @@ log buffers). > .TP > .B \-l > Print the current filesystem label. > +This command can be run if the filesystem is mounted. > .TP > .B \-p > Enable 32bit project identifier support (PROJID32BIT feature). > @@ -102,6 +103,7 @@ The filesystem label can be cleared using the special "\c > .B \-\-\c > " value for > .IR label . > +This command can be run if the filesystem is mounted. > .TP > .BI \-U " uuid" > Set the UUID of the filesystem to > -- Carlos ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-12-09 15:42 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-12-03 2:47 [PATCH v2 0/2] xfs_admin: unify online/offline fs label setting Darrick J. Wong 2019-12-03 2:47 ` [PATCH 1/2] xfs_admin: support external log devices Darrick J. Wong 2019-12-09 15:14 ` Carlos Maiolino 2019-12-03 2:47 ` [PATCH 2/2] xfs_admin: enable online label getting and setting Darrick J. Wong 2019-12-09 15:42 ` Carlos Maiolino
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).