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 |