当前位置: 首页 > news >正文

AWS | Linux 硬盘挂载综合教程

Linux 硬盘挂载综合教程

目录

  1. 硬盘基础知识

  2. 识别硬盘设备

  3. 分区操作

  4. 格式化文件系统

  5. 挂载与卸载

  6. 永久挂载配置

  7. 权限管理

  8. 故障排查

  9. 实用脚本


硬盘基础知识

设备命名规则

  • 传统SATA/SCSI硬盘/dev/sda/dev/sdb/dev/sdc...

  • NVMe硬盘/dev/nvme0n1/dev/nvme1n1/dev/nvme2n1...

  • 分区: 在设备名后加分区号,如 /dev/sda1/dev/nvme0n1p1

文件系统类型

  • ext4: Linux最常用,稳定可靠

  • xfs: 高性能,适合大文件

  • btrfs: 支持快照、压缩等高级功能

  • NTFS: Windows兼容(需要额外软件)


识别硬盘设备

查看所有块设备

bash

# 查看树状结构
lsblk# 查看详细信息
lsblk -f# 查看所有磁盘信息
fdisk -l# 查看SCSI设备
lsscsi# 查看USB设备
lsusb

识别新硬盘的要点

  1. 没有挂载点(MOUNTPOINTS列为空)

  2. 没有分区或分区未格式化

  3. 容量与您添加的硬盘相符


分区操作

使用 fdisk(MBR/GPT)

bash

# 进入分区工具
sudo fdisk /dev/nvme1n1# fdisk 常用命令:
# n - 创建新分区
# p - 打印分区表
# d - 删除分区
# t - 更改分区类型
# w - 写入并退出
# q - 退出不保存

使用 parted(GPT推荐)

bash

# 进入parted
sudo parted /dev/nvme1n1# parted常用命令:
# print - 显示分区信息
# mklabel gpt - 创建GPT分区表
# mkpart primary 0% 100% - 创建主分区使用全部空间
# quit - 退出

快速分区脚本

bash

# 单分区使用整个磁盘
echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/nvme1n1# 或者使用parted
sudo parted /dev/nvme1n1 --script mklabel gpt
sudo parted /dev/nvme1n1 --script mkpart primary 0% 100%

格式化文件系统

基本格式化命令

bash

# 格式化为ext4(最常用)
sudo mkfs.ext4 /dev/nvme1n1p1# 格式化为xfs
sudo mkfs.xfs /dev/nvme1n1p1# 格式化为btrfs
sudo mkfs.btrfs /dev/nvme1n1p1# 强制格式化(如果设备已有文件系统)
sudo mkfs.ext4 -F /dev/nvme1n1p1

格式化选项

bash

# 设置卷标
sudo mkfs.ext4 -L "mydata" /dev/nvme1n1p1# 保留一定空间(5%)
sudo mkfs.ext4 -m 5 /dev/nvme1n1p1# 指定块大小(对于大文件)
sudo mkfs.ext4 -b 4096 /dev/nvme1n1p1

挂载与卸载

手动挂载

bash

# 创建挂载点
sudo mkdir /mnt/mydata# 临时挂载
sudo mount /dev/nvme1n1p1 /mnt/mydata# 指定文件系统类型挂载
sudo mount -t ext4 /dev/nvme1n1p1 /mnt/mydata# 带选项挂载
sudo mount -o defaults,noatime /dev/nvme1n1p1 /mnt/mydata

挂载选项说明

  • defaults: 默认选项(rw, suid, dev, exec, auto, nouser, async)

  • noatime: 不更新访问时间,提升性能

  • nodiratime: 不更新目录访问时间

  • rw/ro: 读写/只读模式

  • exec/noexec: 允许/禁止执行二进制文件

  • user/nouser: 允许/禁止普通用户挂载

卸载操作

bash

# 基本卸载
sudo umount /mnt/mydata# 如果设备忙,强制卸载
sudo umount -l /mnt/mydata# 卸载所有可卸载的文件系统
sudo umount -a

永久挂载配置

获取必要信息

bash

# 获取UUID(推荐使用)
sudo blkid /dev/nvme1n1p1# 获取文件系统类型
lsblk -f /dev/nvme1n1p1

编辑 /etc/fstab

bash

# 备份原文件
sudo cp /etc/fstab /etc/fstab.backup# 编辑文件
sudo nano /etc/fstab

fstab 条目格式

