How to Mount a Drive in Linux

March 18, 2023

In this article, I will tell you how to mount and unmount a drive (hard drive, SSD, pen drive, android device) using mount/umount, gio, and udisksctl commands in Linux.

Installation and early preparation

Before mounting any device in Linux, make sure that you have installed appropriate packages such as NTFS-3g for NTFS file system, dosfstools for file systems of the FAT family, and mtools for MS-DOS disks (typically a floppy disk). I will talk about further installations in the upcoming headings.

How to mount a drive in Linux using the mount command

The mount command in Linux is a very powerful command. Using it you can do a lot of things.

Basic structure of mount command:

$ sudo mount <source> <destination>

Where, <source> is the drive you want to mount and <destination> is the location where you want to mount.

The name of the <source> device can be obtained using the lsblk command:

 lsblk --paths
NAME             MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
/dev/loop0         7:0    0    56G  0 loop /mnt/VHD
/dev/nvme1n1     259:0    0 931.5G  0 disk 
├─/dev/nvme1n1p1 259:1    0    16M  0 part 
└─/dev/nvme1n1p2 259:2    0 931.5G  0 part

Example:

$ sudo mount /dev/nvme1n1p2 /mnt/crucial

You can also omit the <destination>. In that case, mount will search for it in the /etc/fstab file. So, you need to configure the file for this functionality.

$ sudo mount /dev/sdb1

How to mount a device using its UUID

You can also mount your drives using UUID:

$ sudo mount UUID=bd4da364-6f99-4859-8ca4-326c89e9b11f /mnt/Crucial

To find a device's UUID, look into /dev/disk/by-uuid/. All the drives are symlinked:

$ ls -al '/dev/disk/by-uuid' 
total 0
drwxr-xr-x 2 root root 160 Mar 16 18:42 .
drwxr-xr-x 9 root root 180 Mar 16 18:41 ..
lrwxrwxrwx 1 root root  15 Mar 16 18:42 00E8EAD5E8EAC7CC -> ../../nvme0n1p3
lrwxrwxrwx 1 root root  11 Mar 16 18:42 5627befe-b7a4-48c7-ae19-a71689a67d7e -> ../../loop0
lrwxrwxrwx 1 root root  15 Mar 16 18:42 B2E8-9A01 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root  15 Mar 16 18:42 E4CA6C29CA6BF5E8 -> ../../nvme1n1p2
lrwxrwxrwx 1 root root  15 Mar 16 18:42 EAD2EB39D2EB08A1 -> ../../nvme0n1p4
lrwxrwxrwx 1 root root  15 Mar 16 18:42 fc986af0-b252-4c73-a921-a7cb75eb4c5f -> ../../nvme0n1p5

How to mount a device using its PARTUUID

Similarly, you can also use the PARTUUID variable to identify your partition:

$ sudo mount PARTUUID=partuuid /mnt/crucial

Here, to find the PARTUUID of a drive, look into /dev/disk/by-partuuid/ directory.

Using PARTUUID is more robust since it is independent of the file system and hence, cannot be changed by mkfs and mkswap command. On the other hand, UUID gets changed when we format a drive.

How to mount iso images and virtual hard disks in Linux

You can also use the mount command to mount an *.iso image to read/copy its content. The mount command can also mount virtual Hard disks. For this, use -o loop:

$ sudo mount -o loop /media/VHD.img /mnt/VHD/
$ sudo mount -o loop /media/iso_file.iso /mnt/iso/

Where, loop is used to mount the file to loop device (/dev/loopn where, n is the next remaining loop number). you can use loop=/dev/loop0 instead of loop to mount at the loop0.

The result can be seen in the output of df:

$ df                  
Filesystem     1K-blocks      Used Available Use% Mounted on
dev              7060864         0   7060864   0% /dev
run              7081468      1380   7080088   1% /run
/dev/nvme0n1p5  57135216  33081828  21118604  62% /
tmpfs            7081468     67376   7014092   1% /dev/shm
tmpfs            7081468      3368   7078100   1% /tmp
/dev/nvme1n1p2 976744444 552065892 424678552  57% /mnt/crucial
/dev/nvme0n1p1    262144     35772    226372  14% /boot/EFI
/dev/loop0      57483360  18569620  35961344  35% /mnt/VHD
tmpfs            1416292      3160   1413132   1% /run/user/1000

