How to Mount an External Hard Drive on Linux

Linux Basics · Storage · Beginner Guide

How to Mount an External Hard Drive on Linux

The short version of every step is right here. Tap “More detailed info” on any step when you want the full why-it-works explanation.

First, what does “mounting” mean?

On Windows, plugging in a drive gives it a letter like E:\ automatically. Linux doesn’t — it makes you mount the drive, which just means: attach the drive’s contents to a folder on your filesystem.

Picture your Linux filesystem as one big tree starting at /. An unmounted drive is a box sitting on the floor, not connected to anything. Mounting grafts that box’s contents onto a folder — a mount point — so that opening the folder means you’re looking inside the drive.

Block device
The drive itself — e.g. /dev/sdh, the whole physical disk.
Partition
A slice of that disk, e.g. /dev/sdh1. You mount a partition, almost never the raw disk.
Filesystem
The format data is written in: ntfs (Windows), ext4 (Linux), exfat / vfat (cross-platform).
Mount point
An empty folder that becomes the “door” into the drive once mounted.

The steps

01

Find your drive’s device name

Every drive Linux can see gets a name like /dev/sdh. Find yours before doing anything else.

you type
$ lsblk
More detailed infoLess info

You’ll see something like this:

you’ll see
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0  500G  0 disk
└─sda1   8:1    0  500G  0 part /
sdh      8:112  0 10.9T  0 disk
└─sdh1   8:113  0 10.9T  0 part

Here, sdh is the new external drive (10.9T, no mount point yet) and sdh1 is its one partition. Your internal disk (sda) shows what “already mounted” looks like — notice the / under MOUNTPOINTS.

How do you know which one is your drive?

Compare the size to what you’d expect, and confirm it appeared only after you plugged the drive in — unplug it and re-run lsblk if you’re unsure; the entry will disappear.

02

Check what filesystem it’s using

Find out which “language” the drive speaks — Windows, Linux, or a universal format — so you tell Linux how to read it correctly.

you type
$ lsblk -f
More detailed infoLess info
you’ll see
NAME   FSTYPE FSVER LABEL     UUID                     FSAVAIL FSUSE% MOUNTPOINTS
sdh
└─sdh1 ntfs         easystore F402AD5802AD209A

FSTYPE here is ntfs — this drive was formatted on a Windows machine, common for pre-formatted external drives. Other values you might see:

ext4 — native Linux  ·  exfat — cross-platform, common on newer USB drives  ·  vfat — older cross-platform format (FAT32)

This matters because NTFS isn’t natively read/write-safe in the Linux kernel the way ext4 is — it needs a helper driver called ntfs-3g (Step 4).

03

Create a mount point

Pick or create an empty folder that will act as the “door” into your drive.

you type
$ mkdir -p ~/myEasyStore
More detailed infoLess info

It can be anywhere you have write access — a common convention is /mnt/something or /media/something for system-wide mounts, or just a folder in your home directory for personal use.

-p means “create parent folders too if needed, and don’t error if it already exists.” The folder should ideally be empty — if it already has files in it, those files are hidden (not deleted, just inaccessible) while something is mounted on top.

04

Install the right driver (NTFS only)

If the drive is NTFS, install one small helper program — ntfs-3g — before you try to mount it.

you type
$ which ntfs-3g
More detailed infoLess info

If that prints a path (e.g. /usr/bin/ntfs-3g), you’re set. If nothing prints, install it:

you type
$ sudo apt install ntfs-3g  Debian/Ubuntu
$ sudo dnf install ntfs-3g  Fedora
$ sudo pacman -S ntfs-3g   Arch

If your drive is ext4, exfat, or vfat, the kernel usually handles it natively and you can skip this step (for exfat on older distros you may need exfatprogs or exfat-utils).

05

Mount it

The actual command that attaches the drive to your folder. It always needs sudo.

you type
$ sudo mount -t ntfs-3g -o uid=$(id -u),gid=$(id -g) \
    /dev/sdh1 ~/myEasyStore
More detailed infoLess info

Breaking that down, piece by piece:

