Accepting request 294273 from home:zhonglidong:branches:Base:System
fate#318413 OBS-URL: https://build.opensuse.org/request/show/294273 OBS-URL: https://build.opensuse.org/package/show/Base:System/lvm2?expand=0&rev=128
This commit is contained in:
parent
4d51f9dd2a
commit
c1e9200334
204
fsadm-add-support-for-btrfs.patch
Normal file
204
fsadm-add-support-for-btrfs.patch
Normal file
@ -0,0 +1,204 @@
|
||||
From 67a7538475e9e292103a80fed8cff8ab380314a2 Mon Sep 17 00:00:00 2001
|
||||
From: Lidong Zhong <lzhong@suse.com>
|
||||
Date: Fri, 6 Mar 2015 18:35:04 +0800
|
||||
Subject: [Patch v2] fsadm: add support for btrfs
|
||||
|
||||
Check: mount the device first and then run`btrfs filesystem scrub start
|
||||
-B` command
|
||||
Reisze: find the mount point first and resize the filesystem after get
|
||||
the device id since there are maybe several devices underneath btrfs
|
||||
filesystem
|
||||
|
||||
---
|
||||
Hi David,
|
||||
|
||||
This is the patch I sent to upstream. It works fine based on our test.
|
||||
Please shed your light and thank you for taking time to review.
|
||||
|
||||
Regards,
|
||||
Lidong
|
||||
|
||||
scripts/fsadm.sh | 104 ++++++++++++++++++++++++++++++++++++++++++++++---------
|
||||
1 file changed, 88 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/scripts/fsadm.sh b/scripts/fsadm.sh
|
||||
index f4ea796..765f9dc 100755
|
||||
--- a/scripts/fsadm.sh
|
||||
+++ b/scripts/fsadm.sh
|
||||
@@ -22,6 +22,7 @@
|
||||
# ext2/ext3/ext4: resize2fs, tune2fs
|
||||
# reiserfs: resize_reiserfs, reiserfstune
|
||||
# xfs: xfs_growfs, xfs_info
|
||||
+# btrfs: btrfs
|
||||
#
|
||||
# Return values:
|
||||
# 0 success
|
||||
@@ -56,6 +57,7 @@ FSCK=fsck
|
||||
XFS_CHECK=xfs_check
|
||||
# XFS_REPAIR -n is used when XFS_CHECK is not found
|
||||
XFS_REPAIR=xfs_repair
|
||||
+BTRFS=btrfs
|
||||
|
||||
# user may override lvm location by setting LVM_BINARY
|
||||
LVM=${LVM_BINARY:-lvm}
|
||||
@@ -75,6 +77,9 @@ BLOCKCOUNT=
|
||||
MOUNTPOINT=
|
||||
MOUNTED=
|
||||
REMOUNT=
|
||||
+FINDMNT=
|
||||
+UUID=
|
||||
+BTRFS_DEVID=
|
||||
PROCMOUNTS="/proc/mounts"
|
||||
NULL="$DM_DEV_DIR/null"
|
||||
|
||||
@@ -147,7 +152,7 @@ cleanup() {
|
||||
export _FSADM_YES _FSADM_EXTOFF
|
||||
unset FSADM_RUNNING
|
||||
test -n "$LVM_BINARY" && PATH=$_SAVEPATH
|
||||
- dry exec "$LVM" lvresize $VERB $FORCE -r -L${NEWSIZE}b "$VOLUME_ORIG"
|
||||
+ dry exec "$LVM" lvresize $VERB $FORCE -r -L${NEWSIZE}b "$VOLUME"
|
||||
fi
|
||||
|
||||
# error exit status for break
|
||||
@@ -198,27 +203,62 @@ detect_fs() {
|
||||
verbose "\"$FSTYPE\" filesystem found on \"$VOLUME\""
|
||||
}
|
||||
|
||||
+check_findmnt() {
|
||||
+ FINDMNT=$(which findmnt 2>$NULL)
|
||||
+ test -n "$FINDMNT"
|
||||
+}
|
||||
+
|
||||
+detect_fs_uuid() {
|
||||
+ UUID=$($BLKID -o value -c $NULL -s UUID "$VOLUME" 2>$NULL)
|
||||
+ test -n "$UUID"
|
||||
+}
|
||||
+
|
||||
+#find the mountpoint of this device
|
||||
+detect_mounted_findmnt() {
|
||||
+ local TMP
|
||||
+ local STR_IFS=$IFS
|
||||
+ IFS=" $(echo -n -e '\t')"
|
||||
+
|
||||
+ read -r TMP<<EOF
|
||||
+$($FINDMNT -nuP -o TARGET,UUID 2>$NULL | $GREP "$UUID")
|
||||
+EOF
|
||||
+
|
||||
+ TMP=${TMP##*TARGET=\"}
|
||||
+ TMP=${TMP%%\"*}
|
||||
+ MOUNTED=$TMP
|
||||
+ test -n "$MOUNTED"
|
||||
+
|
||||
+ IFS=$STR_IFS
|
||||
+}
|
||||
+
|
||||
# check if the given device is already mounted and where
|
||||
# FIXME: resolve swap usage and device stacking
|
||||
detect_mounted() {
|
||||
- test -e "$PROCMOUNTS" || error "Cannot detect mounted device \"$VOLUME\""
|
||||
+ if test "$FSTYPE" = "btrfs" ; then
|
||||
+ check_findmnt || error "Need 'findmnt' utility to work with btrfs filesystem"
|
||||
+ detect_fs_uuid || verbose "Can't get fs UUID from \"$VOLUME\" volume"
|
||||
+ detect_mounted_findmnt
|
||||
+
|
||||
+ else
|
||||
+ test -e "$PROCMOUNTS" || error "Cannot detect mounted device \"$VOLUME\""
|
||||
|
||||
- MOUNTED=$("$GREP" "^$VOLUME[ \t]" "$PROCMOUNTS")
|
||||
+ MOUNTED=$("$GREP" "^$VOLUME[ \t]" "$PROCMOUNTS")
|
||||
|
||||
- # for empty string try again with real volume name
|
||||
- test -z "$MOUNTED" && MOUNTED=$("$GREP" "^$RVOLUME[ \t]" "$PROCMOUNTS")
|
||||
+ # for empty string try again with real volume name
|
||||
+ test -z "$MOUNTED" && MOUNTED=$("$GREP" "^$RVOLUME[ \t]" "$PROCMOUNTS")
|
||||
|
||||
- # cut device name prefix and trim everything past mountpoint
|
||||
- # echo translates \040 to spaces
|
||||
- MOUNTED=${MOUNTED#* }
|
||||
- MOUNTED=$(echo -n -e ${MOUNTED%% *})
|
||||
+ # cut device name prefix and trim everything past mountpoint
|
||||
+ # echo translates \040 to spaces
|
||||
+ MOUNTED=${MOUNTED#* }
|
||||
+ MOUNTED=$(echo -n -e ${MOUNTED%% *})
|
||||
|
||||
- # for systems with different device names - check also mount output
|
||||
- if test -z "$MOUNTED" ; then
|
||||
- MOUNTED=$(LC_ALL=C "$MOUNT" | "$GREP" "^$VOLUME[ \t]")
|
||||
- test -z "$MOUNTED" && MOUNTED=$(LC_ALL=C "$MOUNT" | "$GREP" "^$RVOLUME[ \t]")
|
||||
- MOUNTED=${MOUNTED##* on }
|
||||
- MOUNTED=${MOUNTED% type *} # allow type in the mount name
|
||||
+ # for systems with different device names - check also mount output
|
||||
+ if test -z "$MOUNTED" ; then
|
||||
+ MOUNTED=$(LC_ALL=C "$MOUNT" | "$GREP" "^$VOLUME[ \t]")
|
||||
+ test -z "$MOUNTED" && MOUNTED=$(LC_ALL=C "$MOUNT" | "$GREP" "^$RVOLUME[ \t]")
|
||||
+ MOUNTED=${MOUNTED##* on }
|
||||
+ MOUNTED=${MOUNTED% type *} # allow type in the mount name
|
||||
+ fi
|
||||
fi
|
||||
|
||||
test -n "$MOUNTED"
|
||||
@@ -368,6 +408,31 @@ resize_xfs() {
|
||||
fi
|
||||
}
|
||||
|
||||
+########################
|
||||
+# Resize btrfs filesystem
|
||||
+# - mounted for upsize/downsize
|
||||
+# - cannot resize when unmounted
|
||||
+########################
|
||||
+resize_btrfs() {
|
||||
+ detect_mounted
|
||||
+ MOUNTPOINT=$MOUNTED
|
||||
+ if [ -z "$MOUNTED" ]; then
|
||||
+ MOUNTPOINT=$TEMPDIR
|
||||
+ temp_mount || error "Cannot mount Btrfs filesystem"
|
||||
+ fi
|
||||
+
|
||||
+ verbose "Parsing $BTRFS filesystem show \"$MOUNTPOINT\""
|
||||
+ for i in $(LC_ALL=C "$BTRFS" filesystem show "$MOUNTPOINT"); do
|
||||
+ case "$i" in
|
||||
+ *"$VOLUME"*) BTRFS_DEVID=${i##*devid};;
|
||||
+ esac
|
||||
+ done
|
||||
+ BTRFS_DEVID=${BTRFS_DEVID%%size*}
|
||||
+ BTRFS_DEVID=$(echo $BTRFS_DEVID|sed 's/^[ \t]*//g'|sed 's/[ \t]*$'//g)
|
||||
+ decode_size $1 1
|
||||
+ verbose "Resizing filesystem on device \"$VOLUME\" to $NEWSIZE bytes(btrfs devid: $BTRFS_DEVID) "
|
||||
+ dry "$BTRFS" filesystem resize "$BTRFS_DEVID":"$NEWSIZE" "$MOUNTPOINT"
|
||||
+}
|
||||
####################
|
||||
# Resize filesystem
|
||||
####################
|
||||
@@ -384,6 +449,7 @@ resize() {
|
||||
"ext3"|"ext2"|"ext4") resize_ext $NEWSIZE ;;
|
||||
"reiserfs") resize_reiser $NEWSIZE ;;
|
||||
"xfs") resize_xfs $NEWSIZE ;;
|
||||
+ "btrfs") resize_btrfs $NEWSIZE ;;
|
||||
*) error "Filesystem \"$FSTYPE\" on device \"$VOLUME\" is not supported by this tool" ;;
|
||||
esac || error "Resize $FSTYPE failed"
|
||||
cleanup 0
|
||||
@@ -441,6 +507,12 @@ check() {
|
||||
# Think about better way....
|
||||
dry "$XFS_REPAIR" -n -o force_geometry "$VOLUME"
|
||||
fi ;;
|
||||
+ "btrfs") #mount the device first and then run scrub
|
||||
+ MOUNTPOINT=$TEMPDIR
|
||||
+ temp_mount || error "Cannot mount btrfs filesystem"
|
||||
+ dry "$BTRFS" scrub start -B "$VOLUME"
|
||||
+ test "$MOUNTPOINT" = "$TEMPDIR" && MOUNTPOINT="" temp_umount
|
||||
+ ;;
|
||||
*) # check if executed from interactive shell environment
|
||||
case "$-" in
|
||||
*i*) dry "$FSCK" $YES $FORCE "$VOLUME" ;;
|
||||
@@ -462,7 +534,7 @@ test -n "$FSADM_RUNNING" && exit 0
|
||||
for i in "$TUNE_EXT" "$RESIZE_EXT" "$TUNE_REISER" "$RESIZE_REISER" \
|
||||
"$TUNE_XFS" "$RESIZE_XFS" "$MOUNT" "$UMOUNT" "$MKDIR" \
|
||||
"$RMDIR" "$BLOCKDEV" "$BLKID" "$GREP" "$READLINK" \
|
||||
- "$DATE" "$FSCK" "$XFS_CHECK" "$XFS_REPAIR" "$LVM" ; do
|
||||
+ "$DATE" "$FSCK" "$XFS_CHECK" "$XFS_REPAIR" "$LVM" "$BTRFS" ; do
|
||||
test -n "$i" || error "Required command definitions in the script are missing!"
|
||||
done
|
||||
|
||||
--
|
||||
1.8.1.4
|
||||
|
@ -1,3 +1,9 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 3 02:45:02 UTC 2015 - lzhong@suse.com
|
||||
|
||||
- fsadm: add support for btrfs(fate#318413)
|
||||
fsadm-add-support-for-btrfs.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Mar 23 07:50:05 UTC 2015 - lwang@suse.com
|
||||
|
||||
|
@ -88,6 +88,7 @@ Patch2004: udev_rules-update.diff
|
||||
Patch2005: udev-Check-for-DM_NR_VALID_PATHS.patch
|
||||
# suse, boo#910327
|
||||
Patch2006: lvm2-do-not-strip-pdata_tools.patch
|
||||
Patch2007: fsadm-add-support-for-btrfs.patch
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
BuildRequires: autoconf
|
||||
@ -149,6 +150,7 @@ Volume Manager.
|
||||
%patch2004 -p1
|
||||
%patch2005 -p1
|
||||
%patch2006 -p1
|
||||
%patch2007 -p1
|
||||
|
||||
%build
|
||||
#set path so that thin_check can be found
|
||||
|
Loading…
Reference in New Issue
Block a user