#!/bin/sh DEVICE=$1 FSTYPE="unknow" NTFS_mode="ntfs" [ -x /sbin/mount.ntfs-3g ] && NTFS_mode="ntfs-3g" KLIBC_FSTYPE=/usr/lib/klibc/bin/fstype [ -x /bin/fstype ] && KLIBC_FSTYPE=/bin/fstype [ ! -x $KLIBC_FSTYPE ] && KLIBC_FSTYPE=/bin/not_found UDEVINFO="/usr/bin/udevinfo" [ -e /sbin/udevadm ] && UDEVINFO="/sbin/udevadm info" ONLY_FS=0 if [ "$2" = "--only" ]; then ONLY_FS=1 fi echo_fs() { if [ "$ONLY_FS" = "0" ]; then echo "$DEVICE $1" else echo "$1" fi } if [ "$DEVICE" = "" ]; then echo "error, need device" exit 1 fi # 1.- Try with udev utils vol_id or blkid if [ -x /lib/udev/vol_id ]; then FSTYPE=$(/lib/udev/vol_id -t $DEVICE 2>&1) elif [ -x /usr/bin/blkid ]; then FSTYPE=$(/usr/bin/blkid -o udev $DEVICE 2>&1| awk -F"=" '/ID_FS_TYPE=/ {print $2}') elif [ -x /sbin/blkid ]; then FSTYPE=$(/sbin/blkid -o udev $DEVICE 2>&1| awk -F"=" '/ID_FS_TYPE=/ {print $2}') else FSTYPE="" fi case $FSTYPE in *unknow*) FSTYPE="unknow" ;; *error*volume*) FSTYPE="error" ;; *ntfs*) FSTYPE=$NTFS_mode ;; *NTFS*) FSTYPE=$NTFS_mode ;; esac if [ "$FSTYPE" != "" ] && [ "$FSTYPE" != "unknow" ] && [ "$FSTYPE" != "error" ] ; then echo_fs "$FSTYPE" exit 0 fi # 2.- Try with udevinfo DPATH=$(find /sys/devices -name $(echo $DEVICE | awk -F"/" '{print $NF}')| awk -F"/block" '{print "/block"$2}') if [ "$DPATH" != "" ]; then FSTYPE=$($UDEVINFO --query=env --path=$DPATH 2>/dev/null| awk -F'=' '/^ID_FS_TYPE/ {print $2}') else FSTYPE="" fi case $FSTYPE in *unknow*) FSTYPE="unknow" ;; *error*volume*) FSTYPE="error" ;; *ntfs*) FSTYPE=$NTFS_mode ;; *NTFS*) FSTYPE=$NTFS_mode ;; esac if [ "$FSTYPE" != "" ] && [ "$FSTYPE" != "unknow" ] && [ "$FSTYPE" != "error" ] ; then echo_fs "$FSTYPE" exit 0 fi # 3.- Try with fstype if [ -x $KLIBC_FSTYPE ]; then FSTYPE=$($KLIBC_FSTYPE $DEVICE 2>&1 | awk -F "=" '/^FSTYPE/ {print $2}') case $FSTYPE in *unknow*) FSTYPE="unknow" ;; *ntfs*) FSTYPE=$NTFS_mode ;; *NTFS*) FSTYPE=$NTFS_mode ;; esac if [ "$FSTYPE" != "" ] && [ "$FSTYPE" != "unknow" ] && [ "$FSTYPE" != "error" ] ; then echo_fs "$FSTYPE" exit 0 fi fi # 4.- Try with disktype # type=$(disktype $DEVICE 2>/dev/null | grep "file system") # case "$type" in # *ReiserFS*) # FSTYPE="reiserfs" # ;; # *XFS*) # FSTYPE="xfs" # ;; # *Ext3*) # FSTYPE="ext3" # ;; # *Ext2*) # FSTYPE="ext2" # ;; # *HFS*) # FSTYPE="hfs" # ;; # *NTFS*) # FSTYPE=$NTFS_mode # ;; # *FAT16*) # FSTYPE="vfat" # ;; # *FAT*) # FSTYPE="vfat" # ;; # *) # FSTYPE="unknow" # ;; #esac #if [ "$FSTYPE" != "" ] && [ "$FSTYPE" != "unknow" ] && [ "$FSTYPE" != "error" ] ; then # echo_fs "$FSTYPE" # exit 0 #fi # 3.- Try with fdisk line=$(/sbin/fdisk -l |grep $1 | sed s/*/XX/g) if [ "$(echo ${line} | awk '{print $2}')" = "XX" ] ; then type=$(echo ${line}| awk '{print $6}') else type=$(echo ${line}| awk '{print $5}') fi case "$type" in *83*) FSTYPE="ext3" ;; 82) FSTYPE="swap" ;; b) FSTYPE="vfat" ;; c) FSTYPE="vfat" ;; e) FSTYPE="vfat" ;; f) FSTYPE="extended" ;; 5) FSTYPE="extended" ;; 7) FSTYPE="$NTFS_mode" ;; *) FSTYPE="auto" ;; esac if [ "$FSTYPE" != "" ] && [ "$FSTYPE" != "unknow" ] && [ "$FSTYPE" != "error" ] ; then echo_fs "$FSTYPE" exit 0 fi exit 1