How to auto-mount from command line?
Solution 1:
You can use:
udisksctl mount -b device_name
where device_name
is the name of a storage device and should look something like /dev/sdb1
.
Using lsblk
or sudo fdisk -l
command you can find out all storage devices attached to your system.
Solution 2:
gio mount
gvfs is now listed as deprecated (2018) and you are advised to use 'gio' which is Gnome In Out and part of Glib. See Wikipedia.
For example, to auto-mount a second drive partition; create a bash script with executable permission to run at start-up with the following command:
gio mount -d /dev/sda2
If you are owner of the partition (see chown
) you won't need sudo.
To mount an ISO file located for example on ~/ISOs
:
gio mount "archive://file%3A%2F%2F%2Fhome%2Fpablo%2FISOs%2Fubuntu-18.04-desktop-amd64.iso"
You could URL encode the path with Python 3 and realpath
(to concatenate to archive://
:
python -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1], \"\"))" "file://$(realpath ubuntu-18.04-desktop-amd64.iso)"
This will mount on /run/user/$(id -u)/gvfs/
.
As an alternative gnome-disk-image-mounter
will moount on /media/$USER/
.
To unmount use gio mount -u /run/user/$(id -u)/gvfs/archive*
(or /media/$USER/
, depending the way you mounted).
udisksctl
Listing available devices:
udisksctl status
Mounting is done via:
udisksctl mount -b /dev/sdf
or
udisksctl mount -p block_devices/sdf
Unmounting is done via:
udisksctl unmount -b /dev/sdf
or
udisksctl unmount -p block_devices/sdf
The object-path
can be found out by doing:
udisksctl dump
Object of type org.freedesktop.UDisks2.Block
seem to be valid as object-patch
, the /org/freedesktop/UDisks2/
prefix has to be cut from the path for udisksctl to accept them.
gvfs-mount
Listing available devices can be done with:
gvfs-mount --list
Mounting them can be done with:
gvfs-mount -d /dev/sdf
Unmounting is possible via:
gvfs-mount --unmount /media/user/01234567890
One remaining problem is that I have no idea how to use the gvfs-mount --list
output in a mount command, as --list
won't show block device names and trying to use the device names it prints in a mount will result in:
Error mounting location: volume doesn't implement mount
Conclusion
While both gvfs-mount
and udisksctl
will work for the tasks, their interface is impractical as they don't provide human readable status of the disks available, just an overly verbose info dump.
Solution 3:
A simple solution that works as required (mounts to /media/{user}/{diskid}) except that it can not list devices but needs to be given the exact, case sensitive, volume label as argument $1
To mount:
DEVICE=$(findfs LABEL=$1) && udisksctl mount -b $DEVICE
To unmount:
DEVICE=$(findfs LABEL=$1) && udisksctl unmount -b $DEVICE
Solution 4:
I wrote this Bash script to work around this problem, but be aware that I'm a scripting newbie. All suggestions welcome! Usage and description follow below the script.
#!/bin/bash
# umanage.sh
# 2014-05-05
BASEPATH="/media/$(whoami)/"
RESULTS=$(udisksctl dump | grep IdLabel | grep -c -i "$1")
case "$RESULTS" in
0 ) echo "Nothing found."
;;
1 ) DEVICELABEL=$(udisksctl dump | grep IdLabel | grep -i "$1" | cut -d ":" -f 2 | sed 's/^[ \t]*//')
DEVICE=$(udisksctl dump | grep -i "IdLabel: \+$DEVICELABEL" -B 12 | grep " Device:" | cut -d ":" -f 2 | sed 's/^[ \t]*//')
DEVICEPATH="$BASEPATH""$DEVICELABEL"
if [[ -z $(mount | grep "$DEVICE") ]]
then
echo "Found unmounted $DEVICE partition."
echo "Do you want to mount it in $DEVICEPATH?"
select yn in "Mount" "Ignore"
do
case $yn in
Mount ) udisksctl mount -b "$DEVICE"
break
;;
Ignore ) exit
;;
esac
done
else
echo "Found $DEVICE partition, currently mounted in $DEVICEPATH."
echo "Do you want to unmount it?"
select yn in "Unmount" "Ignore"
do
case $yn in
Unmount ) udisksctl unmount -b "$DEVICE"
break
;;
Ignore ) exit
;;
esac
done
fi
;;
* ) if [ $# -eq 0 ]
then
echo "No argument supplied"
else
echo "$RESULTS possible results. You may be looking for:"
echo
udisksctl dump | grep IdLabel | grep -i "$1" | cut -d ":" -f 2 | sed 's/^[ \t]*//' | sed '/^$/d'
echo
echo "Please refine your search."
fi
;;
esac
Usage:
- save the script as umanage.sh
- make it executable: chmod +x umanage.sh
- run it: ./umanage.sh YourDeviceLabel
The script accepts as an argument the label of the partition you want to mount and looks in the udisksctl dump for corresponding entries.
If a partition is found and it's not mounted, device name and path are shown and you're offered to mount the partition. The script searches for partial labels too, and it won't care about upper or lower case (useful when you don't remember the exact label).
./umanage.sh PASSPORT
Found unmounted /dev/sdf1 partition.
Do you want to mount it in /media/pixel/My Passport?
1) Mount
2) Ignore
#?
If a partition is found and it's already mounted, you're offered to unmount it:
./umanage.sh passp
Found /dev/sdf1 partition, currently mounted in /media/open/My Passport.
Do you want to unmount it?
1) Unmount
2) Ignore
#?
If your argument matches more than a result, the script shows you the matching partition labels and asks you to refine the search:
./umanage.sh SS
2 possible results. You may be looking for:
SSD-9GB
My Passport
Please refine your search.
Solution 5:
Just ran into the issue myself, and found the following solution:
udisksctl mount -b /dev/disk/by-labels/$LABEL
It will ask for the user password, even if it's you and you're already logged in.