PieceMeaning
sudoRun as root — required to mount devices.
mountThe command that does the attaching.
-t ntfs-3g“Use the ntfs-3g driver to interpret this filesystem.” Swap in -t ext4, -t vfat, etc. for other types — or often you can omit -t and let mount auto-detect it.
-o uid=…,gid=…Ownership option. NTFS/FAT has no concept of Linux users, so without this, files often show up owned by root, locking out your normal account. $(id -u) / $(id -g) auto-fill your user and group ID.
/dev/sdh1The partition you’re mounting — not /dev/sdh, the raw disk.
~/myEasyStoreThe mount point folder from Step 3.

For an ext4 drive, ownership already exists inside the filesystem, so you’d typically just run:

you type
$ sudo mount /dev/sdh1 ~/myEasyStore
06

Verify it worked

Double-check the drive is really mounted before you trust it with your files.

you type
$ df -h ~/myEasyStore
More detailed infoLess info

If mounted correctly, you’ll see the drive listed with its size and usage:

you’ll see
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdh1        11T  3.2T  7.8T  30% /home/you/myEasyStore

You can also just ls ~/myEasyStore and see the drive’s actual files appear.

Sanity check tip: mount | grep sdh1 shows the exact options it mounted with — handy if something (like ownership) doesn’t look right.

07

Unmount safely before unplugging

Never just yank the cable. Unmounting flushes any data still waiting to be written and detaches the drive cleanly.

you type
$ sudo umount ~/myEasyStore
More detailed infoLess info

To keep things fast, Linux doesn’t always write data to the physical disk the instant a copy “finishes” — it buffers writes in memory and flushes them shortly after. Pull the drive before that flush happens and a file can end up incomplete, or the filesystem’s own bookkeeping can get corrupted. umount exists specifically to force that flush before you disconnect.

a. Make sure nothing is still using it

A terminal cd’d into the folder, or a program with a file open, will make umount refuse with “target is busy.” Find the culprit:

you type
$ sudo fuser -vm ~/myEasyStore
b. Flush any pending writes (optional)

umount does this automatically, but if you just finished a large copy, it’s a good habit to watch it settle first:

you type
$ sync
c. Unmount
you type
$ sudo umount ~/myEasyStore

Once this returns without error, it’s safe to remove the drive — even without running sync yourself.

d. Power the drive down first (optional)

The command-line equivalent of “Safely Remove Hardware,” useful for drives that spin down slowly:

you type
$ udisksctl power-off -b /dev/sdh
e. Physically disconnect

Once umount (or power-off) has returned cleanly and the activity light is idle, unplug the cable.

Optional · Advanced

Want it to mount automatically every boot?

Skip this if a one-off mount is all you need — everything above only lasts until you unmount or reboot.

More detailed infoLess info

To make a drive show up at the same folder every boot — no sudo mount needed — you register it in /etc/fstab (“filesystem table”), a config file the OS reads at every boot.

Careful: a wrong line here can make some systems fail to boot cleanly, since the OS tries to mount everything listed early in startup. Not dangerous to your data — just worth double-checking. The nofail option below exists specifically to prevent that.
A. Get a stable identifier (UUID)

Device names like /dev/sdh1 can shift if you plug in another USB device first. fstab entries should reference the partition’s UUID instead — a fixed ID that never changes.

you type
$ sudo blkid /dev/sdh1
you’ll see
/dev/sdh1: LABEL="easystore" UUID="F402AD5802AD209A" TYPE="ntfs"
B. Back up fstab first
you type
$ sudo cp /etc/fstab /etc/fstab.backup
C. Add the entry
you type
$ sudo nano /etc/fstab

Add a new line at the bottom — don’t touch the existing lines above it:

add this line
UUID=F402AD5802AD209A  /home/you/myEasyStore  ntfs-3g  defaults,uid=1000,gid=1000,nofail  0  0
ColumnMeaning
UUIDThe stable ID from step A instead of a device name that can change.
Mount pointFull absolute path — fstab doesn’t expand ~.
Filesystem typeSame as the -t flag used with mount earlier.
Optionsdefaults is a sane bundle; uid/gid give you ownership; nofail tells boot “skip this drive if it’s missing, don’t hang or error.”
Dump / PassLegacy flags — 0 0 is standard for external drives.
D. Test without rebooting
you type
$ sudo umount ~/myEasyStore
$ sudo mount -a