text

# 设备标识       挂载点       文件系统   挂载选项       dump备份  fsck检查
UUID=xxxxxx    /mnt/mydata   ext4       defaults     0        2

常用fstab配置示例

bash

# 基本配置
UUID=12345678-1234-1234-1234-123456789abc /mnt/mydata ext4 defaults 0 2# 性能优化配置
UUID=12345678-1234-1234-1234-123456789abc /mnt/mydata ext4 defaults,noatime,nodiratime 0 2# 用户数据盘,允许用户执行程序
UUID=12345678-1234-1234-1234-123456789abc /home/user/data ext4 defaults,user,exec 0 2# 使用设备名(不推荐,设备名可能变化)
/dev/nvme1n1p1 /mnt/mydata ext4 defaults 0 2

测试fstab配置

bash

# 测试fstab语法
sudo mount -a# 如果没有错误信息,说明配置正确
# 重启后验证
sudo reboot

权限管理

更改挂载点权限

bash

# 更改所有者
sudo chown -R ubuntu:ubuntu /mnt/mydata# 更改权限
sudo chmod -R 755 /mnt/mydata# 设置粘滞位(只有文件所有者可以删除文件)
sudo chmod +t /mnt/mydata

在fstab中设置权限

bash

# 指定用户ID和组ID
UUID=xxxxxx /mnt/mydata ext4 defaults,uid=1000,gid=1000 0 2# 设置umask(权限掩码)
UUID=xxxxxx /mnt/mydata ext4 defaults,umask=022 0 2

故障排查

常见问题及解决方案

1. 设备忙,无法卸载

bash

# 查看哪个进程在使用挂载点
sudo lsof /mnt/mydata# 或者使用fuser
sudo fuser -v /mnt/mydata# 结束相关进程后重试卸载
2. 挂载失败

bash

# 查看系统日志
sudo dmesg | tail -20# 检查fstab语法
sudo mount -a# 检查文件系统
sudo fsck /dev/nvme1n1p1
3. 磁盘空间问题

bash

# 查看磁盘使用情况
df -h# 查看inode使用情况
df -i# 查找大文件
sudo find /mnt/mydata -type f -size +1G
4. 性能问题

bash

# 测试磁盘速度
sudo hdparm -Tt /dev/nvme1n1p1# 查看IO统计
iostat -x 1

实用脚本

自动化挂载脚本

bash

#!/bin/bash
# auto_mount.sh - 自动检测并挂载新硬盘set -e# 配置变量
MOUNT_POINT="/mnt/mydata"
FILESYSTEM="ext4"echo "开始检测新硬盘..."# 查找未挂载的硬盘
UNMOUNTED_DISKS=$(lsblk -lnpo NAME,TYPE,MOUNTPOINT | grep -E 'disk\s+$' | awk '{print $1}')for DISK in $UNMOUNTED_DISKS; doecho "发现未挂载硬盘: $DISK"# 检查是否已有分区PARTITIONS=$(lsblk -lnpo NAME,TYPE "$DISK" | grep part | awk '{print $1}')if [ -z "$PARTITIONS" ]; thenecho "创建分区..."echo -e "n\np\n1\n\n\nw" | fdisk "$DISK"PARTITION="${DISK}p1"# 等待系统识别新分区sleep 2elsePARTITION=$(echo "$PARTITIONS" | head -1)echo "使用现有分区: $PARTITION"fi# 检查是否已格式化if ! blkid "$PARTITION" &> /dev/null; thenecho "格式化分区...""mkfs.$FILESYSTEM" "$PARTITION"fi# 创建挂载点mkdir -p "$MOUNT_POINT"# 挂载echo "挂载到 $MOUNT_POINT..."mount "$PARTITION" "$MOUNT_POINT"# 获取UUID并添加到fstabUUID=$(blkid -s UUID -o value "$PARTITION")if ! grep -q "$UUID" /etc/fstab; thenecho "添加到fstab..."echo "UUID=$UUID $MOUNT_POINT $FILESYSTEM defaults 0 2" >> /etc/fstabfiecho "挂载完成!"break
doneecho "当前挂载状态:"
df -h "$MOUNT_POINT"

磁盘信息查看脚本

bash

