3.2.5 文件系统创建与格式化(mkfs)

3.2.5 文件系统创建与格式化(mkfs)#

文件系统创建(mkfs)用于将裸设备/分区初始化为可挂载结构。格式化前必须确认设备路径与用途,避免误清空业务数据。

1. 原理草图:格式化与挂载关系#

文章图片

2. 环境准备与安装#

常见工具包:ext4 由 e2fsprogs 提供,xfs 由 xfsprogs 提供。

# RHEL/CentOS/AlmaLinux/Rocky
sudo yum install -y e2fsprogs xfsprogs

# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y e2fsprogs xfsprogs

3. 常见文件系统与选择建议#

  • ext4:通用稳定,系统盘/通用数据盘首选。
  • xfs:大文件/高并发写入优,日志、数据库、对象存储常用。
  • vfat:跨平台U盘/引导分区。
  • swap:交换分区(使用 mkswap 初始化)。

4. 关键命令与参数解释#

# 查看设备与分区,确认目标
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT

# ext4 格式化
mkfs.ext4 /dev/sdb1
# -L 设置卷标,便于识别与挂载
mkfs.ext4 -L data /dev/sdb1
# -m 预留空间比例(默认5%),数据库盘可适当降低
mkfs.ext4 -m 1 /dev/sdb1
# -b 块大小,-i inode 间距(需理解负载,慎用)
mkfs.ext4 -b 4096 -i 16384 /dev/sdb1

# xfs 格式化
mkfs.xfs /dev/sdb1
# -L 设置卷标;-f 强制格式化(谨慎)
mkfs.xfs -L logs -f /dev/sdb1

# swap 初始化
mkswap -L swap01 /dev/sdb2

5. 完整流程示例(含验证与挂载)#

# 1) 确认目标设备未被挂载
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT /dev/sdb
mount | grep sdb || echo "sdb未挂载"

# 2) 格式化为 xfs 并设置卷标
sudo mkfs.xfs -L logs /dev/sdb1

# 3) 创建挂载点并挂载
sudo mkdir -p /data/logs
sudo mount /dev/sdb1 /data/logs

# 4) 验证文件系统类型与UUID
lsblk -f /dev/sdb1
blkid /dev/sdb1

# 5) 验证写入
sudo dd if=/dev/zero of=/data/logs/testfile bs=1M count=10 status=progress
df -h /data/logs

6. 典型排错与处理#

# 现象1:提示 "device is busy"(设备被占用)
# 处理:查找并卸载
lsof /dev/sdb1
fuser -vm /dev/sdb1
sudo umount /dev/sdb1

# 现象2:提示 "XFS file system ... is in use"
# 处理:确认未挂载,必要时先卸载再格式化
mount | grep sdb1
sudo umount /dev/sdb1
sudo mkfs.xfs -f /dev/sdb1

# 现象3:误格式化风险检查
# 处理:强制确认设备信息
lsblk -o NAME,SIZE,SERIAL,MODEL /dev/sdb
blkid /dev/sdb1

7. 练习题(含命令要求)#

1) 在 /dev/sdb1 上创建 ext4 文件系统,卷标为 data01,预留空间 1%。
2) 在 /dev/sdb2 上创建 xfs 文件系统,挂载到 /data/xfs,并用 UUID 挂载(编辑 /etc/fstab)。
3) 模拟格式化前检查:输出目标分区的 UUID、文件系统类型和挂载点。
4) 写一条命令验证 /data/xfs 的读写权限。

可参考命令:

# 练习2:UUID挂载示例(请替换UUID)
UUID=$(blkid -s UUID -o value /dev/sdb2)
echo "UUID=$UUID /data/xfs xfs defaults 0 0" | sudo tee -a /etc/fstab
sudo mount -a