What are 'bind mounts' in the mount command in Linux

To get changes in one directory reflected in another, you need to use 'bind mounts'. The flag --bind in mount enables you to use this feature.

Command structure:

sudo mount --bind <source> <destination>

Example:

$ sudo mount --bind dir1 dir2

Create these directories and tries to create some files, do many things. You can see that the contents of both are the same.

📝 Note: to mount a hard disk or SSD automatically at boot, you will need to set the corresponding entries in the fstab file /etc/fstab. After the fstab entry, your computer automatically unmounts your drive before shutting itself down as can be seen in the journalctl | grep <location>:

$ journalctl | grep /mnt/Maxtor

'unmounted /mnt/Maxtor'

How to mount a device in linux using udiskctl

To install udisks, execute one of the following commands:

Debian

apt-get install udisks2

Ubuntu

apt-get install udisks2

Alpine

apk add udisks2

Arch Linux

pacman -S udisks2

Kali Linux

apt-get install udisks2

CentOS

yum install udisks2

Fedora

dnf install udisks2

Windows (WSL2)

sudo apt-get update sudo apt-get install udisks2

Raspbian

apt-get install udisks2

Source: command-not-found

Udisksctl is one of the simplest methods to mount a removable drive. Unlike mount command, it does not require a sudo password.

For example, to mount a drive /dev/sdc1 in /run/media/$USER/ folder, execute the command:

$ udisksctl mount --block-device=/dev/sdc1

How to mount using a device using 'gio mount' in Linux

Like udiskctl, it also does not require root permissions.

Most of the linux distributions already install it. You can test whether it is installed or not by using which command:

$ which gio
/usr/bin/gio

Or, if it is not installed, try installing glib (glib2 or something like that depending upon your distro). Check command-not-found for your package providing the gio command.

For all available options in gio mount, execute the command:

$ gio mount

gio: No locations given

Usage:
  gio mount [OPTION…] [LOCATION…]

Mount or unmount the locations.

Options:
  -m, --mountable                 Mount as mountable
  -d, --device=ID                 Mount volume with device file, or other identifier
  -u, --unmount                   Unmount
  -e, --eject                     Eject
  -t, --stop=DEVICE               Stop drive with device file
  -s, --unmount-scheme=SCHEME     Unmount all mounts with the given scheme
  -f, --force                     Ignore outstanding file operations when unmounting or ejecting
  -a, --anonymous                 Use an anonymous user when authenticating
  -l, --list                      List
  -o, --monitor                   Monitor events
  -i, --detail                    Show extra information
  --tcrypt-pim=PIM                The numeric PIM when unlocking a VeraCrypt volume
  --tcrypt-hidden                 Mount a TCRYPT hidden volume
  --tcrypt-system                 Mount a TCRYPT system volume

Example:

$ gio mount --device=/dev/bus/usb/001/015

The above will mount /dev/bus/usb/001/015 at /run/media/$USER. Similarly, you can mount /dev/sda1

After mounting the device, you can check it using --list (focus on underlined outputs):

$ gio mount --list --detail