mount -a reads all of fstab and mounts anything not already mounted — if your new line has an error, it prints immediately, so you can fix it before rebooting. Confirm with df -h ~/myEasyStore.

To undo: remove (or comment out with a leading #) the line you added, or restore your Step B backup.

If something breaks

Troubleshooting common mount errors

Mount error messages are usually terse and unfriendly. Here’s what the common ones actually mean.

More detailed infoLess info

mount: only root can mount /dev/sdh1 on …

You forgot sudo. Mounting is always a privileged operation — rerun the same command with sudo in front.

mount: special device /dev/sdh1 does not exist

The device name is wrong, or the drive isn’t connected. Re-run lsblk — drive letters shift if other USB devices were plugged/unplugged since you last checked.

mount: unknown filesystem type ‘ntfs’ (or ‘exfat’)

The needed driver isn’t installed. For NTFS, use -t ntfs-3g explicitly and confirm it’s installed (Step 4). For exFAT, install exfatprogs or exfat-utils/exfat-fuse.

wrong fs type, bad option, bad superblock …

Usually one of: wrong -t filesystem type, a missing driver, or you pointed at the raw disk (/dev/sdh) instead of the partition (/dev/sdh1). Run sudo dmesg | tail -20 right after — the kernel log usually has the specific reason.

mount: …: mount point does not exist

The folder from Step 3 hasn’t been created, or the path is mistyped. Run mkdir -p ~/myEasyStore and try again.

mount: …: already mounted or mount point busy

Either the drive is already mounted elsewhere (check mount | grep sdh1 — your desktop may have auto-mounted it at /media/you/…), or another filesystem already occupies that exact mount point.

Permission denied when reading/writing after mounting

Ownership wasn’t set up for your user — add the uid=$(id -u),gid=$(id -g) options from Step 5. On ext4, fix with sudo chown -R $(id -u):$(id -g) ~/myEasyStore (only on drives you fully control).

Input/output error while browsing or copying

Usually a hardware issue — a failing drive, bad cable, or flaky enclosure. Check sudo dmesg | tail -30. Try a different cable/port first; back up immediately if errors persist.

NTFS: $MFTMirr does not match $MFT / “Windows is hibernated”

NTFS carries a “dirty” flag Windows sets when not cleanly unmounted — including hibernation. Fully Shut Down Windows (not hibernate) and retry, or force-clear it with sudo ntfsfix /dev/sdh1 only if you’re confident nothing was mid-write.

General tip: whenever an error doesn’t make sense on its own, run sudo dmesg | tail -30 right after. The kernel log almost always has the fuller story.

Fast facts worth remembering

  • Mount the partition, not the disk. /dev/sdh1, not /dev/sdh — the raw disk usually isn’t directly mountable.
  • Root-owned files after mounting? You forgot uid=/gid= (NTFS/FAT), or need sudo chown on ext4.
  • “Only root can mount” is normal. That’s exactly why the command starts with sudo.
  • Use UUID=, not /dev/sdX, in fstab. Device letters shift when other USB devices are plugged in — UUIDs don’t.
  • Always include nofail in fstab. It keeps your system booting even if the drive is unplugged.

Quick reference

cheat sheet
lsblk                                              # 1. find the device name
lsblk -f                                           # 2. find the filesystem type
mkdir -p ~/myEasyStore                             # 3. create mount point
sudo mount -t ntfs-3g -o uid=$(id -u),gid=$(id -g) \
    /dev/sdh1 ~/myEasyStore                        # 4. mount
df -h ~/myEasyStore                                # 5. verify
sudo fuser -vm ~/myEasyStore                       # 6. check nothing's using it
sudo umount ~/myEasyStore                          # 7. unmount when done
udisksctl power-off -b /dev/sdh                    # 8. optional: full power-down
Adapted from a hands-on walkthrough of mounting a 10.9 TB NTFS drive on a Fedora-based system.

Feel free to visit the other sections