新硬盘需先通过dmesg和lsblk确认内核识别与设备存在,再用parted(≥2tb)或fdisk(<2tb)分区,mkfs格式化后方可挂载;持久挂载须正确配置/etc/fstab并用mount -a验证。

怎么确认新硬盘是否被系统识别
插上硬盘后不等于能直接用,得先看内核有没有“看见”它。最直接的方式是查 dmesg 日志里有没有新设备出现,比如插入 SATA 盘后搜 dmesg | grep -i "sd[a-z]",看到类似 sdb: [mac] 1953525168 512-byte logical blocks 就说明硬件层已识别。
接着用 lsblk 看块设备树,注意区分 sda(通常是系统盘)和新增的 sdb 或 nvme0n1;如果只显示设备名但没有分区(如 sdb 下没 sdb1),说明还没分区,不能跳过下一步直接挂载。
- 别只信
fdisk -l—— 它可能因权限或缓存漏报,lsblk -f更可靠,还能顺带看到已有文件系统类型 - USB 硬盘热插拔后,有时需要等 2–3 秒再执行
lsblk,否则可能查不到 -
/dev/disk/by-id/下的链接名比/dev/sdX更稳定,尤其多盘环境,挂载时优先用它
fdisk 和 parted 选哪个来分区
简单说:小于 2TB 用 fdisk,大于 2TB 或要 gpt 分区表必须用 parted。因为 fdisk 默认操作 MBR,最大只支持 2TB 单盘,且不支持分区名、标志位等高级属性;parted 原生支持 GPT,命令也更直白。
常见错误是用 fdisk /dev/sdb 给一块 4TB NVMe 盘分了个 3TB 的主分区,结果 mkfs 报错 Invalid argument —— 实际是 MBR 表溢出,不是格式化工具的问题。
-
parted /dev/sdb mklabel gpt必须在创建分区前执行,否则默认还是 msdos(即 MBR) -
parted中单位用GB比100%更可控,例如mkpart primary ext4 0GB 100GB -
fdisk里按w写入后,内核不一定立刻重读分区表,可手动触发partprobe /dev/sdb或重启,避免后续mkfs找不到sdb1
挂载前为什么一定要先 mkfs
裸分区(比如 /dev/sdb1)只是连续扇区集合,没有文件系统结构,mount 会直接失败并报 wrong fs type, bad option, bad superblock。这不是路径或权限问题,是根本没“格式化”。
选什么文件系统取决于用途:ext4 兼容稳、日志可靠,适合通用存储;xfs 大文件吞吐强,但不支持 shrink(缩小);f2fs 针对 SSD 优化,但老内核可能不认。
-
mkfs.ext4 -L mydata /dev/sdb1加-L设卷标,之后可用UUID=xxx或LABEL=mydata挂载,比写死/dev/sdb1安全 - SSD 用户建议加
-E stride=128,stripe-width=128(按实际页大小调),否则默认参数可能引发写放大 - 格式化完立刻
blkid /dev/sdb1查 UUID,别等挂载时报错才回头找
如何让挂载在重启后依然生效
临时挂载(mount /dev/sdb1 /mnt/data)在 reboot 后就消失,必须写进 /etc/fstab。但这里最容易出错的是字段顺序、选项拼写和挂载点权限。
典型错误是复制网上示例时把 defaults 写成 default(少个 s),或者挂载点路径不存在却没提前 mkdir -p,导致开机卡在 “A start job is running for dev-disk-by…”。
- fstab 每行五字段:设备标识(推荐用
UUID=xxx)、挂载点、文件系统类型、选项、dump、pass;第 6 字段pass值为 0 表示不检查(数据盘常用),1 是根分区,2 是其他需检查的分区 - 选项推荐
defaults,noatime,nofail:noatime减少元数据写入,nofail确保硬盘未接入时系统仍能正常启动 - 改完 fstab 后务必执行
mount -a测试语法和路径,不要等重启才发现问题
挂载点权限、SElinux 上下文、磁盘健康(smartctl -a /dev/sdb)这些都不是 fstab 能管的,得单独检查。尤其是企业环境里,一块盘挂载失败常常是因为 SMART 提前报了 Reallocated_Sector_Ct 告警,但日志里藏得很深。