slitaz-tools annotate lib/libmountbox @ rev 368

mountbox: add devmapper support + misc fixes
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Aug 02 15:15:19 2009 +0200 (2009-08-02)
parents 9fbb84b399ed
children d3586136f92a
rev   line source
pankso@183 1 #!/bin/sh
pankso@183 2 #
MikeDSmith25@252 3 # Libmountbox provides devices list in suitable format for GTK tree
MikeDSmith25@252 4 # and various dialog boxes to mount, umount, etc.
pankso@183 5 #
pankso@183 6 # (C) 2008 - SliTaz GNU/Linux project.
pankso@183 7 #
pankso@183 8
pankso@183 9 # Short usage.
pankso@183 10 usage()
pankso@183 11 {
pankso@183 12 echo -e "\nUsage: $0 command\n
MikeDSmith25@252 13 Output commands:
pankso@183 14 list-mounted List all mounted devices in suitable GTK tree format.
pankso@183 15 list-umounted List all umounted in suitable GTK tree format.
pankso@183 16
pankso@183 17 GTKdialog boxes
pankso@183 18 mounted-fs-infos Display a mounted devices infos with actions.
pankso@183 19 umounted-fs-infos Display a umounted devices infos with actions.\n"
pankso@183 20 }
pankso@183 21
MikeDSmith25@252 22 # Format df -h output for GTK tree.
pankso@183 23 mounted_fs_data()
pankso@183 24 {
pankso@183 25 SIZE=`echo $RES | cut -d " " -f 2`
pankso@183 26 USED=`echo $RES | cut -d " " -f 3`
pankso@183 27 AVAILABLE=`echo $RES | cut -d " " -f 4`
pankso@183 28 PCT=`echo $RES | cut -d " " -f 5`
pankso@183 29 MOUNTED_ON=`echo $RES | cut -d " " -f 6`
pankso@183 30 }
pankso@183 31
pascal@368 32 # human readable size from 512 block count
pascal@368 33 blocks2size()
pascal@368 34 {
pascal@368 35 if [ $BLOCKS -gt 2097152 ]; then
pascal@368 36 unit=G
pascal@368 37 n=$(($1 * 10 / 2097152))
pascal@368 38 elif [ $BLOCKS -gt 2048 ]; then
pascal@368 39 unit=M
pascal@368 40 n=$(($1 * 10 / 2048))
pascal@368 41 else
pascal@368 42 unit=K
pascal@368 43 n=$(($1 * 5))
pascal@368 44 fi
pascal@368 45 echo $(($n/10)).$(($n%10))$unit
pascal@368 46 }
pascal@368 47
pankso@183 48 case $1 in
pankso@183 49 list-mounted)
pankso@183 50 # List all fs found by: df -h
pankso@183 51 #
pascal@368 52 for dev in `df -h | grep ^/dev/ | cut -d " " -f 1`
pankso@183 53 do
pankso@183 54 RES=`df -h $dev | grep ^$dev`
pankso@183 55 mounted_fs_data
pankso@183 56 echo "$dev | $SIZE | $USED | $AVAILABLE | $PCT | $MOUNTED_ON"
pankso@183 57 done ;;
pankso@183 58 list-umounted)
pankso@183 59 # List all umounted fs found by: fdisk -l
pankso@183 60 #
pankso@183 61 for dev in `fdisk -l | grep ^/dev | cut -d " " -f 1`
pankso@183 62 do
pankso@183 63 RES=`fdisk -l | grep $dev | sed s/*//g`
pankso@183 64 START=`echo $RES | cut -d " " -f 2`
pankso@183 65 END=`echo $RES | cut -d " " -f 3`
pankso@183 66 BLOCKS=`echo $RES | cut -d " " -f 4`
pankso@183 67 ID=`echo $RES | cut -d " " -f 5`
pascal@262 68 SYSTEM=`echo $RES | cut -d " " -f 6-`
pascal@368 69 SIZE=$(blocks2size $BLOCKS)
pankso@183 70 # Bootable...
pankso@183 71 if fdisk -l | grep $dev | grep -q "*"; then
pascal@368 72 BOOT="yes"
pankso@183 73 else
pankso@183 74 BOOT="-"
pankso@183 75 fi
MikeDSmith25@252 76 # Skip swap, extended, and mounted partitions.
pankso@183 77 if echo $RES | grep -q "swap" || echo $RES | grep -q "Extended" ; then
pankso@183 78 continue
pascal@262 79 elif mount | grep -q "^$dev "; then
pankso@183 80 continue
pankso@183 81 else
pascal@263 82 UUID=`blkid | grep ^$dev | grep UUID= | sed 's/.*UUID=\"\([^\"]*\)\".*/\1/'`
pascal@263 83 TYPE=`blkid | grep ^$dev | grep TYPE= | sed 's/.*TYPE=\"\([^\"]*\)\".*/\1/'`
pascal@263 84 LABEL=`blkid | grep ^$dev | grep LABEL= | sed 's/.*LABEL=\"\([^\"]*\)\".*/\1/'`
pascal@368 85 echo "$dev | $SIZE | $SYSTEM | $TYPE | $LABEL | $BOOT | $START | $END | $BLOCKS | $ID | $UUID"
pankso@183 86 fi
pascal@262 87 done
pascal@368 88 for dev in /dev/mapper/* ; do
pascal@368 89 [ -b $dev ] || continue
pascal@368 90 mount | grep -q "^$dev " && continue
pascal@368 91 mdev=dm-$(ls -l $dev | awk '{ print $6 }')
pascal@368 92 mount | grep -q "^/dev/$mdev " && continue
pascal@368 93 BLOCKS=`cat /sys/block/$mdev/size`
pascal@368 94 SIZE=$(blocks2size $BLOCKS)
pascal@368 95 UUID=`blkid | grep ^/dev/$mdev: | grep UUID= | sed 's/.*UUID=\"\([^\"]*\)\".*/\1/'`
pascal@368 96 TYPE=`blkid | grep ^/dev/$mdev: | grep TYPE= | sed 's/.*TYPE=\"\([^\"]*\)\".*/\1/'`
pascal@368 97 LABEL=`blkid | grep ^/dev/$mdev: | grep LABEL= | sed 's/.*LABEL=\"\([^\"]*\)\".*/\1/'`
pascal@368 98 echo "$dev | $SIZE | - | $TYPE | $LABEL | - | - | - | $BLOCKS | - | $UUID"
pascal@368 99 done
pascal@368 100 [ -e /dev/cdrom ] &&
pascal@368 101 echo "/dev/cdrom | - | CD/DVD | iso9660 | - | - | - | - | - | - | -"
pascal@262 102 for i in /sys/devices/platform/floppy.*/block:*; do
pascal@263 103 [ -e $i ] && echo "/dev/${i#*block:} | - | - | - | floppy | - | - | - | - | -"
pascal@262 104 done
pascal@262 105 ;;
pankso@183 106 mounted-fs-infos)
MikeDSmith25@252 107 # Mounted fs info and actions, rootfs or other fs.
pankso@183 108 #
pankso@183 109 if [ "$MOUNTED" == "/dev/root" ]; then
pankso@183 110 export MOUNTED_DEVICE="
pankso@183 111 <window title=\"Device: rootfs\" icon-name=\"media-flash\">
pankso@183 112 <vbox>
pankso@183 113 <text use-markup=\"true\" width-chars=\"56\">
pankso@183 114 <label>\"
pankso@183 115 <b>/dev/root</b>
pankso@183 116 \"
pankso@183 117 </label>
pankso@183 118 </text>
pankso@183 119 <text use-markup=\"true\" width-chars=\"56\">
pankso@183 120 <input>df -h / | grep ^rootfs</input>
pankso@183 121 </text>
pankso@183 122 <hbox>
pankso@183 123 <button>
pankso@183 124 <label>Browse</label>
pankso@183 125 <input file icon=\"folder-open\"></input>
pankso@183 126 <action>pcmanfm / &</action>
pankso@183 127 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pankso@183 128 </button>
pankso@183 129 <button>
pankso@183 130 <input file icon=\"gtk-close\"></input>
pankso@183 131 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pankso@183 132 </button>
pankso@183 133 </hbox>
pankso@183 134 </vbox>
pankso@183 135 </window>"
pankso@183 136 gtkdialog --center --program=MOUNTED_DEVICE
pankso@183 137 else
pascal@263 138 UUID=`blkid | grep ^$MOUNTED | grep UUID= | sed 's/.*UUID=\"\([^\"]*\)\".*/\1/'`
pascal@263 139 TYPE=`blkid | grep ^$MOUNTED | grep TYPE= | sed 's/.*TYPE=\"\([^\"]*\)\".*/\1/'`
pascal@263 140 LABEL=`blkid | grep ^$MOUNTED | grep LABEL= | sed 's/.*LABEL=\"\([^\"]*\)\".*/\1/'`
pankso@183 141 RES=`df -h $MOUNTED | grep ^$MOUNTED`
pankso@183 142 mounted_fs_data
pankso@183 143 export MOUNTED_DEVICE="
pankso@183 144 <window title=\"Device: $MOUNTED\" icon-name=\"media-flash\">
pankso@183 145 <vbox>
pankso@183 146 <text use-markup=\"true\" width-chars=\"56\">
pankso@183 147 <label>\"
pankso@183 148 Device <b>$MOUNTED</b> is mounted on <b>$MOUNTED_ON</b>
pankso@183 149
pankso@183 150 UUID: $UUID
pankso@183 151 Type: $TYPE
pascal@263 152 Label: $LABEL
pankso@183 153 \"
pankso@183 154 </label>
pankso@183 155 </text>
pankso@183 156 <hbox>
pankso@183 157 <button>
pankso@183 158 <label>Browse</label>
pankso@183 159 <input file icon=\"folder-open\"></input>
pankso@183 160 <action>pcmanfm $MOUNTED_ON &</action>
pankso@183 161 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pankso@183 162 </button>
pankso@183 163 <button>
pankso@183 164 <label>Umount</label>
pankso@183 165 <input file icon=\"undo\"></input>
pankso@183 166 <action>umount $MOUNTED_ON</action>
pankso@183 167 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pankso@183 168 </button>
pankso@183 169 <button>
pankso@183 170 <input file icon=\"gtk-close\"></input>
pankso@183 171 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pankso@183 172 </button>
pankso@183 173 </hbox>
pankso@183 174 </vbox>
pankso@183 175 </window>"
pankso@183 176 gtkdialog --center --program=MOUNTED_DEVICE
pankso@183 177 fi ;;
pankso@183 178 umounted-fs-infos)
MikeDSmith25@252 179 # Mounted fs info and actions, rootfs or other fs.
pankso@183 180 #
pascal@368 181 case "$DEVICE" in
pascal@368 182 /dev/mapper/*) mdev=/dev/dm-$(ls -l $DEVICE | awk '{ print $6 }');;
pascal@368 183 *) mdev=$DEVICE;;
pascal@368 184 esac
pascal@368 185 UUID=`blkid | grep ^$mdev | grep UUID= | sed 's/.*UUID=\"\([^\"]*\)\".*/\1/'`
pascal@368 186 TYPE=`blkid | grep ^$mdev | grep TYPE= | sed 's/.*TYPE=\"\([^\"]*\)\".*/\1/'`
pascal@368 187 LABEL=`blkid | grep ^$mdev | grep LABEL= | sed 's/.*LABEL=\"\([^\"]*\)\".*/\1/'`
pankso@183 188 export UMOUNTED_DEVICE="
pankso@183 189 <window title=\"Device: $DEVICE\" icon-name=\"media-flash\">
pankso@183 190 <vbox>
pankso@183 191 <text use-markup=\"true\" width-chars=\"56\">
pankso@183 192 <label>\"
pankso@183 193 Mount <b>$DEVICE</b> on <b>$MOUNT_POINT</b>
pankso@183 194
pankso@183 195 UUID: $UUID
pankso@183 196 Type: $TYPE
pascal@263 197 Label: $LABEL
pankso@183 198 \"
pankso@183 199 </label>
pankso@183 200 </text>
pankso@183 201
pankso@183 202 <hbox>
pankso@183 203 <button>
pankso@183 204 <label>Mount</label>
pankso@183 205 <input file icon=\"edit-redo\"></input>
pankso@183 206 <action>mkdir -p $MOUNT_POINT</action>
pankso@183 207 <action>mount $DEVICE $MOUNT_POINT</action>
pankso@183 208 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pascal@368 209 </button>"
pascal@368 210 while read type fsck args; do
pascal@368 211 [ "$TYPE" == "$type" ] || continue
pascal@368 212 which $fsck > /dev/null || continue
pascal@368 213 UMOUNTED_DEVICE="$UMOUNTED_DEVICE
pankso@183 214 <button>
pascal@368 215 <label>$fsck check</label>
pankso@183 216 <input file icon=\"drive-harddisk\"></input>
pascal@368 217 <action>xterm -T \"$fsck $args $DEVICE\" \
pankso@183 218 --geomery 80x12 \
pascal@368 219 -e \"echo; $fsck $args $DEVICE; \
pankso@183 220 echo -e '----\nENTER to close Termianl'; \
pankso@183 221 read i\" &</action>
pankso@183 222 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pascal@368 223 </button>"
pascal@368 224 done <<EOT
pascal@368 225 ext3 e2fsck -p
pascal@368 226 ext2 e2fsck -p
pascal@368 227 vfat dosfsck -a
pascal@368 228 msdos dosfsck -a
pascal@368 229 xfs fsck.xfs -s
pascal@368 230 reiserfs reiserfsck --fix-fixable
pascal@368 231 jfs jfs_fsck -a
pascal@368 232 EOT
pascal@368 233 UMOUNTED_DEVICE="$UMOUNTED_DEVICE
pankso@183 234 <button>
pankso@183 235 <input file icon=\"gtk-close\"></input>
pankso@183 236 <action type=\"closewindow\">UMOUNTED_DEVICE</action>
pankso@183 237 </button>
pankso@183 238 </hbox>
pankso@183 239 </vbox>
pankso@183 240 </window>"
pankso@183 241 gtkdialog --center --program=UMOUNTED_DEVICE ;;
pankso@183 242 *)
pankso@183 243 usage ;;
pankso@183 244 esac
pankso@183 245
pankso@183 246 exit 0