一、磁盘基础与分区规划
1.1 磁盘类型与识别
- 磁盘接口类型:
-
- SATA:传输速率 6Gbps,常见于消费级硬盘,通过lsblk -o NAME,TYPE,SIZE,MODEL查看,标识为/dev/sda(SCSI/SATA 磁盘)。
-
- NVMe:PCIe 接口,速率 32Gbps 以上,标识为/dev/nvme0n1(NVMe 命名规则:控制器 0 的命名空间 1)。
-
- SAS:企业级接口,支持热插拔和双端口冗余,lsscsi命令显示设备类型为SAS。
- 磁盘识别命令:
# 查看所有磁盘及分区
lsblk # 简洁显示:NAME、SIZE、TYPE(disk/part)、MOUNTPOINT
fdisk -l # 详细信息:分区表类型、扇区大小、分区大小
blkid # 显示分区UUID和文件系统类型(如UUID="xxx" TYPE="xfs")
# 监控磁盘IO
iostat -x 5 # 每5秒刷新,%util接近100%表示IO饱和
1.2 分区表类型与选择
- MBR(Master Boot Record):
-
- 支持最大磁盘容量 2TB,最多 4 个主分区(或 3 主 + 1 扩展分区),兼容旧系统。
-
- 创建命令:fdisk /dev/sdb→n(新建)→p(主分区)→设置分区号、起始扇区、大小。
- GPT(GUID Partition Table):
-
- 支持最大 18EB 磁盘,无主分区数量限制(推荐≤128 个),支持 UEFI 启动,适合新系统和大容量磁盘。
-
- 创建命令:gdisk /dev/sdb→n→设置分区号、起始扇区、大小(默认使用全部空间)→w(写入并退出)。
- 选择建议:
-
- 磁盘≤2TB:MBR 或 GPT 均可(MBR 兼容性更好)。
-
- 磁盘 > 2TB:必须用 GPT(MBR 不支持)。
-
- 启动磁盘:UEFI 主板需 GPT,Legacy BIOS 可用 MBR。
1.3 分区规划原则
- 系统盘(/dev/sda)典型规划:
-
- /boot:2GB,EXT4 格式(存放内核和启动文件,独立分区避免根分区损坏导致无法启动)。
-
- swap:内存≤8GB 时设为内存的 1.5 倍;内存 > 8GB 时设为 8-16GB(休眠需等于内存大小)。
-
- /(根分区):剩余空间,XFS 或 EXT4(XFS 适合大文件和高并发,EXT4 修复工具更成熟)。
- 数据盘(/dev/sdb)规划:
-
- 按业务类型分区:如/data/db(数据库,XFS,独立分区避免影响系统)、/data/log(日志,EXT4,支持 inode 动态分配)。
-
- 示例:gdisk /dev/sdb创建 3 个分区→/dev/sdb1(100GB,/data/db)、/dev/sdb2(50GB,/data/log)、/dev/sdb3(剩余,/data/backup)。
二、磁盘分区与格式化
2.1 命令行分区操作(fdisk/gdisk)
- MBR 分区示例(fdisk):
# 对/dev/sdb进行分区
fdisk /dev/sdb
# 交互流程:
Command (m for help): n # 新建分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p # 主分区
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): # 默认起始扇区
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +100G # 分区大小100GB
Command (m for help): t # 修改分区类型
Selected partition 1
Hex code (type L to list all codes): 83 # Linux默认类型
Command (m for help): w # 写入分区表并退出
- GPT 分区示例(gdisk):
gdisk /dev/sdc
# 交互流程:
Command (? for help): n # 新建分区
Partition number (1-128, default 1): 1
First sector (34-419430366, default = 2048) or {+-}size{KMGTP}: # 默认
Last sector ...: +500G # 分区大小500GB
Command (? for help): c # 设置分区名称(可选)
Partition number: 1
Enter name: data_part1
Command (? for help): w # 写入并退出,提示"Do you want to proceed? (Y/N): y"
2.2 文件系统格式化与挂载
- 常用文件系统格式化:
# EXT4(适合中小文件,支持日志、配额)
mkfs.ext4 /dev/sdb1 # 创建EXT4文件系统
tune2fs -m 1 /dev/sdb1 # 预留1%空间给root(默认5%,数据盘可减小)
# XFS(适合大文件,高吞吐量,并行IO)
mkfs.xfs /dev/sdb2 # 创建XFS文件系统
xfs_admin -L data_log /dev/sdb2 # 设置卷标(方便识别)
# swap分区
mkswap /dev/sdb3 # 格式化swap
swapon /dev/sdb3 # 启用swap
echo "/dev/sdb3 none swap defaults 0 0" >> /etc/fstab # 永久生效
- 永久挂载配置:
# 1. 创建挂载点
mkdir -p /data/db /data/log
# 2. 获取分区UUID(推荐用UUID而非/dev/sdb1,避免磁盘顺序变化导致挂载失败)
blkid /dev/sdb1 # 假设输出UUID="a1b2c3d4-..."
# 3. 编辑/etc/fstab,添加以下行
UUID=a1b2c3d4-... /data/db xfs defaults,noatime 0 0 # noatime:不更新访问时间,提升性能
UUID=e5f6g7h8-... /data/log ext4 defaults 0 2 # 最后一位2表示非根分区,fsck检查
# 4. 验证并挂载
mount -a # 加载/etc/fstab中所有未挂载的分区
df -h # 确认挂载成功(显示/data/db和/data/log)
三、磁盘故障诊断与修复
3.1 磁盘健康状态检查
- SMART(Self-Monitoring, Analysis and Reporting Technology):
# 安装工具
yum install -y smartmontools # CentOS/RHEL
apt install -y smartmontools # Ubuntu/Debian
# 检查磁盘健康(需管理员权限)
smartctl -H /dev/sdb # 结果"PASSED"表示健康,"FAILED"需警惕
smartctl -a /dev/sdb # 详细报告:关注"Reallocated_Sector_Ct"(重映射扇区数,>0可能有坏道)、"Power_On_Hours"(通电时间)
# 测试磁盘(谨慎:可能影响数据)
smartctl -t short /dev/sdb # 短测试(约2分钟)
smartctl -t long /dev/sdb # 长测试(约2小时)
smartctl -l selftest /dev/sdb # 查看测试结果
3.2 坏道检测与修复
- 逻辑坏道修复:
# 扫描并标记坏道(XFS文件系统)
xfs_repair -n /dev/sdb1 # -n:只读检查,不修复
xfs_repair /dev/sdb1 # 实际修复(需卸载分区:umount /data/db)
# EXT4文件系统
e2fsck -f /dev/sdb2 # -f:强制检查(需卸载),自动修复逻辑错误
- 物理坏道处理:
- 备份数据:rsync -av /data/db/ /backup/data_db/(尽快转移数据)。
- 隔离坏道:通过分区工具跳过坏道区域,例如坏道位于 100-200GB,将分区分为 0-100GB 和 200GB - 末尾。
- 更换磁盘:物理坏道是硬件老化迹象,建议更换磁盘,避免数据丢失。
3.3 分区表修复
- MBR 修复:
# 备份MBR(前512字节)
dd if=/dev/sdb of=/backup/sdb_mbr_backup bs=512 count=1
# 恢复MBR(从备份)
dd if=/backup/sdb_mbr_backup of=/dev/sdb bs=512 count=1
# 重建分区表(分区丢失时)
testdisk /dev/sdb # 交互式工具,选择分区表类型→分析→快速搜索→保存分区表
- GPT 修复:
# 备份GPT(前1MB和最后1MB)
dd if=/dev/sdb of=/backup/sdb_gpt_backup bs=1M count=1
dd if=/dev/sdb of=/backup/sdb_gpt_backup_end bs=1M count=1 seek=$(( $(blockdev --getsize64 /dev/sdb) / 1024 / 1024 - 1 ))
# 恢复GPT
gdisk /dev/sdb # 进入交互模式
x # 专家模式
l # 加载备份GPT(需先将备份文件复制到/tmp)
四、磁盘性能优化
4.1 文件系统调优
- XFS 优化:
# 挂载参数优化(编辑/etc/fstab)
UUID=xxx /data xfs defaults,noatime,nodiratime,allocsize=16m 0 0
# noatime/nodiratime:不记录访问时间,减少IO
# allocsize=16m:预分配16MB空间,适合大文件写入(如数据库)
# 在线调整日志大小(需卸载后执行)
xfs_growfs -L 1G /dev/sdb1 # 将日志大小调整为1GB(默认约64MB),提升并发写入性能
- EXT4 优化:
# 格式化时优化(大文件系统)
mkfs.ext4 -O dir_index,extent /dev/sdb2 # dir_index:目录索引加速;extent:减少碎片
tune2fs -m 1 /dev/sdb2 # 预留1%空间(默认5%,数据盘可减小)
# 挂载参数(/etc/fstab)
UUID=xxx /data/log ext4 defaults,noatime,data=writeback 0 0
# data=writeback:延迟日志写入,提升性能(牺牲部分一致性)
4.2 IO 调度器配置
- 查看与设置调度器:
# 查看当前调度器
cat /sys/block/sdb/queue/scheduler # 输出如"[mq-deadline] kyber bfq none",[]表示当前生效
# 临时设置调度器(立即生效)
echo "mq-deadline" > /sys/block/sdb/queue/scheduler # SSD/NVMe推荐
echo "bfq" > /sys/block/sdc/queue/scheduler # HDD推荐(多队列公平调度)
# 永久生效(CentOS/RHEL 7+)
echo 'ACTION=="add|change", KERNEL=="sdb", ATTR{queue/scheduler}="mq-deadline"' > /etc/udev/rules.d/60-ioscheduler.rules
- 调度器选择建议:
-
- NVMe/SSD:mq-deadline(低延迟)或none(无调度,直接提交 IO)。
-
- SATA/SAS HDD:bfq(多任务公平调度)或mq-deadline(实时性好)。
4.3 磁盘缓存与预读调整
- 调整预读大小:
# 查看当前预读大小(512字节/扇区,默认256表示128KB)
cat /sys/block/sdb/queue/read_ahead_kb # 单位KB
# 临时调整(大数据连续读取,如视频服务器)
echo 1024 > /sys/block/sdb/queue/read_ahead_kb # 预读1MB
# 永久设置(udev规则)
echo 'ACTION=="add|change", KERNEL=="sdb", ATTR{queue/read_ahead_kb}="1024"' >> /etc/udev/rules.d/60-ioscheduler.rules
- 启用写入缓存:
# 检查当前缓存状态
hdparm -W /dev/sdb # 1=启用,0=禁用
# 启用写入缓存(需确保磁盘有备用电池或UPS,防止断电数据丢失)
hdparm -W 1 /dev/sdb
# 永久生效(udev规则)
echo 'ACTION=="add|change", KERNEL=="sdb", RUN+="/sbin/hdparm -W 1 /dev/%k"' >> /etc/udev/rules.d/60-disk-cache.rules
五、高级磁盘管理技术
5.1 LVM(逻辑卷管理)
- LVM 架构:物理卷(PV)→卷组(VG)→逻辑卷(LV),支持动态扩容和缩容。
- 基本操作:
# 创建PV
pvcreate /dev/sdb /dev/sdc # 将两块磁盘转为物理卷
# 创建VG(卷组名为vg_data,PE大小4MB)
vgcreate -s 4M vg_data /dev/sdb /dev/sdc
# 创建LV(从vg_data分配100GB,逻辑卷名为lv_db)
lvcreate -L 100G -n lv_db vg_data
# 格式化并挂载
mkfs.xfs /dev/vg_data/lv_db
mkdir /data/db
mount /dev/vg_data/lv_db /data/db
# 动态扩容(无需卸载)
lvextend -L +50G /dev/vg_data/lv_db # 增加50GB
xfs_growfs /dev/vg_data/lv_db # XFS在线扩容文件系统
# EXT4:resize2fs /dev/vg_data/lv_db
5.2 磁盘加密(LUKS)
- 加密分区创建:
# 安装工具
yum install -y cryptsetup
# 加密分区(会清除数据,谨慎!)
cryptsetup luksFormat /dev/sdb1 # 输入大写YES确认,设置加密密码
# 打开加密设备(映射名为crypt_data)
cryptsetup open /dev/sdb1 crypt_data
# 格式化并挂载
mkfs.xfs /dev/mapper/crypt_data
mount /dev/mapper/crypt_data /data/encrypted
# 永久挂载(需设置自动解密,避免每次输入密码)
# 1. 备份密钥:cryptsetup luksAddKey /dev/sdb1 --key-file /root/keyfile
# 2. 编辑/etc/crypttab:crypt_data /dev/sdb1 /root/keyfile luks
# 3. 编辑/etc/fstab:/dev/mapper/crypt_data /data/encrypted xfs defaults 0 0
5.3 多路径(Multipath)配置
- 为 SAN 存储配置多路径:
# 安装工具
yum install -y device-mapper-multipath
# 启用多路径服务
mpathconf --enable --with_multipathd y
systemctl start multipathd
systemctl enable multipathd
# 查看多路径设备(映射后的设备名为mpatha、mpathb等)
multipath -ll
# 配置多路径策略(编辑/etc/multipath.conf)
defaults {
user_friendly_names yes # 启用友好名称(mpatha而非UUID)
find_multipaths yes # 自动发现多路径
}
devices {
device {
vendor "EMC" # 存储厂商(通过multipath -ll查看)
product "SYMMETRIX" # 产品型号
path_grouping_policy multibus # 所有路径负载均衡
path_selector "round-robin 0" # 轮询策略
}
}
六、磁盘管理自动化脚本
6.1 自动检测并挂载新磁盘
#!/bin/bash
# 功能:检测未分区磁盘,自动GPT分区、格式化XFS、挂载到/data目录
# 查找未分区的磁盘(排除系统盘sda和CD-ROM)
for disk in $(lsblk -n -o NAME,TYPE | grep 'disk' | grep -v 'sda' | awk '{print $1}'); do
disk_path="/dev/$disk"
# 检查是否已分区
if ! fdisk -l $disk_path | grep -q "Partition table"; then
echo "发现未分区磁盘:$disk_path,开始自动配置..."
# GPT分区(全磁盘)
parted -s $disk_path mklabel gpt
parted -s $disk_path mkpart primary xfs 0% 100%
# 格式化(等待分区表生效)
sleep 2
part_path="${disk_path}1"
mkfs.xfs -f $part_path
# 创建挂载点并挂载
mount_point="/data/${disk}_data"
mkdir -p $mount_point
uuid=$(blkid -s UUID -o value $part_path)
echo "UUID=$uuid $mount_point xfs defaults,noatime 0 0" >> /etc/fstab
mount -a
echo "$disk_path 配置完成,挂载点:$mount_point"
fi
done
6.2 磁盘空间监控脚本
#!/bin/bash
# 功能:监控磁盘使用率,超过阈值发送告警
threshold=85 # 告警阈值(%)
alert_recipient="admin@example.com"
# 检查所有挂载点
df -H | grep -vE 'Filesystem|tmpfs|loop' | while read -r fs size used avail pct mount; do
# 提取百分比数字
pct_num=$(echo $pct | sed 's/%//')
if [ $pct_num -gt $threshold ]; then
subject="磁盘空间告警:$mount 使用率超过$threshold%"
message="磁盘 $fs 挂载点 $mount 使用率过高:$pct\n可用空间:$avail"
echo -e "$message" | mail -s "$subject" $alert_recipient
echo "已发送告警:$subject"
fi
done
七、磁盘管理最佳实践
7.1 日常维护 checklist
- 每周执行smartctl -H /dev/sd*检查磁盘健康。
- 每月运行xfs_repair -n(XFS)或e2fsck -f(EXT4,需卸载)检查文件系统完整性。
- 每季度清理冗余数据,保持磁盘使用率低于 80%(避免碎片化和性能下降)。
- 记录磁盘更换周期(企业级硬盘建议 3-5 年更换,消费级 2-3 年)。
7.2 数据安全策略
- 关键数据分区启用 LUKS 加密,防止物理磁盘被盗导致数据泄露。
- 定期备份分区表(MBR/GPT)和重要文件系统元数据,便于故障恢复。
- 服务器磁盘采用 RAID 保护(如 RAID 10 用于数据库,RAID 6 用于归档),避免单盘故障丢失数据。
7.3 容量规划原则
- 按 “当前容量 ×(1 + 年增长率)^3” 规划未来 3 年需求(如年增长 30%,当前 1TB→3 年后约 2.2TB)。
- 预留 20% 空闲空间:XFS/EXT4 在使用率 > 85% 时性能下降明显,预留空间可减少碎片和 IO 压力。
- 新磁盘优先选择 SSD 或 NVMe:随机 IO 性能是 HDD 的 10-100 倍,显著提升数据库、虚拟化等场景响应速度。
八、磁盘克隆与迁移技术
8.1 整盘克隆工具与操作
- dd 命令克隆(字节级复制):
# 克隆整个磁盘到另一个磁盘(需容量相同或更大,谨慎!)
dd if=/dev/sda of=/dev/sdb bs=4M status=progress # if=源磁盘,of=目标磁盘,bs=块大小,status=显示进度
# 克隆磁盘到镜像文件(用于备份)
dd if=/dev/sda of=/backup/sda_image.img bs=4M status=progress
# 从镜像恢复到磁盘
dd if=/backup/sda_image.img of=/dev/sda bs=4M status=progress
-
- 注意:克隆时需确保目标磁盘未挂载,建议在 Live CD 环境执行,避免数据不一致。
-
- 优化:添加conv=noerror,sync参数,跳过坏道并同步数据,dd if=/dev/sda of=/dev/sdb bs=4M conv=noerror,sync。
- partclone(智能克隆,支持文件系统):
# 安装工具
yum install -y partclone
# 克隆EXT4分区到镜像
partclone.ext4 -d -s /dev/sda1 -o /backup/sda1_ext4.img # -d:显示详细信息
# 恢复镜像到分区
partclone.ext4 -d -r -s /backup/sda1_ext4.img -o /dev/sdb1 # -r:恢复模式
# 直接克隆分区到另一个分区(支持不同大小,需目标分区≥源分区)
partclone.xfs -s /dev/sda2 -o /dev/sdb2
-
- 优势:只复制已使用的扇区,比 dd 更快(尤其是稀疏磁盘),支持 ext4、xfs、ntfs 等多种文件系统。
8.2 系统盘迁移到 SSD
- 迁移步骤:
a.准备工作:确认 SSD 容量≥系统盘已使用空间,用df -h /查看使用量。
b.克隆分区表:
sfdisk -d /dev/sda > /tmp/partition_table # 备份源磁盘分区表
sfdisk /dev/nvme0n1 < /tmp/partition_table # 恢复到SSD(nvme0n1)
c.克隆分区数据:
# 对每个分区执行(以根分区为例)
partclone.xfs -s /dev/sda2 -o /dev/nvme0n1p2
d.修复启动(UEFI 系统):
mount /dev/nvme0n1p2 /mnt # 挂载SSD根分区
mount /dev/nvme0n1p1 /mnt/boot/efi # 挂载EFI分区
for i in /dev /dev/pts /proc /sys; do mount -o bind $i /mnt$i; done # 绑定系统目录
chroot /mnt # 切换根目录
grub2-install /dev/nvme0n1 # 重新安装GRUB
grub2-mkconfig -o /boot/grub2/grub.cfg # 更新GRUB配置
exit
umount -R /mnt # 卸载
e.验证启动:重启服务器,进入 BIOS 设置 SSD 为第一启动项,确认系统正常启动。
九、高级 LVM 操作与故障处理
9.1 LVM 快照与恢复
- 创建快照(用于备份或测试):
# 创建lv_db的快照(大小10GB,快照名为lv_db_snap)
lvcreate -L 10G -s -n lv_db_snap /dev/vg_data/lv_db # -s:快照标志
# 挂载快照查看内容(只读,避免修改原始数据)
mkdir /mnt/snap
mount -o ro /dev/vg_data/lv_db_snap /mnt/snap
# 从快照恢复(需先卸载原始逻辑卷)
umount /data/db
lvconvert --merge /dev/vg_data/lv_db_snap # 合并快照到原始卷
mount /dev/vg_data/lv_db /data/db
-
- 注意:快照大小需根据预期数据变化量设置(如数据库每日变化 5GB,快照至少 10GB),满了会自动失效。
9.2 LVM 故障恢复
- VG 丢失恢复:
- 扫描物理卷:vgscan --mknodes(重建 VG 设备节点)。
- 激活卷组:vgchange -ay vg_data(-ay:激活所有卷组)。
- 若 VG 元数据损坏:
pvck --repair /dev/sdb # 修复物理卷元数据(谨慎,可能丢失数据)
vgcfgrestore -f /etc/lvm/backup/vg_data vg_data # 从备份恢复VG配置(默认每日备份)
- LV 误删除恢复:
a.停止写入:立即卸载卷组,避免新数据覆盖 LV 残留信息。
b.扫描残留 LV:vgdisplay -v vg_data查看 PE 范围,或使用testdisk扫描:
testdisk /dev/sdb # 选择磁盘→分析→快速搜索→找到误删的LV,记录起始和结束扇区
c.重建 LV:
lvcreate --name recovered_lv --segmentsize 4M --stripes 1 --stripesperdevice 1 vg_data --yes --type linear --startsector 100000 --sectors 500000 # 根据testdisk结果设置起始和结束扇区
十、故障恢复实战与数据抢救
10.1 文件系统损坏紧急修复
- XFS 文件系统修复:
# 1. 卸载损坏的分区
umount /data/db
# 2. 检查并修复(-n:只读检查,无输出表示正常)
xfs_repair -n /dev/sdb1
# 3. 实际修复(可能丢失数据,建议先备份)
xfs_repair /dev/sdb1
# 4. 若提示"log needs replay but no mount point",强制清除日志(最后手段)
xfs_repair -L /dev/sdb1 # -L:清除日志,可能导致数据不一致
- EXT4 文件系统修复:
# 1. 卸载分区
umount /data/log
# 2. 检查(-f:强制,-v:详细)
e2fsck -fv /dev/sdb2
# 3. 自动修复(-y:所有提示选yes)
e2fsck -fy /dev/sdb2
# 4. 若超级块损坏,从备份恢复(默认每8个块有一个备份)
mke2fs -n /dev/sdb2 # 查看备份超级块位置(如"Superblock backups stored on blocks: 32768, 98304...")
e2fsck -b 32768 /dev/sdb2 # 使用32768块的备份超级块
10.2 误删除分区数据恢复
- 步骤:
a.禁止写入:立即卸载分区或挂载为只读,mount -o ro /dev/sdb /mnt,避免覆盖数据。
b.使用 extundelete(EXT4):
# 安装工具
yum install -y extundelete
# 查看可恢复文件
extundelete /dev/sdb1 --inode 2 # inode 2为根目录
# 恢复单个文件
extundelete /dev/sdb1 --restore-file /data/doc.txt
# 恢复整个目录
extundelete /dev/sdb1 --restore-directory /data/docs
# 恢复所有文件
extundelete /dev/sdb1 --restore-all
c.使用 xfs_undelete(XFS):
-
-
- XFS 恢复较复杂,需依赖备份或第三方工具(如xfs_undelete需编译安装),建议定期备份 xfs 文件系统元数据:
-
xfs_metadump /dev/sdb2 /backup/xfs_meta_dump # 备份元数据
10.3 RAID 阵列数据恢复
- RAID 5 单盘故障恢复:
- 标记故障盘:mdadm /dev/md0 -f /dev/sdb(-f:标记为故障)。
- 移除故障盘:mdadm /dev/md0 -r /dev/sdb。
- 添加新盘重建:mdadm /dev/md0 -a /dev/sdc,cat /proc/mdstat查看重建进度(resync=XX%)。
- RAID 信息丢失恢复:
a.扫描 RAID 签名:mdadm --assemble --scan自动识别 RAID 阵列。
b.手动指定重建:若自动扫描失败,需指定成员盘和级别:
mdadm --assemble /dev/md0 /dev/sdb /dev/sdc /dev/sdd --level=5 --verbose # 假设3块盘的RAID 5
c.挂载验证:mount /dev/md0 /mnt/raid,确认数据可访问。
十一、跨平台磁盘管理
11.1 Linux 与 Windows 磁盘共享
- NTFS 分区挂载(Linux 访问 Windows 磁盘):
# 安装NTFS-3G工具
yum install -y ntfs-3g
# 挂载NTFS分区(读写模式)
mount -t ntfs-3g /dev/sdb1 /mnt/windows -o rw,uid=1000,gid=1000 # 指定用户ID和组ID,避免权限问题
# 永久挂载(/etc/fstab)
UUID=123456789ABCDEF0 /mnt/windows ntfs-3g defaults,uid=1000,gid=1000 0 0
- Samba 共享(Windows 访问 Linux 磁盘):
# 安装Samba
yum install -y samba
# 配置共享(/etc/samba/smb.conf)
[linux_share]
path = /data/share
browseable = yes
writable = yes
valid users = samba_user
create mask = 0644
directory mask = 0755
# 创建用户并设置密码
useradd samba_user
smbpasswd -a samba_user # 设置Samba密码
# 启动服务
systemctl start smb nmb
systemctl enable smb nmb
# Windows访问:资源管理器输入\\linux-ip\linux_share,输入samba_user和密码
11.2 移动设备管理(U 盘 / 移动硬盘)
- 自动挂载配置(udev 规则):
# 创建规则文件
vi /etc/udev/rules.d/10-usb-mount.rules
# 添加以下内容(根据设备ID调整,通过lsusb查看)
SUBSYSTEM=="block", ATTRS{idVendor}=="0781", ATTRS{idProduct}=="5581", ACTION=="add", RUN+="/usr/local/bin/usb-mount.sh %k"
SUBSYSTEM=="block", ATTRS{idVendor}=="0781", ATTRS{idProduct}=="5581", ACTION=="remove", RUN+="/usr/local/bin/usb-unmount.sh %k"
# 挂载脚本(/usr/local/bin/usb-mount.sh)
#!/bin/bash
mkdir -p /mnt/usb/$1
mount /dev/$1 /mnt/usb/$1
-
- 优势:插入指定 U 盘自动挂载到/mnt/usb/sdb1,拔出自动卸载,适合服务器临时导入数据。
- exFAT 格式支持(大文件 U 盘):
# 安装exFAT驱动
yum install -y exfat-utils fuse-exfat
# 挂载exFATU盘
mount -t exfat /dev/sdb1 /mnt/usb
十二、磁盘管理进阶工具与技巧
12.1 高级磁盘分析工具
- ncdu(NCurses Disk Usage):
-
- 终端交互式磁盘分析工具,ncdu /data递归扫描目录,按大小排序,支持删除文件(按 d 键),适合查找大文件和冗余目录。
- dstat(系统资源监控):
dstat -d -D sda,sdb # 仅显示sda和sdb的磁盘统计(读/写速度、IOPS)
dstat -d --top-bio # 显示IO占用最高的进程
-
- 优势:整合 iostat、vmstat、ifstat 功能,实时监控磁盘、CPU、网络,便于定位资源竞争问题。
12.2 磁盘性能基准测试
- fio(Flexible I/O Tester):
# 随机写测试(模拟数据库负载)
fio --name=randwrite --filename=/tmp/test.fio --rw=randwrite --bs=4k --size=1G --numjobs=4 --runtime=60 --iodepth=32 --direct=1 --ioengine=libaio --group_reporting
# 顺序读测试(模拟视频流)
fio --name=seqread --filename=/tmp/test.fio --rw=read --bs=128k --size=10G --numjobs=1 --runtime=60 --direct=1 --ioengine=libaio --group_reporting
-
- 关键指标:IOPS(随机读写)、带宽(顺序读写)、延迟(lat),用于验证磁盘性能是否符合预期(如 NVMe 随机写 IOPS 应 > 5 万)。
12.3 企业级磁盘管理方案
- 集中式存储管理平台:
-
- IBM Spectrum Control:监控异构存储(SAN/NAS/DAS),容量规划、性能分析、合规报告。
-
- SolarWinds Storage Resource Monitor:自动发现存储设备,预警容量不足,生成趋势报表。
- 自动化运维集成:
-
- Ansible 磁盘管理角色:
- name: 磁盘管理角色
hosts: all
roles:
- role: disk_management
vars:
disks:
- device: /dev/sdb
partitions:
- size: 100G
mount_point: /data/db
fstype: xfs
- size: 50G
mount_point: /data/log
fstype: ext4
-
- 通过 GitLab CI/CD 触发:提交配置后自动在测试环境执行,验证通过后推送到生产,实现 “基础设施即代码”。
十三、总结与最佳实践回顾
13.1 核心原则
- 数据安全优先:定期备份、启用 RAID、关键数据加密,故障恢复预案需定期演练。
- 性能与容量平衡:根据业务类型选择文件系统和磁盘类型(如数据库用 NVMe+XFS,日志用 SSD+EXT4)。
- 自动化与监控:通过脚本和工具减少人工操作,实时监控磁盘健康和性能,提前预警问题。
13.2 常见问题解决方案
|
问题场景 |
解决方案 |
|
磁盘空间骤减 |
用 ncdu 查找大文件,检查是否有核心转储(core dump)或日志溢出,清理后设置日志轮转 |
|
IO 性能突然下降 |
用 iostat 检查 % util 和 await,确认是否有进程独占 IO(dstat --top-bio),调整 IO 调度器或迁移负载 |
|
系统无法启动(磁盘相关) |
检查 GRUB 配置和分区表,用 live CD 修复 MBR/GPT,或从备份恢复引导扇区 |
|
磁盘灯常亮但 IOPS 低 |
可能是磁盘碎片严重,XFS 执行 xfs_fsr 优化,EXT4 执行 e4defrag,或更换故障磁盘 |
通过系统化的磁盘管理策略和工具链,可确保存储系统高效、稳定运行,同时为业务增长提供足够的弹性和安全性。
1078

被折叠的 条评论
为什么被折叠?



