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 |