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,转载)