CentOS 7 挂载新加 4T 硬盘到 /www

做网站时,最常见的磁盘增长路径是:网站数据、备份、日志慢慢把系统盘吃满,然后加一块大容量数据盘。本文以一块全新的 4T 硬盘(设备名 /dev/sdb)为例,完整演示分区、格式化、挂载和开机自动挂载的流程。以下操作均在 root 环境下运行。

注意:挂载、格式化操作会清空磁盘数据,请务必确认目标硬盘没有重要数据。

1. 查看硬盘

fdisk -l

执行后确认新硬盘的设备名,示例中发现新硬盘为 /dev/sdb,大小 4T。设备名的规律一般是按接入顺序递增:/dev/sda 是系统盘,新加的数据盘通常是 /dev/sdb。如果不确定哪块是新盘,可以对比 fdisk -l 输出里的容量。

2. 如需格式化先清理磁盘

如果该硬盘以前有过分区或文件系统,先对整个磁盘做一次格式化:

mkfs -t ext4 /dev/sdb

此命令会对整个磁盘格式化。全新磁盘没有旧数据时,这一步可以跳过。

3. 使用 parted 创建 GPT 分区

由于 fdisk 仅支持 2T 以内的磁盘分区(MBR 分区表上限约 2T),而该磁盘大于 2T,所以必须使用 parted 创建 GPT 分区表:

parted /dev/sdb

进入 parted 交互界面后,先创建 GPT 分区表:

(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue? Yes/No? yes

4. 处理分区对齐

创建分区时,如果直接使用默认值,可能会提示分区未对齐,影响性能:

(parted) mkpart primary 0 4001GB
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? cancel

此时需要先查看磁盘参数,计算正确的起始扇区:

cat /sys/block/sdb/queue/optimal_io_size
cat /sys/block/sdb/queue/minimum_io_size
cat /sys/block/sdb/alignment_offset
cat /sys/block/sdb/queue/physical_block_size

如果 optimal_io_size 不为 0,假设为 1048576,则用 optimal_io_size 的值加上 alignment_offset 的值,再除以 physical_block_size 的值,即可得到起始扇区位置:

(1048576 + 0) / 512 = 2048

如果 optimal_io_size 为 0,则直接使用起始扇区的默认值 2048

为什么分区要对齐? 现代硬盘的物理扇区是 4096B(4K),而逻辑扇区仍是 512B。如果分区起始位置不是 4K 的整数倍,一次 I/O 可能跨越两个物理扇区,造成读写性能下降,尤其在大量小文件场景下明显。所以“2048 扇区起始”不是玄学,而是让分区与 4K 物理块对齐的标准做法。

5. 使用对齐后的起始扇区创建分区

(parted) mkpart primary 2048s 100%
(parted) print
Model: ATA WDC WD40EFRX-68N (scsi)
Disk /dev/sdb: 4001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
1       1049kB  4001GB  4001GB               primary

(parted) align-check optimal 1
1 aligned
(parted) quit

align-check optimal 1 返回 1 aligned 表示分区已正确对齐。这一步是全文最容易出错的地方,建议务必执行对齐检查。

6. 查看磁盘情况

fdisk -l

确认分区已经创建成功,能看到 /dev/sdb1

7. 格式化

mkfs.ext4 -F /dev/sdb

如果需要增加 inode 数量(适合大量小文件场景,比如放很多小图片),可以使用:

mkfs.ext4 -F -i 2048 /dev/sdb

补充说明:如果你的场景偏向严格分区管理,也可以只格式化分区设备 /dev/sdb1,后续挂载 /dev/sdb1 而非整个磁盘,两种方式都能用,本文沿用原帖的整盘格式化方案。

8. 挂载新磁盘到 /www

mkdir /www
mount /dev/sdb /www

选择挂载点要结合用途:放网站程序就挂到站点目录,放备份就挂到备份目录。/www 是示例,实际按你的目录规划来。

9. 设置开机自动挂载

vim /etc/fstab

在最后一行添加:

/dev/sdb                /www                   ext4    defaults        1 2

保存退出(:wq)。

建议用 UUID 代替设备名。 服务器重启后设备名可能变化(/dev/sdb 变成 /dev/sdc),导致挂载失败。更稳妥的写法是用分区的 UUID:

blkid /dev/sdb

把输出里的 UUID="xxxx" 填入 fstab:

UUID=xxxx-xxxx-xxxx        /www                   ext4    defaults        1 2

10. 挂载 fstab 中未挂载的磁盘

mount -a

mount -a 会把 fstab 里所有还没挂载的条目一次性挂上,用于验证 fstab 配置是否正确。如果这一步报错,说明 fstab 写错了,先别重启,改对再继续。

11. 验证挂载结果

df -h

挂载成功后应能看到类似下面的输出:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        3.6T  140M  3.4T   1% /www

此时 /www 目录已经可以正常读写 3.4T 可用空间。建议顺手测一下读写速度,确保分区对齐确实生效,方法可参考CentOS 磁盘测速

常见问题

问题 原因 解决
重启后 /www 是空的 fstab 写错或设备名变了 用 UUID 挂载,先 mount -a 验证
挂载点无写权限 目录属主不对 chown -R www-data:www-data /www
parted 提示未对齐 起始扇区不是 4K 整数倍 按第 4 步计算起始扇区
数据盘误当系统盘 设备名认错 挂载前用 lsblk -f 再三确认

小结

大于 2T 的硬盘在 CentOS 7 上的挂载流程可总结为:parted 创建 GPT 分区表 → 按对齐计算起始扇区并分区 → mkfs.ext4 格式化 → mount 挂载 → 写入 /etc/fstab(建议用 UUID)实现开机自动挂载。分区对齐对大容量硬盘的性能有明显影响,建议严格按照第 4、5 步处理。

磁盘挂载是服务器运维的基础操作之一,更多服务器配置与运维技巧可以参考云服务器分类下的文章,例如服务器运维技巧服务器备份策略。如果只是挂载 4T 以下的小容量硬盘,也可以参考CentOS 挂载硬盘(4T 以下)。选盘前想清楚容量与场景,可看服务器存储选型

原文链接:https://www.cnblogs.com/cqzhuomi/articles/17284398.html(博客园 CQZHUOMI,转载)