mount 命令是Linux系统中用于挂载文件系统的核心命令。它可以将存储设备(如硬盘分区、光盘、USB驱动器等)或网络文件系统连接到文件系统树中的某个目录(挂载点),使设备上的文件可以被访问。
挂载是将存储设备或文件系统连接到Linux目录树的过程:
/etc/fstab文件自动挂载umount命令断开连接mount [选项] [设备名] [挂载点]
mount [选项] [-t 文件系统类型] [-o 挂载选项] 设备名 挂载点
最简单的形式:mount /dev/sdb1 /mnt/usb
| 选项 | 说明 |
|---|---|
-t 类型 |
指定文件系统类型(ext4、ntfs、vfat、xfs等) |
-o 选项 |
指定挂载选项,多个选项用逗号分隔 |
-a |
挂载/etc/fstab中所有文件系统 |
-r |
以只读方式挂载 |
-w |
以读写方式挂载(默认) |
-n |
不将挂载信息写入/etc/mtab |
-L 标签 |
通过卷标挂载设备 |
-U UUID |
通过UUID挂载设备 |
--bind |
绑定挂载,将目录挂载到另一个目录 |
-l |
列出所有已挂载的文件系统(显示标签) |
-h |
显示帮助信息 |
-V |
显示版本信息 |
| 选项 | 说明 | 示例 |
|---|---|---|
defaults |
默认选项(rw, suid, dev, exec, auto, nouser, async) | -o defaults |
rw/ro |
读写/只读模式 | -o ro |
noexec/exec |
禁止/允许执行二进制文件 | -o noexec |
nosuid/suid |
禁止/允许set-user-identifier或set-group-identifier位 | -o nosuid |
nodev/dev |
禁止/允许设备文件 | -o nodev |
async/sync |
异步/同步I/O操作 | -o sync |
atime/noatime |
更新/不更新访问时间戳 | -o noatime |
relatime |
相对访问时间(性能优化) | -o relatime |
user/nouser |
允许/禁止普通用户挂载 | -o user |
users |
允许任何用户挂载和卸载 | -o users |
remount |
重新挂载已挂载的文件系统 | -o remount,rw |
loop |
挂载镜像文件为回环设备 | -o loop |
# 查看所有已挂载的文件系统
mount
# 查看特定类型的文件系统
mount -t ext4
# 查看特定设备的挂载情况
mount | grep /dev/sda1
# 使用findmount命令(替代方法)
findmnt
mount命令输出示例:
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro)
/dev/sdb1 on /mnt/data type ext4 (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=402620k,mode=755)
# 查看USB设备(通常为/dev/sdb1、/dev/sdc1等)
sudo fdisk -l
sudo lsblk
# 创建挂载点目录
sudo mkdir /mnt/usb
# 挂载USB设备(自动检测文件系统类型)
sudo mount /dev/sdb1 /mnt/usb
# 或指定文件系统类型
sudo mount -t vfat /dev/sdb1 /mnt/usb
# 使用UUID挂载(推荐)
sudo mount -U "1234-5678" /mnt/usb
# 使用卷标挂载
sudo mount -L "MY_USB" /mnt/usb
# 创建挂载点
sudo mkdir /mnt/cdrom
# 挂载光盘
sudo mount /dev/cdrom /mnt/cdrom
# 或使用具体设备名(通常为/dev/sr0)
sudo mount /dev/sr0 /mnt/cdrom
# 挂载为只读(光盘通常是只读的)
sudo mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom
# 挂载ISO镜像文件
sudo mkdir /mnt/iso
sudo mount -o loop ubuntu-22.04.iso /mnt/iso
# 也可以指定文件系统类型
sudo mount -t iso9660 -o loop ubuntu.iso /mnt/iso
# 查看ISO内容
ls /mnt/iso
# 将已挂载的文件系统重新挂载为只读
sudo mount -o remount,ro /dev/sda1
# 将根文件系统重新挂载为读写(单用户模式常用)
sudo mount -o remount,rw /
# 重新挂载并更改选项
sudo mount -o remount,noexec /tmp
# 将目录绑定到另一个目录(共享相同内容)
sudo mount --bind /original/dir /new/location
# 查看绑定挂载
mount | grep bind
# 递归绑定挂载(包含子目录)
sudo mount --rbind /old /new
# 使绑定挂载为只读
sudo mount --bind -o ro /source /destination
# 挂载NFS共享
sudo mkdir /mnt/nfs
sudo mount -t nfs 192.168.1.100:/shared /mnt/nfs
# 使用特定NFS版本和选项
sudo mount -t nfs -o vers=3,nolock 192.168.1.100:/data /mnt/nfs
# 挂载SMB/CIFS共享(Windows共享)
sudo mkdir /mnt/windows
sudo mount -t cifs //server/share /mnt/windows -o username=user,password=pass
# 挂载SSH文件系统(SSHFS)
sudo mkdir /mnt/sshfs
sshfs user@remotehost:/remote/path /mnt/sshfs
#!/bin/bash
# auto_mount_usb.sh - 自动检测并挂载USB设备
MOUNT_POINT="/mnt/usb"
LOG_FILE="/var/log/usb_mount.log"
# 查找USB设备
USB_DEVICE=$(lsblk -o NAME,TRAN | grep usb | head -1 | awk '{print "/dev/"$1"1"}')
if [ -n "$USB_DEVICE" ] && [ -b "$USB_DEVICE" ]; then
echo "$(date): 检测到USB设备 $USB_DEVICE" >> "$LOG_FILE"
# 创建挂载点
mkdir -p "$MOUNT_POINT"
# 尝试挂载
if mount "$USB_DEVICE" "$MOUNT_POINT" 2>/dev/null; then
echo "$(date): 成功挂载到 $MOUNT_POINT" >> "$LOG_FILE"
echo "USB设备已挂载到 $MOUNT_POINT"
else
# 尝试其他文件系统类型
for fs_type in vfat ntfs ext4 exfat; do
if mount -t "$fs_type" "$USB_DEVICE" "$MOUNT_POINT" 2>/dev/null; then
echo "$(date): 使用 $fs_type 成功挂载" >> "$LOG_FILE"
echo "USB设备已挂载到 $MOUNT_POINT"
break
fi
done
fi
else
echo "$(date): 未检测到USB设备" >> "$LOG_FILE"
echo "未检测到USB设备"
fi
#!/bin/bash
# secure_mount_options.sh - 安全挂载配置
# 对于/tmp目录,建议使用nosuid,noexec,nodev选项
sudo mount -o remount,nosuid,noexec,nodev /tmp
# 对于用户可写目录,禁用suid和可执行
sudo mount -o remount,nosuid,noexec /home
# 对于可移动媒体,使用noexec,nosuid,nodev
sudo mount -o noexec,nosuid,nodev /dev/sdb1 /mnt/usb
# 验证挂载选项
mount | grep -E "(tmp|home|usb)"
# 在系统无法启动时,从Live CD/USB启动后挂载原系统
# 1. 查看磁盘分区
sudo fdisk -l
# 2. 挂载根分区
sudo mount /dev/sda2 /mnt
# 3. 挂载其他必要分区
sudo mount /dev/sda1 /mnt/boot
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
# 4. chroot到原系统
sudo chroot /mnt
# 5. 修复问题后,退出并卸载
exit
sudo umount /mnt/{boot,dev,proc,sys}
sudo umount /mnt
# /etc/fstab文件的典型格式
# 设备 挂载点 文件系统类型 挂载选项 dump备份 fsck检查顺序
/dev/sda1 / ext4 defaults 0 1
/dev/sdb1 /home ext4 defaults 0 2
UUID=xxxx /boot ext4 defaults 0 2
LABEL=DATA /data xfs defaults 0 2
# 网络文件系统示例
server:/export/home /home nfs rw,soft,intr 0 0
//server/share /mnt/share cifs username=user,password=pass 0 0
# 特殊文件系统
tmpfs /tmp tmpfs defaults,noexec,nosuid,size=2G 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
# 测试fstab配置(不实际挂载)
sudo mount -a --fake
# 重新加载fstab中的所有文件系统
sudo mount -a
| 文件系统 | 说明 | 常用选项 |
|---|---|---|
| ext4 | Linux最常用的日志文件系统 | -t ext4 |
| xfs | 高性能日志文件系统,适合大文件 | -t xfs |
| btrfs | 高级功能文件系统,支持快照等 | -t btrfs |
| vfat/fat32 | Windows兼容文件系统(U盘常用) | -t vfat |
| ntfs | Windows NT文件系统 | -t ntfs或-t ntfs-3g |
| exfat | 现代大容量闪存文件系统 | -t exfat |
| iso9660 | 光盘文件系统 | -t iso9660 |
| nfs | 网络文件系统 | -t nfs |
| cifs/smb | Windows共享文件系统 | -t cifs |
| tmpfs | 临时内存文件系统 | -t tmpfs |
user选项umount命令正确卸载,直接拔除设备可能导致数据损坏noexec,nosuid,nodev选项# 1. "设备忙"错误(无法卸载)
# 查看哪些进程正在使用挂载点
sudo lsof /mnt/usb
sudo fuser -m /mnt/usb
# 结束相关进程
sudo fuser -km /mnt/usb
# 2. "权限被拒绝"错误
# 检查用户权限
sudo mount /dev/sdb1 /mnt/usb
# 检查fstab中的user选项
# 或者将用户添加到disk组
# 3. "错误的文件系统类型"错误
# 安装必要的文件系统支持
sudo apt install ntfs-3g # NTFS支持
sudo apt install exfat-fuse # exFAT支持
sudo apt install nfs-common # NFS支持
# 4. "挂载点不存在"错误
# 创建挂载点目录
sudo mkdir -p /mnt/usb
# 5. "未知的块设备"错误
# 检查设备名是否正确
sudo fdisk -l
sudo lsblk
# 6. "文件系统损坏"错误
# 尝试修复文件系统
sudo fsck /dev/sdb1
# 7. "写保护"错误
# 检查物理写保护开关(U盘、SD卡)
# 或以只读方式挂载
sudo mount -o ro /dev/sdb1 /mnt/usb
# 8. NFS挂载超时
# 检查网络连接和NFS服务
sudo systemctl status nfs-server
ping nfs-server-ip
某些挂载选项可以改善文件系统性能:
mount命令的演变:
/etc/fstab和挂载状态/etc/fstab前进行备份mount -a --fake测试udisksctl或systemd-mount等现代工具