Instantly share code, notes, and snippets.

Embed
What would you like to do?
Glusterfs GFID Resolver Turns a GFID into a real path in the brick
#!/bin/bash
if [[ "$#" < "2" || "$#" > "3" ]]; then
cat <<END
Glusterfs GFID resolver -- turns a GFID into a real file path
Usage: $0 <brick-path> <gfid> [-q]
<brick-path> : the path to your glusterfs brick (required)
<gfid> : the gfid you wish to resolve to a real path (required)
-q : quieter output (optional)
with this option only the actual resolved path is printed.
without this option $0 will print the GFID,
whether it identifies a file or directory, and the resolved
path to the real file or directory.
Theory:
The .glusterfs directory in the brick root has files named by GFIDs
If the GFID identifies a directory, then this file is a symlink to the
actual directory. If the GFID identifies a file then this file is a
hard link to the actual file.
END
exit
fi
BRICK="$1"
GFID="$2"
GP1=`cut -c 1-2 <<<"$GFID"`
GP2=`cut -c 3-4 <<<"$GFID"`
GFIDPRE="$BRICK"/.glusterfs/"$GP1"/"$GP2"
GFIDPATH="$GFIDPRE"/"$GFID"
if [[ "$#" == "2" ]]; then
echo -ne "$GFID\t==\t"
fi
if [[ -h "$GFIDPATH" ]]; then
if [[ "$#" == "2" ]]; then
echo -ne "Directory:\t"
fi
DIRPATH="$GFIDPRE"/`readlink "$GFIDPATH"`
echo $(cd $(dirname "$DIRPATH"); pwd -P)/$(basename "$DIRPATH")
else
if [[ "$#" == "2" ]]; then
echo -ne "File:\t"
fi
INUM=`ls -i "$GFIDPATH" | cut -f 1 -d \ `
find "$BRICK" -inum "$INUM" ! -path \*.glusterfs/\*
fi
@diegows

This comment has been minimized.

diegows commented Aug 9, 2014

Really helpful :)

@msbrogli

This comment has been minimized.

msbrogli commented Oct 5, 2014

Great piece of software! :)

@hanshook

This comment has been minimized.

hanshook commented Aug 15, 2015

Saved the day!
Many thanks.

@cristov

This comment has been minimized.

cristov commented Nov 29, 2015

Great~! Thx. :)

@hostingnuggets

This comment has been minimized.

hostingnuggets commented Feb 22, 2016

I get the following output:

c4b19f1c-cc18-4727-87a4-18de8fe0078f    ==  Directory:  /tmp/gfid-resolver.sh: line 46: cd: /data/brick/.glusterfs/c4/b1/../../92/1b/921bfe8e-81ef-4579-b335-abfa2c7e6aea: Too many levels of symbolic links
/tmp/OC_DEFAULT_MODULE

any idea what's wrong?

@tenajsystems

This comment has been minimized.

tenajsystems commented May 19, 2018

@semiosis, what does it mean when I get this output: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx == File: after I run the script?

@gzcwnk

This comment has been minimized.

gzcwnk commented May 22, 2018

Hmm not giving me an output I expect,

8><---
glusterp2.graywitch.co.nz:
Brick glusterp1:/bricks/brick1/gv0
gfid:eafb8799-4e7a-4264-9213-26997c5a4693
Status: Connected
Number of entries in split-brain: 1
8><---

8><---
[root@glusterp2 fb]# sh gfid.run /bricks/brick1/gv0 eafb8799-4e7a-4264-9213-26997c5a4693 -q
[root@glusterp2 fb]#
8><---

?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment