slitaz-tools annotate lib/libmountbox @ rev 369

mountbox: add loop support + typos
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Aug 02 15:53:43 2009 +0200 (2009-08-02)
parents b872243c81ab
children 0f505d6877d4
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 #
pascal@369 6 # (C) 2009 - 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@369 32 # Update SIZE UUID TYPE LABEL variables
pascal@369 33 getdevinfo()
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@369 45 SIZE=$(($n/10)).$(($n%10))$unit
pascal@369 46 UUID=`blkid | grep ^$1 | grep UUID= | sed 's/.*UUID=\"\([^\"]*\)\".*/\1/'`
pascal@369 47 TYPE=`blkid | grep ^$1 | grep TYPE= | sed 's/.*TYPE=\"\([^\"]*\)\".*/\1/'`
pascal@369 48 LABEL=`blkid | grep ^$1 | grep LABEL= | sed 's/.*LABEL=\"\([^\"]*\)\".*/\1/'`
pascal@368 49 }
pascal@368 50
pankso@183 51 case $1 in
pankso@183 52 list-mounted)
pankso@183 53 # List all fs found by: df -h
pankso@183 54 #
pascal@368 55 for dev in `df -h | grep ^/dev/ | cut -d " " -f 1`
pankso@183 56 do
pankso@183 57 RES=`df -h $dev | grep ^$dev`
pankso@183 58 mounted_fs_data
pankso@183 59 echo "$dev | $SIZE | $USED | $AVAILABLE | $PCT | $MOUNTED_ON"
pankso@183 60 done ;;
pankso@183 61 list-umounted)
pankso@183 62 # List all umounted fs found by: fdisk -l
pankso@183 63 #
pankso@183 64 for dev in `fdisk -l | grep ^/dev | cut -d " " -f 1`
pankso@183 65 do
pankso@183 66 RES=`fdisk -l | grep $dev | sed s/*//g`
pankso@183 67 START=`echo $RES | cut -d " " -f 2`
pankso@183 68 END=`echo $RES | cut -d " " -f 3`
pankso@183 69 BLOCKS=`echo $RES | cut -d " " -f 4`
pankso@183 70 ID=`echo $RES | cut -d " " -f 5`
pascal@262 71 SYSTEM=`echo $RES | cut -d " " -f 6-`
pankso@183 72 # Bootable...
pankso@183 73 if fdisk -l | grep $dev | grep -q "*"; then
pascal@368 74 BOOT="yes"
pankso@183 75 else
pankso@183 76 BOOT="-"
pankso@183 77 fi
MikeDSmith25@252 78 # Skip swap, extended, and mounted partitions.
pankso@183 79 if echo $RES | grep -q "swap" || echo $RES | grep -q "Extended" ; then
pankso@183 80 continue
pascal@262 81 elif mount | grep -q "^$dev "; then
pankso@183 82 continue
pankso@183 83 else
pascal@369 84 getdevinfo $BLOCKS $dev
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@369 94 getdevinfo $BLOCKS /dev/$mdev:
pascal@369 95 echo "$dev | $SIZE | - | $TYPE | $LABEL | - | - | - | $BLOCKS | - | $UUID"
pascal@369 96 done
pascal@369 97 for dev in $(losetup | cut -d: -f1); do
pascal@369 98 [ -b $dev ] || continue
pascal@369 99 mount | grep -q "^$dev " && continue
pascal@369 100 BLOCKS=`cat /sys/block/${dev#/dev/}/size`
pascal@369 101 getdevinfo $BLOCKS $dev:
pascal@368 102 echo "$dev | $SIZE | - | $TYPE | $LABEL | - | - | - | $BLOCKS | - | $UUID"
pascal@368 103 done
pascal@368 104 [ -e /dev/cdrom ] &&
pascal@368 105 echo "/dev/cdrom | - | CD/DVD | iso9660 | - | - | - | - | - | - | -"
pascal@262 106 for i in /sys/devices/platform/floppy.*/block:*; do
pascal@263 107 [ -e $i ] && echo "/dev/${i#*block:} | - | - | - | floppy | - | - | - | - | -"
pascal@262 108 done
pascal@262 109 ;;
pankso@183 110 mounted-fs-infos)
MikeDSmith25@252 111 # Mounted fs info and actions, rootfs or other fs.
pankso@183 112 #
pankso@183 113 if [ "$MOUNTED" == "/dev/root" ]; then
pankso@183 114 export MOUNTED_DEVICE="
pankso@183 115 <window title=\"Device: rootfs\" icon-name=\"media-flash\">
pankso@183 116 <vbox>
pankso@183 117 <text use-markup=\"true\" width-chars=\"56\">
pankso@183 118 <label>\"
pankso@183 119 <b>/dev/root</b>
pankso@183 120 \"
pankso@183 121 </label>
pankso@183 122 </text>
pankso@183 123 <text use-markup=\"true\" width-chars=\"56\">
pankso@183 124 <input>df -h / | grep ^rootfs</input>
pankso@183 125 </text>
pankso@183 126 <hbox>
pankso@183 127 <button>
pankso@183 128 <label>Browse</label>
pankso@183 129 <input file icon=\"folder-open\"></input>
pankso@183 130 <action>pcmanfm / &</action>
pankso@183 131 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pankso@183 132 </button>
pankso@183 133 <button>
pankso@183 134 <input file icon=\"gtk-close\"></input>
pankso@183 135 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pankso@183 136 </button>
pankso@183 137 </hbox>
pankso@183 138 </vbox>
pankso@183 139 </window>"
pankso@183 140 gtkdialog --center --program=MOUNTED_DEVICE
pankso@183 141 else
pascal@263 142 UUID=`blkid | grep ^$MOUNTED | grep UUID= | sed 's/.*UUID=\"\([^\"]*\)\".*/\1/'`
pascal@263 143 TYPE=`blkid | grep ^$MOUNTED | grep TYPE= | sed 's/.*TYPE=\"\([^\"]*\)\".*/\1/'`
pascal@263 144 LABEL=`blkid | grep ^$MOUNTED | grep LABEL= | sed 's/.*LABEL=\"\([^\"]*\)\".*/\1/'`
pankso@183 145 RES=`df -h $MOUNTED | grep ^$MOUNTED`
pankso@183 146 mounted_fs_data
pankso@183 147 export MOUNTED_DEVICE="
pankso@183 148 <window title=\"Device: $MOUNTED\" icon-name=\"media-flash\">
pankso@183 149 <vbox>
pankso@183 150 <text use-markup=\"true\" width-chars=\"56\">
pankso@183 151 <label>\"
pankso@183 152 Device <b>$MOUNTED</b> is mounted on <b>$MOUNTED_ON</b>
pankso@183 153
pankso@183 154 UUID: $UUID
pankso@183 155 Type: $TYPE
pascal@263 156 Label: $LABEL
pankso@183 157 \"
pankso@183 158 </label>
pankso@183 159 </text>
pankso@183 160 <hbox>
pankso@183 161 <button>
pankso@183 162 <label>Browse</label>
pankso@183 163 <input file icon=\"folder-open\"></input>
pankso@183 164 <action>pcmanfm $MOUNTED_ON &</action>
pankso@183 165 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pankso@183 166 </button>
pankso@183 167 <button>
pankso@183 168 <label>Umount</label>
pankso@183 169 <input file icon=\"undo\"></input>
pankso@183 170 <action>umount $MOUNTED_ON</action>
pankso@183 171 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pankso@183 172 </button>
pankso@183 173 <button>
pankso@183 174 <input file icon=\"gtk-close\"></input>
pankso@183 175 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pankso@183 176 </button>
pankso@183 177 </hbox>
pankso@183 178 </vbox>
pankso@183 179 </window>"
pankso@183 180 gtkdialog --center --program=MOUNTED_DEVICE
pankso@183 181 fi ;;
pankso@183 182 umounted-fs-infos)
MikeDSmith25@252 183 # Mounted fs info and actions, rootfs or other fs.
pankso@183 184 #
pascal@368 185 case "$DEVICE" in
pascal@368 186 /dev/mapper/*) mdev=/dev/dm-$(ls -l $DEVICE | awk '{ print $6 }');;
pascal@368 187 *) mdev=$DEVICE;;
pascal@368 188 esac
pascal@368 189 UUID=`blkid | grep ^$mdev | grep UUID= | sed 's/.*UUID=\"\([^\"]*\)\".*/\1/'`
pascal@368 190 TYPE=`blkid | grep ^$mdev | grep TYPE= | sed 's/.*TYPE=\"\([^\"]*\)\".*/\1/'`
pascal@368 191 LABEL=`blkid | grep ^$mdev | grep LABEL= | sed 's/.*LABEL=\"\([^\"]*\)\".*/\1/'`
pankso@183 192 export UMOUNTED_DEVICE="
pankso@183 193 <window title=\"Device: $DEVICE\" icon-name=\"media-flash\">
pankso@183 194 <vbox>
pankso@183 195 <text use-markup=\"true\" width-chars=\"56\">
pankso@183 196 <label>\"
pankso@183 197 Mount <b>$DEVICE</b> on <b>$MOUNT_POINT</b>
pankso@183 198
pankso@183 199 UUID: $UUID
pankso@183 200 Type: $TYPE
pascal@263 201 Label: $LABEL
pankso@183 202 \"
pankso@183 203 </label>
pankso@183 204 </text>
pankso@183 205
pankso@183 206 <hbox>
pankso@183 207 <button>
pankso@183 208 <label>Mount</label>
pankso@183 209 <input file icon=\"edit-redo\"></input>
pankso@183 210 <action>mkdir -p $MOUNT_POINT</action>
pankso@183 211 <action>mount $DEVICE $MOUNT_POINT</action>
pankso@183 212 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pascal@368 213 </button>"
pascal@368 214 while read type fsck args; do
pascal@368 215 [ "$TYPE" == "$type" ] || continue
pascal@368 216 which $fsck > /dev/null || continue
pascal@368 217 UMOUNTED_DEVICE="$UMOUNTED_DEVICE
pankso@183 218 <button>
pascal@368 219 <label>$fsck check</label>
pankso@183 220 <input file icon=\"drive-harddisk\"></input>
pascal@368 221 <action>xterm -T \"$fsck $args $DEVICE\" \
pascal@369 222 -geometry 80x12 \
pascal@368 223 -e \"echo; $fsck $args $DEVICE; \
pascal@369 224 echo -e '----\\nENTER to close Terminal'; \
pankso@183 225 read i\" &</action>
pankso@183 226 <action type=\"closewindow\">MOUNTED_DEVICE</action>
pascal@368 227 </button>"
pascal@368 228 done <<EOT
pascal@368 229 ext3 e2fsck -p
pascal@368 230 ext2 e2fsck -p
pascal@368 231 vfat dosfsck -a
pascal@368 232 msdos dosfsck -a
pascal@368 233 xfs fsck.xfs -s
pascal@368 234 reiserfs reiserfsck --fix-fixable
pascal@368 235 jfs jfs_fsck -a
pascal@368 236 EOT
pascal@368 237 UMOUNTED_DEVICE="$UMOUNTED_DEVICE
pankso@183 238 <button>
pankso@183 239 <input file icon=\"gtk-close\"></input>
pankso@183 240 <action type=\"closewindow\">UMOUNTED_DEVICE</action>
pankso@183 241 </button>
pankso@183 242 </hbox>
pankso@183 243 </vbox>
pankso@183 244 </window>"
pankso@183 245 gtkdialog --center --program=UMOUNTED_DEVICE ;;
pankso@183 246 *)
pankso@183 247 usage ;;
pankso@183 248 esac
pankso@183 249
pankso@183 250 exit 0