set -ex
-FIRST_DAMAGE="first-damage.sh"
+FIRST_DAMAGE="first-damage.py"
FS=cephfs
METADATA_POOL=cephfs_meta
+MOUNT=~/mnt/mnt.0
function usage {
- printf '%s: [--fs=<fs_name>] [--metadata-pool=<pool>] [--first-damage=</path/to/first-damage.sh>]\n'
+ printf '%s: [--fs=<fs_name>] [--metadata-pool=<pool>] [--first-damage=</path/to/first-damage.py>]\n'
exit 1
}
}
function recover {
- # drop client cache -- approx. umount without unmounting for test
- echo 3 | sudo tee /proc/sys/vm/drop_caches
flush
ceph fs fail "$FS"
sleep 5
cephfs-journal-tool --rank="$FS":0 event recover_dentries summary
cephfs-journal-tool --rank="$FS":0 journal reset
- $FIRST_DAMAGE "$METADATA_POOL"
- $FIRST_DAMAGE --remove "$METADATA_POOL"
+ python3 $FIRST_DAMAGE --memo /tmp/memo1 "$METADATA_POOL"
+ python3 $FIRST_DAMAGE --memo /tmp/memo2 --remove "$METADATA_POOL"
ceph fs set "$FS" joinable true
}
rm -rf dir
}
+function mount {
+ sudo --preserve-env=CEPH_CONF bin/mount.ceph :/ "$MOUNT" -o name=admin,noshare
+ df -h "$MOUNT"
+}
+
function main {
- eval set -- $(getopt --name "$0" --options '' --longoptions 'help,fs:,metadata-pool:,first-damage:' -- "$@")
+ eval set -- $(getopt --name "$0" --options '' --longoptions 'help,fs:,metadata-pool:,first-damage:,mount:' -- "$@")
while [ "$#" -gt 0 ]; do
echo "$*"
METADATA_POOL="$2"
shift 2
;;
+ --mount)
+ MOUNT="$2"
+ shift 2
+ ;;
--first-damage)
FIRST_DAMAGE="$2"
shift 2
esac
done
+ mount
+
+ pushd "$MOUNT"
create
+ popd
+
+ sudo umount -f "$MOUNT"
# flush dentries/inodes to omap
- (cd / && flush)
+ flush
- (cd / && damage)
+ damage
- (cd / && recover)
+ recover
- check
+ sleep 5 # for mds to join
+
+ mount
+ pushd "$MOUNT"
+ check
cleanup
+ popd
+
+ sudo umount -f "$MOUNT"
}
main "$@"