8ac4ae703b
- Update patch use-mirrortype-asdefault-whenclvmdrunning.patch to match up the patches/pvmove_support_clustered_vg.diff and not use the define declared only when building clvm codebase; it is still broken if someone changes the PID location, but at least it now does not depend on clvm code - Regenerate_initrd in post of the lvm2 main pkg - Update baselibs to point to split-out devicemapper libraries - Keep in sync the common configuration options that are shared among all the variants dm/lvm2/clvm - Provide symlinks to 1.02 versions of dm and dm-event libs * this should sort out binary packages without the need of double rebuilding - Update to 2.02.152 release, read WHATS_NEW for detailed log. - Refresh patches: * 10-dm.rules-Reset-state-variable-for-spurious-events.patch * device-mapper-gcc-warnings.patch * device-mapper-link.patch * udev-Check-for-DM_NR_VALID_PATHS.patch - Slightly tweak btrfs patch as the code changed for the detection: * fsadm-add-support-for-btrfs.patch - Build and install properly cluster files - Remove csm-converter.tar.gz as the evms was last present on sle10 and thus migration is bit out of scope today - Add pre_checkin.sh to allow syncing of patches between packages: workflow = add everything to lvm2.spec and run pre_checkin.sh OBS-URL: https://build.opensuse.org/request/show/393600 OBS-URL: https://build.opensuse.org/package/show/Base:System/lvm2?expand=0&rev=150
173 lines
5.2 KiB
Diff
173 lines
5.2 KiB
Diff
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(-)
|
|
|
|
Index: LVM2.2.02.152/scripts/fsadm.sh
|
|
===================================================================
|
|
--- LVM2.2.02.152.orig/scripts/fsadm.sh
|
|
+++ LVM2.2.02.152/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"
|
|
PROCSELFMOUNTINFO="/proc/self/mountinfo"
|
|
NULL="$DM_DEV_DIR/null"
|
|
@@ -148,7 +153,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
|
|
@@ -207,6 +212,34 @@ 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
|
|
+}
|
|
+
|
|
detect_mounted_with_proc_self_mountinfo() {
|
|
MOUNTED=$("$GREP" "^[0-9]* [0-9]* $MAJORMINOR " "$PROCSELFMOUNTINFO")
|
|
|
|
@@ -243,7 +276,11 @@ detect_mounted_with_proc_mounts() {
|
|
# check if the given device is already mounted and where
|
|
# FIXME: resolve swap usage and device stacking
|
|
detect_mounted() {
|
|
- if test -e "$PROCSELFMOUNTINFO"; then
|
|
+ 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
|
|
+ elif test -e "$PROCSELFMOUNTINFO"; then
|
|
detect_mounted_with_proc_self_mountinfo
|
|
elif test -e "$PROCMOUNTS"; then
|
|
detect_mounted_with_proc_mounts
|
|
@@ -396,6 +433,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
|
|
####################
|
|
@@ -412,6 +474,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
|
|
@@ -469,6 +532,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" ;;
|
|
@@ -490,7 +559,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
|
|
|