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
Find your drive’s device name
Every drive Linux can see gets a name like /dev/sdh. Find yours before doing anything else.
$ lsblkMore detailed infoLess info
You’ll see something like this:
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.
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.
$ lsblk -fMore detailed infoLess info
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdh
└─sdh1 ntfs easystore F402AD5802AD209AFSTYPE 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).
Create a mount point
Pick or create an empty folder that will act as the “door” into your drive.
$ mkdir -p ~/myEasyStoreMore 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.
Install the right driver (NTFS only)
If the drive is NTFS, install one small helper program — ntfs-3g — before you try to mount it.
$ which ntfs-3gMore detailed infoLess info
If that prints a path (e.g. /usr/bin/ntfs-3g), you’re set. If nothing prints, install it:
$ 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).
Mount it
The actual command that attaches the drive to your folder. It always needs sudo.
$ sudo mount -t ntfs-3g -o uid=$(id -u),gid=$(id -g) \
/dev/sdh1 ~/myEasyStoreMore detailed infoLess info
Breaking that down, piece by piece:
| Piece | Meaning |
|---|---|
sudo | Run as root — required to mount devices. |
mount | The 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/sdh1 | The partition you’re mounting — not /dev/sdh, the raw disk. |
~/myEasyStore | The mount point folder from Step 3. |
For an ext4 drive, ownership already exists inside the filesystem, so you’d typically just run:
$ sudo mount /dev/sdh1 ~/myEasyStoreVerify it worked
Double-check the drive is really mounted before you trust it with your files.
$ df -h ~/myEasyStoreMore detailed infoLess info
If mounted correctly, you’ll see the drive listed with its size and usage:
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.
Unmount safely before unplugging
Never just yank the cable. Unmounting flushes any data still waiting to be written and detaches the drive cleanly.
$ sudo umount ~/myEasyStoreMore 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:
$ sudo fuser -vm ~/myEasyStoreb. 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:
$ syncc. Unmount
$ sudo umount ~/myEasyStoreOnce 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:
$ udisksctl power-off -b /dev/sdhe. Physically disconnect
Once umount (or power-off) has returned cleanly and the activity light is idle, unplug the cable.
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.
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.
$ sudo blkid /dev/sdh1/dev/sdh1: LABEL="easystore" UUID="F402AD5802AD209A" TYPE="ntfs"
B. Back up fstab first
$ sudo cp /etc/fstab /etc/fstab.backupC. Add the entry
$ sudo nano /etc/fstabAdd a new line at the bottom — don’t touch the existing lines above it:
UUID=F402AD5802AD209A /home/you/myEasyStore ntfs-3g defaults,uid=1000,gid=1000,nofail 0 0
| Column | Meaning |
|---|---|
| UUID | The stable ID from step A instead of a device name that can change. |
| Mount point | Full absolute path — fstab doesn’t expand ~. |
| Filesystem type | Same as the -t flag used with mount earlier. |
| Options | defaults 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 / Pass | Legacy flags — 0 0 is standard for external drives. |
D. Test without rebooting
$ 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.
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.
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 needsudo chownon 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
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