#!/bin/bash
# disk_info.sh - 显示详细磁盘信息echo "=== 磁盘信息汇总 ==="
echoecho "1. 块设备列表:"
lsblk
echoecho "2. 文件系统信息:"
lsblk -f
echoecho "3. 挂载信息:"
df -hT
echoecho "4. 磁盘使用详情:"
for mount in $(findmnt -l -n -o TARGET | grep -v '^/$' | grep -v '^/boot' | grep -v '^/sys' | grep -v '^/proc'); doecho "挂载点: $mount"df -h "$mount" | tail -1echo
doneecho "5. Inode使用情况:"
df -i

安全卸载脚本

bash

#!/bin/bash
# safe_umount.sh - 安全卸载硬盘if [ $# -eq 0 ]; thenecho "用法: $0 <挂载点或设备>"exit 1
fiTARGET=$1# 检查是否已挂载
if ! mountpoint -q "$TARGET" 2>/dev/null; thenecho "错误: $TARGET 未挂载或不是挂载点"exit 1
fiecho "准备卸载: $TARGET"# 检查占用进程
echo "检查占用进程..."
PROCESSES=$(lsof "$TARGET" 2>/dev/null | tail -n +2)if [ -n "$PROCESSES" ]; thenecho "以下进程正在使用 $TARGET:"echo "$PROCESSES"echoread -p "是否强制卸载?(y/N): " -n 1 -rechoif [[ $REPLY =~ ^[Yy]$ ]]; thenecho "强制卸载..."umount -l "$TARGET"elseecho "取消卸载"exit 0fi
elseecho "正常卸载..."umount "$TARGET"
fi# 验证卸载
if mountpoint -q "$TARGET"; thenecho "错误: 卸载失败"exit 1
elseecho "成功卸载: $TARGET"
fi

最佳实践

  1. 始终使用UUID而不是设备名配置fstab

  2. 先备份fstab再修改

  3. 使用mount -a测试配置是否正确

  4. 考虑性能需求选择合适的文件系统和挂载选项

  5. 定期检查磁盘健康状态

  6. 合理规划分区大小和用途

  7. 重要数据多重备份

这个综合教程涵盖了从基础到高级的硬盘挂载操作,适合各种使用场景。根据您的具体需求选择相应的方法和脚本。

http://www.dtcms.com/a/426692.html

相关文章:

  • ntdll.pdb 包含查找模块 ntdll.dll 的源文件所需的调试信息
  • 精读C++20设计模式——行为型设计模式:策略模式
  • Spark专题-第三部分:性能监控与实战优化(1)-认识spark ui
  • 汕头网站设计哪家好鞍山制作网站哪家好
  • 电子商务网站建设试卷软件设计师好考吗
  • 【计算机视觉】形态学的去噪
  • 精读C++20设计模式——行为型设计模式:命令模式
  • petalinux 安装Openblass库
  • 织梦播放器网站网站建设简历自我评价
  • 大数据毕业设计选题推荐-基于大数据的全球经济指标数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • Spring Boot 整合 Redisson 实现分布式锁:实战指南
  • 国鑫发布新一代「海擎」服务器 全面兼容国内外主流OAM GPU
  • 百度电商MultiAgent视频生成系统
  • FRP v0.65.0 内网穿透专业指南(SSH + HTTP/HTTPS 一体化配置)
  • UNIX下C语言编程与实践20-UNIX 文件类型判断:stat 结构 st_mode 与文件类型宏的使用实战
  • 电脑网站开发手机上可以打开吗网站建设如何把代码
  • ROS2下利用遥控手柄控制瑞尔曼RM65-B机器人
  • SOC(安全运营中心)
  • 济南网站建设山东聚搜网推荐传媒公司招聘
  • C++ STL 深度解析:容器、迭代器与算法的协同作战
  • SPI主控的CS引发的读不到设备寄存器
  • 数据标注、Label Studio
  • 央链知播受权发布:图说《“可信资产 IPO + 数链金融 RWA” 链改 2.0 六方共识》
  • 【Proteus8.17仿真】 STM32仿真 0.96OLED 屏幕显示ds1302实时时间
  • 佛山做营销型网站建设wordpress修改域名后无法登陆
  • mysql数据库学习之常用函数(五)
  • 避坑实战!京东商品详情接口开发指南:分页优化、多规格解析与数据完整性保障
  • win10(十二)Nuitka打包程序
  • 【Rust GUI开发入门】编写一个本地音乐播放器(11. 支持动态明暗主题切换)
  • 自己做网站帮公司出认证证书违法吗上海定制网站建设公司