slitaz-tools annotate lib/libmountbox @ rev 370
mountbox: add loop manager
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sun Aug 02 20:55:09 2009 +0200 (2009-08-02) |
parents | d3586136f92a |
children | 9eafe366717d |
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@370 | 32 # Update BLOCKS SIZE UUID TYPE LABEL variables |
pascal@369 | 33 getdevinfo() |
pascal@368 | 34 { |
pascal@370 | 35 local dev |
pascal@370 | 36 dev=${1#/dev/} |
pascal@370 | 37 BLOCKS=0 |
pascal@370 | 38 if [ -f /sys/block/$dev/size ]; then |
pascal@370 | 39 BLOCKS=`cat /sys/block/$dev/size` |
pascal@370 | 40 elif [ -f /sys/block/*/$dev/size ]; then |
pascal@370 | 41 BLOCKS=`cat /sys/block/*/$dev/size` |
pascal@370 | 42 fi |
pascal@368 | 43 if [ $BLOCKS -gt 2097152 ]; then |
pascal@368 | 44 unit=G |
pascal@370 | 45 n=$(($BLOCKS * 10 / 2097152)) |
pascal@368 | 46 elif [ $BLOCKS -gt 2048 ]; then |
pascal@368 | 47 unit=M |
pascal@370 | 48 n=$(($BLOCKS * 10 / 2048)) |
pascal@368 | 49 else |
pascal@368 | 50 unit=K |
pascal@370 | 51 n=$(($BLOCKS * 5)) |
pascal@368 | 52 fi |
pascal@369 | 53 SIZE=$(($n/10)).$(($n%10))$unit |
pascal@370 | 54 UUID=`blkid | grep ^/dev/$dev: | grep UUID= | sed 's/.*UUID=\"\([^\"]*\)\".*/\1/'` |
pascal@370 | 55 TYPE=`blkid | grep ^/dev/$dev: | grep TYPE= | sed 's/.*TYPE=\"\([^\"]*\)\".*/\1/'` |
pascal@370 | 56 LABEL=`blkid | grep ^/dev/$dev: | grep LABEL= | sed 's/.*LABEL=\"\([^\"]*\)\".*/\1/'` |
pascal@368 | 57 } |
pascal@368 | 58 |
pankso@183 | 59 case $1 in |
pankso@183 | 60 list-mounted) |
pankso@183 | 61 # List all fs found by: df -h |
pankso@183 | 62 # |
pascal@368 | 63 for dev in `df -h | grep ^/dev/ | cut -d " " -f 1` |
pankso@183 | 64 do |
pankso@183 | 65 RES=`df -h $dev | grep ^$dev` |
pankso@183 | 66 mounted_fs_data |
pankso@183 | 67 echo "$dev | $SIZE | $USED | $AVAILABLE | $PCT | $MOUNTED_ON" |
pankso@183 | 68 done ;; |
pankso@183 | 69 list-umounted) |
pankso@183 | 70 # List all umounted fs found by: fdisk -l |
pankso@183 | 71 # |
pankso@183 | 72 for dev in `fdisk -l | grep ^/dev | cut -d " " -f 1` |
pankso@183 | 73 do |
pankso@183 | 74 RES=`fdisk -l | grep $dev | sed s/*//g` |
pankso@183 | 75 START=`echo $RES | cut -d " " -f 2` |
pankso@183 | 76 END=`echo $RES | cut -d " " -f 3` |
pankso@183 | 77 BLOCKS=`echo $RES | cut -d " " -f 4` |
pankso@183 | 78 ID=`echo $RES | cut -d " " -f 5` |
pascal@262 | 79 SYSTEM=`echo $RES | cut -d " " -f 6-` |
pankso@183 | 80 # Bootable... |
pankso@183 | 81 if fdisk -l | grep $dev | grep -q "*"; then |
pascal@368 | 82 BOOT="yes" |
pankso@183 | 83 else |
pankso@183 | 84 BOOT="-" |
pankso@183 | 85 fi |
MikeDSmith25@252 | 86 # Skip swap, extended, and mounted partitions. |
pankso@183 | 87 if echo $RES | grep -q "swap" || echo $RES | grep -q "Extended" ; then |
pankso@183 | 88 continue |
pascal@262 | 89 elif mount | grep -q "^$dev "; then |
pankso@183 | 90 continue |
pankso@183 | 91 else |
pascal@370 | 92 getdevinfo $dev |
pascal@368 | 93 echo "$dev | $SIZE | $SYSTEM | $TYPE | $LABEL | $BOOT | $START | $END | $BLOCKS | $ID | $UUID" |
pankso@183 | 94 fi |
pascal@262 | 95 done |
pascal@368 | 96 for dev in /dev/mapper/* ; do |
pascal@368 | 97 [ -b $dev ] || continue |
pascal@368 | 98 mount | grep -q "^$dev " && continue |
pascal@368 | 99 mdev=dm-$(ls -l $dev | awk '{ print $6 }') |
pascal@368 | 100 mount | grep -q "^/dev/$mdev " && continue |
pascal@370 | 101 getdevinfo /dev/$mdev |
pascal@369 | 102 echo "$dev | $SIZE | - | $TYPE | $LABEL | - | - | - | $BLOCKS | - | $UUID" |
pascal@369 | 103 done |
pascal@369 | 104 for dev in $(losetup | cut -d: -f1); do |
pascal@369 | 105 [ -b $dev ] || continue |
pascal@369 | 106 mount | grep -q "^$dev " && continue |
pascal@370 | 107 getdevinfo $dev |
pascal@368 | 108 echo "$dev | $SIZE | - | $TYPE | $LABEL | - | - | - | $BLOCKS | - | $UUID" |
pascal@368 | 109 done |
pascal@368 | 110 [ -e /dev/cdrom ] && |
pascal@368 | 111 echo "/dev/cdrom | - | CD/DVD | iso9660 | - | - | - | - | - | - | -" |
pascal@262 | 112 for i in /sys/devices/platform/floppy.*/block:*; do |
pascal@263 | 113 [ -e $i ] && echo "/dev/${i#*block:} | - | - | - | floppy | - | - | - | - | -" |
pascal@262 | 114 done |
pascal@262 | 115 ;; |
pankso@183 | 116 mounted-fs-infos) |
MikeDSmith25@252 | 117 # Mounted fs info and actions, rootfs or other fs. |
pankso@183 | 118 # |
pankso@183 | 119 if [ "$MOUNTED" == "/dev/root" ]; then |
pankso@183 | 120 export MOUNTED_DEVICE=" |
pankso@183 | 121 <window title=\"Device: rootfs\" icon-name=\"media-flash\"> |
pankso@183 | 122 <vbox> |
pankso@183 | 123 <text use-markup=\"true\" width-chars=\"56\"> |
pankso@183 | 124 <label>\" |
pankso@183 | 125 <b>/dev/root</b> |
pankso@183 | 126 \" |
pankso@183 | 127 </label> |
pankso@183 | 128 </text> |
pankso@183 | 129 <text use-markup=\"true\" width-chars=\"56\"> |
pankso@183 | 130 <input>df -h / | grep ^rootfs</input> |
pankso@183 | 131 </text> |
pankso@183 | 132 <hbox> |
pankso@183 | 133 <button> |
pankso@183 | 134 <label>Browse</label> |
pankso@183 | 135 <input file icon=\"folder-open\"></input> |
pankso@183 | 136 <action>pcmanfm / &</action> |
pankso@183 | 137 <action type=\"closewindow\">MOUNTED_DEVICE</action> |
pankso@183 | 138 </button> |
pankso@183 | 139 <button> |
pankso@183 | 140 <input file icon=\"gtk-close\"></input> |
pankso@183 | 141 <action type=\"closewindow\">MOUNTED_DEVICE</action> |
pankso@183 | 142 </button> |
pankso@183 | 143 </hbox> |
pankso@183 | 144 </vbox> |
pankso@183 | 145 </window>" |
pankso@183 | 146 gtkdialog --center --program=MOUNTED_DEVICE |
pankso@183 | 147 else |
pascal@370 | 148 getdevinfo $MOUNTED |
pankso@183 | 149 RES=`df -h $MOUNTED | grep ^$MOUNTED` |
pankso@183 | 150 mounted_fs_data |
pankso@183 | 151 export MOUNTED_DEVICE=" |
pankso@183 | 152 <window title=\"Device: $MOUNTED\" icon-name=\"media-flash\"> |
pankso@183 | 153 <vbox> |
pankso@183 | 154 <text use-markup=\"true\" width-chars=\"56\"> |
pankso@183 | 155 <label>\" |
pankso@183 | 156 Device <b>$MOUNTED</b> is mounted on <b>$MOUNTED_ON</b> |
pankso@183 | 157 |
pascal@370 | 158 Size: $SIZE |
pankso@183 | 159 UUID: $UUID |
pankso@183 | 160 Type: $TYPE |
pascal@263 | 161 Label: $LABEL |
pankso@183 | 162 \" |
pankso@183 | 163 </label> |
pankso@183 | 164 </text> |
pankso@183 | 165 <hbox> |
pankso@183 | 166 <button> |
pankso@183 | 167 <label>Browse</label> |
pankso@183 | 168 <input file icon=\"folder-open\"></input> |
pankso@183 | 169 <action>pcmanfm $MOUNTED_ON &</action> |
pankso@183 | 170 <action type=\"closewindow\">MOUNTED_DEVICE</action> |
pankso@183 | 171 </button> |
pankso@183 | 172 <button> |
pankso@183 | 173 <label>Umount</label> |
pankso@183 | 174 <input file icon=\"undo\"></input> |
pankso@183 | 175 <action>umount $MOUNTED_ON</action> |
pankso@183 | 176 <action type=\"closewindow\">MOUNTED_DEVICE</action> |
pankso@183 | 177 </button> |
pankso@183 | 178 <button> |
pankso@183 | 179 <input file icon=\"gtk-close\"></input> |
pankso@183 | 180 <action type=\"closewindow\">MOUNTED_DEVICE</action> |
pankso@183 | 181 </button> |
pankso@183 | 182 </hbox> |
pankso@183 | 183 </vbox> |
pankso@183 | 184 </window>" |
pankso@183 | 185 gtkdialog --center --program=MOUNTED_DEVICE |
pankso@183 | 186 fi ;; |
pankso@183 | 187 umounted-fs-infos) |
MikeDSmith25@252 | 188 # Mounted fs info and actions, rootfs or other fs. |
pankso@183 | 189 # |
pascal@368 | 190 case "$DEVICE" in |
pascal@368 | 191 /dev/mapper/*) mdev=/dev/dm-$(ls -l $DEVICE | awk '{ print $6 }');; |
pascal@368 | 192 *) mdev=$DEVICE;; |
pascal@368 | 193 esac |
pascal@370 | 194 getdevinfo $mdev |
pankso@183 | 195 export UMOUNTED_DEVICE=" |
pankso@183 | 196 <window title=\"Device: $DEVICE\" icon-name=\"media-flash\"> |
pankso@183 | 197 <vbox> |
pankso@183 | 198 <text use-markup=\"true\" width-chars=\"56\"> |
pankso@183 | 199 <label>\" |
pankso@183 | 200 Mount <b>$DEVICE</b> on <b>$MOUNT_POINT</b> |
pankso@183 | 201 |
pascal@370 | 202 Size: $SIZE |
pankso@183 | 203 UUID: $UUID |
pankso@183 | 204 Type: $TYPE |
pascal@263 | 205 Label: $LABEL |
pankso@183 | 206 \" |
pankso@183 | 207 </label> |
pankso@183 | 208 </text> |
pankso@183 | 209 |
pankso@183 | 210 <hbox> |
pankso@183 | 211 <button> |
pankso@183 | 212 <label>Mount</label> |
pankso@183 | 213 <input file icon=\"edit-redo\"></input> |
pankso@183 | 214 <action>mkdir -p $MOUNT_POINT</action> |
pankso@183 | 215 <action>mount $DEVICE $MOUNT_POINT</action> |
pankso@183 | 216 <action type=\"closewindow\">MOUNTED_DEVICE</action> |
pascal@368 | 217 </button>" |
pascal@368 | 218 while read type fsck args; do |
pascal@368 | 219 [ "$TYPE" == "$type" ] || continue |
pascal@368 | 220 which $fsck > /dev/null || continue |
pascal@368 | 221 UMOUNTED_DEVICE="$UMOUNTED_DEVICE |
pankso@183 | 222 <button> |
pascal@368 | 223 <label>$fsck check</label> |
pankso@183 | 224 <input file icon=\"drive-harddisk\"></input> |
pascal@368 | 225 <action>xterm -T \"$fsck $args $DEVICE\" \ |
pascal@369 | 226 -geometry 80x12 \ |
pascal@368 | 227 -e \"echo; $fsck $args $DEVICE; \ |
pascal@369 | 228 echo -e '----\\nENTER to close Terminal'; \ |
pankso@183 | 229 read i\" &</action> |
pankso@183 | 230 <action type=\"closewindow\">MOUNTED_DEVICE</action> |
pascal@368 | 231 </button>" |
pascal@368 | 232 done <<EOT |
pascal@368 | 233 ext3 e2fsck -p |
pascal@368 | 234 ext2 e2fsck -p |
pascal@368 | 235 vfat dosfsck -a |
pascal@368 | 236 msdos dosfsck -a |
pascal@368 | 237 xfs fsck.xfs -s |
pascal@368 | 238 reiserfs reiserfsck --fix-fixable |
pascal@368 | 239 jfs jfs_fsck -a |
pascal@368 | 240 EOT |
pascal@368 | 241 UMOUNTED_DEVICE="$UMOUNTED_DEVICE |
pankso@183 | 242 <button> |
pankso@183 | 243 <input file icon=\"gtk-close\"></input> |
pankso@183 | 244 <action type=\"closewindow\">UMOUNTED_DEVICE</action> |
pankso@183 | 245 </button> |
pankso@183 | 246 </hbox> |
pankso@183 | 247 </vbox> |
pankso@183 | 248 </window>" |
pankso@183 | 249 gtkdialog --center --program=UMOUNTED_DEVICE ;; |
pascal@370 | 250 loopmgr) |
pascal@370 | 251 export LOOP_MANAGER=" |
pascal@370 | 252 <window title=\"Loop manager\" icon-name=\"media-flash\"> |
pascal@370 | 253 <vbox> |
pascal@370 | 254 <tree> |
pascal@370 | 255 <width>420</width><height>120</height> |
pascal@370 | 256 <variable>LOOP_DEV</variable> |
pascal@370 | 257 <label>Device|File|Size|Type|Label|Mounted on|Offset|UUID</label>" |
pascal@370 | 258 while read dev offset file; do |
pascal@370 | 259 DEV=$(echo $dev | cut -d: -f1) |
pascal@370 | 260 MOUNT=$(mount | grep ^$DEV | awk '{ print $3 }') |
pascal@370 | 261 getdevinfo $DEV |
pascal@370 | 262 LOOP_MANAGER="$LOOP_MANAGER |
pascal@370 | 263 <item>$DEV | $file | $SIZE | $TYPE | $LABEL | $MOUNT | $offset | $UUID</item> |
pascal@370 | 264 <action>/usr/lib/slitaz/libmountbox remove-loop</action> |
pascal@370 | 265 <action>/usr/lib/slitaz/libmountbox loopmgr &</action> |
pascal@370 | 266 <action type=\"closewindow\">LOOP_MANAGER</action> |
pascal@370 | 267 " |
pascal@370 | 268 done <<EOT |
pascal@370 | 269 $(losetup) |
pascal@370 | 270 EOT |
pascal@370 | 271 LOOP_MANAGER="$LOOP_MANAGER |
pascal@370 | 272 </tree> |
pascal@370 | 273 <hbox> |
pascal@370 | 274 <text use-markup=\"true\"> |
pascal@370 | 275 <label>\"<b>File</b>\"</label> |
pascal@370 | 276 </text> |
pascal@370 | 277 <entry accept=\"filename\"> |
pascal@370 | 278 <variable>FILE</variable> |
pascal@370 | 279 </entry> |
pascal@370 | 280 <button> |
pascal@370 | 281 <input file icon=\"folder-open\"></input> |
pascal@370 | 282 <action type=\"fileselect\">FILE</action> |
pascal@370 | 283 </button> |
pascal@370 | 284 </hbox> |
pascal@370 | 285 <hbox> |
pascal@370 | 286 <text use-markup=\"true\" width=\"10\"> |
pascal@370 | 287 <label>\"<b>Offset</b>\"</label> |
pascal@370 | 288 </text> |
pascal@370 | 289 <entry> |
pascal@370 | 290 <default>0</default> |
pascal@370 | 291 <variable>OFFSET</variable> |
pascal@370 | 292 </entry> |
pascal@370 | 293 <button> |
pascal@370 | 294 <label>Create</label> |
pascal@370 | 295 <input file icon=\"add\"></input> |
pascal@370 | 296 <action>/usr/lib/slitaz/libmountbox add-loop</action> |
pascal@370 | 297 <action>/usr/lib/slitaz/libmountbox loopmgr &</action> |
pascal@370 | 298 <action type=\"closewindow\">LOOP_MANAGER</action> |
pascal@370 | 299 </button> |
pascal@370 | 300 <button> |
pascal@370 | 301 <input file icon=\"gtk-close\"></input> |
pascal@370 | 302 <action type=\"closewindow\">LOOP_MANAGER</action> |
pascal@370 | 303 </button> |
pascal@370 | 304 </hbox> |
pascal@370 | 305 </vbox> |
pascal@370 | 306 </window>" |
pascal@370 | 307 gtkdialog --center --program=LOOP_MANAGER ;; |
pascal@370 | 308 remove-loop) |
pascal@370 | 309 getdevinfo $LOOP_DEV |
pascal@370 | 310 export REMOVE_DEVICE=" |
pascal@370 | 311 <window title=\"Device: $LOOP_DEV\" icon-name=\"media-flash\"> |
pascal@370 | 312 <vbox> |
pascal@370 | 313 <text use-markup=\"true\" width-chars=\"56\"> |
pascal@370 | 314 <label>\" |
pascal@370 | 315 Disable <b>$LOOP_DEV</b> ? |
pascal@370 | 316 |
pascal@370 | 317 Size: $SIZE |
pascal@370 | 318 UUID: $UUID |
pascal@370 | 319 Type: $TYPE |
pascal@370 | 320 Label: $LABEL |
pascal@370 | 321 \" |
pascal@370 | 322 </label> |
pascal@370 | 323 </text> |
pascal@370 | 324 <hbox> |
pascal@370 | 325 <button yes> |
pascal@370 | 326 <action>umount $LOOP_DEV</action> |
pascal@370 | 327 <action>losetup -d $LOOP_DEV</action> |
pascal@370 | 328 <action type=\"closewindow\">LOOP_MANAGER</action> |
pascal@370 | 329 <action>/usr/lib/slitaz/libmountbox loopmgr &</action> |
pascal@370 | 330 <action type=\"closewindow\">REMOVE_DEVICE</action> |
pascal@370 | 331 </button> |
pascal@370 | 332 <button no> |
pascal@370 | 333 <action type=\"closewindow\">REMOVE_DEVICE</action> |
pascal@370 | 334 </button> |
pascal@370 | 335 </hbox> |
pascal@370 | 336 </vbox> |
pascal@370 | 337 </window>" |
pascal@370 | 338 gtkdialog --center --program=REMOVE_DEVICE ;; |
pascal@370 | 339 add-loop) |
pascal@370 | 340 losetup -o $OFFSET $(losetup -f) $FILE |
pascal@370 | 341 ;; |
pankso@183 | 342 *) |
pankso@183 | 343 usage ;; |
pankso@183 | 344 esac |
pankso@183 | 345 |
pankso@183 | 346 exit 0 |