...
Drive(2): Kingston DataTraveler 3.0
  Type: GProxyDrive (GProxyVolumeMonitorUDisks2)
  ids:
   unix-device: '/dev/sda'
  themed icons:  [media-removable]  [media]  [media-removable-symbolic]  [media-symbolic]
  symbolic themed icons:  [media-removable-symbolic]  [media-symbolic]  [media-removable]  [media]
  is_removable=1
  is_media_removable=0
  has_media=1
  is_media_check_automatic=1
  can_poll_for_media=0
  can_eject=1
  can_start=0
  can_stop=1
  start_stop_type=shutdown
  sort_key=01hotplug/1661971449133300
  Volume(0): 31 GB Volume
    Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
    ids:
     class: 'device'
     unix-device: '/dev/sda1'
     uuid: 'DDF8-FB82'
    uuid=DDF8-FB82
    themed icons:  [drive-harddisk-usb]  [drive-harddisk]  [drive]  [drive-harddisk-usb-symbolic]  [drive-harddisk-symbolic]  [drive-symbolic]
    symbolic themed icons:  [drive-harddisk-usb-symbolic]  [drive-harddisk-symbolic]  [drive-symbolic]  [drive-harddisk-usb]  [drive-harddisk]  [drive]
    can_mount=0
    can_eject=1
    should_automount=0
    sort_key=gvfs.time_detected_usec.1661971449235103
    Mount(0): 31 GB Volume -> file:///run/media/ajay/DDF8-FB82
      Type: GProxyMount (GProxyVolumeMonitorUDisks2)
      default_location=file:///run/media/ajay/DDF8-FB82
      themed icons:  [drive-harddisk-usb]  [drive-harddisk]  [drive]  [drive-harddisk-usb-symbolic]  [drive-harddisk-symbolic]  [drive-symbolic]
      symbolic themed icons:  [drive-harddisk-usb-symbolic]  [drive-harddisk-symbolic]  [drive-symbolic]  [drive-harddisk-usb]  [drive-harddisk]  [drive]
      can_unmount=1
      can_eject=1
      is_shadowed=0
      sort_key=gvfs.time_detected_usec.1661972834014018
Volume(0): Mi A3
  Type: GProxyVolume (GProxyVolumeMonitorMTP)
  ids:
   unix-device: '/dev/bus/usb/001/005'
  activation_root=mtp://Xiaomi_Mi_A3_be7541f9d27f/
  themed icons:  [phone]
  symbolic themed icons:  [phone-symbolic]  [phone]
  can_mount=1
  can_eject=0
  should_automount=1
  Mount(0): Mi A3 -> mtp://Xiaomi_Mi_A3_be7541f9d27f/
    Type: GProxyShadowMount (GProxyVolumeMonitorMTP)
    default_location=mtp://Xiaomi_Mi_A3_be7541f9d27f/
    themed icons:  [phone]
    symbolic themed icons:  [phone-symbolic]  [phone]
    can_unmount=1
    can_eject=0
    is_shadowed=0
Mount(1): mtp -> mtp://Xiaomi_Mi_A3_be7541f9d27f/
  Type: GDaemonMount
  default_location=mtp://Xiaomi_Mi_A3_be7541f9d27f/
  themed icons:  [multimedia-player]  [multimedia]  [multimedia-player-symbolic]  [multimedia-symbolic]
  symbolic themed icons:  [drive-removable-media-symbolic]
  can_unmount=1
  can_eject=0
  is_shadowed=1

Note: The gio can also mount Android devices. For that, install gvfs-mtp in Arch Linux (in Ubuntu and other distros it might already be there). Just connect your phone using a USB cable, unlock it, set USB USE FOR File Transfer in your phone, and mount using the above command. It will be mounted in /run/user/1000/gvfs.

How to unmount a drive in Linux

Unmount using umount command

Please note that it is umount not unmount.

Here, only <source> of drive or <destination> i.e. file path location where the drive is mounted needs to be given.

The general syntax to unmount is:

$ sudo umount <destination>

Or,

$ sudo umount <source>

Example 1:

$ sudo umount /mnt/crucial

Example 2:

$ sudo umount /dev/sdb1

--recursive flag unmounts all the drives mounted in the given location. For example the command

$ umount --recursive /mnt

will unmount all drives mount in the /mnt location.

If umount is unable to unmount a drive due to some reason (say, still in use), you can unmount it 'lazily' using -l flag. It will completely halt the job and prevent the system from hanging during reboot.

umount -l /mnt

Unmount using udisksctl

To safely remove and power off a drive, use the command:

udisksctl power-off --block-device=/dev/sdc

It will close all the processes associated with the drive. All files, if any, will be written to the device. It is similar to the 'eject' in Windows. Now, you can safely eject the hard disk from your pc.

Unmount using gio

To unmount using gio, you just need to supply the location where the device is mounted:

$ gio mount --unmount /run/media/ajay/DDF8-FB82

On the other hand, gio mount --stop ejects the device. For example,

$ gio mount --stop=/dev/sda

Conclusion

That's all folks. To know more about them read their man pages. And if you have any queries or suggestions, use the comment section below. Thanks.