In Unix-like systems, a mount point serves as the access gateway for filesystems. Think of it like a USB port on your computer - you need the physical connector (directory) before plugging in the device (mounting the share). The directory acts as:
- A namespace entry in the filesystem hierarchy
- A container for filesystem metadata
- An anchor point for the mounted filesystem's root
When you execute:
mkdir /mnt/share
mount -t nfs server:/path /mnt/share
The kernel performs these operations:
- Checks directory existence via VFS (Virtual File System)
- Validates mount permissions (requires CAP_SYS_ADMIN)
- Registers the new filesystem in the kernel's mount table
- Attaches the remote filesystem to the directory's inode
Different protocol examples:
# NFSv4 Example
mkdir /data/nfs
mount -t nfs4 nfs-server:/exports /data/nfs
# SMB/CIFS Example
mkdir /mnt/win_share
mount -t cifs //server/share /mnt/win_share -o username=user,password=pass
# AFP (Apple Filing Protocol)
mkdir /Volumes/TimeMachine
mount_afp afp://user:pass@timecapsule.local/Backups /Volumes/TimeMachine
The Unix philosophy explains this design:
- Explicit over implicit behavior
- Failure visibility (mkdir might fail separately)
- Permission separation (mkdir vs mount privileges)
- Prevents accidental mounts to wrong locations
For automation scenarios, consider these approaches:
# Conditional directory creation
[ ! -d "/mnt/auto" ] && mkdir -p /mnt/auto
# Systemd automount example (in .mount unit file)
[Unit]
Description=Automount NFS Share
[Mount]
What=nfs-server:/export
Where=/mnt/auto
Type=nfs
Options=auto,soft
When mounts fail after directory creation:
- Verify directory permissions (usually 755)
- Check for existing files (mounts fail on non-empty dirs)
- Confirm parent directory existence
- Test with absolute paths
In Unix-like systems, mounting requires an existing directory as an access point because:
- The mount operation replaces the directory's existing contents with the new filesystem's root
- The directory serves as a placeholder that will be "covered" by the mounted filesystem
- This design maintains namespace consistency across the filesystem hierarchy
Different mounting scenarios all follow this pattern:
# NFS Mount Example
mkdir /mnt/nfs_share
mount -t nfs 192.168.1.100:/export/data /mnt/nfs_share
# SMB/CIFS Example
mkdir /media/windows_share
mount -t cifs //server/share /media/windows_share -o username=user,password=pass
# SSHFS Example
mkdir ~/remote_files
sshfs user@remotehost:/path ~/remote_files
The Linux VFS (Virtual Filesystem Switch) layer treats mount points as special directory inodes that:
- Must exist before mounting
- Become "hidden" when the new filesystem is mounted over them
- Reappear when the filesystem is unmounted
When dealing with automounting or scripts:
#!/bin/bash
# Safe mounting pattern
MOUNT_POINT="/Volumes/network_drive"
[ -d "$MOUNT_POINT" ] || mkdir -p "$MOUNT_POINT"
mount -t afp afp://user:pass@server/share "$MOUNT_POINT"
For ephemeral mounts, consider:
# Using mktemp for disposable mount points
TMP_MOUNT=$(mktemp -d)
mount -t tmpfs none "$TMP_MOINT"
# ... use the mount ...
umount "$TMP_MOUNT" && rmdir "$TMP_MOUNT"
This approach ensures proper cleanup of temporary mount points while maintaining filesystem integrity.