1. Linux文件系统基础与分区规划
在Linux系统中,文件系统是操作系统用来组织和管理存储设备上数据的基本架构。与Windows系统不同,Linux采用单一的树状目录结构,所有存储设备都挂载在这个目录树的某个节点上。理解这个基础概念是掌握Linux存储管理的第一步。
1.1 常见Linux文件系统类型对比
现代Linux支持多种文件系统类型,每种都有其特点和适用场景:
- ext4:最常用的Linux原生文件系统,具有日志功能,适合大多数常规用途
- XFS:高性能文件系统,特别适合大文件处理,常见于企业级应用
- Btrfs:新一代写时复制(CoW)文件系统,支持快照、压缩等高级功能
- ZFS:源自Solaris的文件系统,提供强大的数据完整性校验和存储池功能
提示:对于普通桌面用户,ext4通常是最稳妥的选择;而需要频繁处理大文件的场景(如视频编辑)可考虑XFS;Btrfs和ZFS则更适合需要高级存储功能的专业用户。
1.2 分区规划的基本原则
合理的分区规划不仅能提升系统性能,还能增强数据安全性。以下是一些核心原则:
- 根分区(/): 建议至少50GB,包含系统核心文件和程序
- /home分区: 用户数据存储,应根据需求分配最大空间
- swap分区: 传统建议是物理内存的1-2倍,但在现代大内存系统中可适当减小
- /var分区: 存放日志和缓存,建议10-20GB
- /tmp分区: 临时文件存储,可设为5-10GB
对于服务器环境,可能还需要考虑单独的/boot分区(200-500MB)和数据库专用分区。
1.3 使用fdisk和parted进行分区实操
fdisk是Linux下最经典的分区工具,而parted则更适合处理大容量磁盘和GPT分区表。以下是使用fdisk创建分区的典型流程:
bash复制# 列出所有磁盘
sudo fdisk -l
# 进入分区编辑模式(假设操作/dev/sda)
sudo fdisk /dev/sda
# 常用fdisk命令:
# n - 新建分区
# d - 删除分区
# p - 显示当前分区表
# t - 更改分区类型
# w - 写入并退出
创建分区后,需要用mkfs格式化:
bash复制# 格式化为ext4文件系统
sudo mkfs.ext4 /dev/sda1
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 逻辑卷管理(LVM)深入解析
LVM(Logical Volume Manager)是Linux下强大的存储管理工具,它抽象了物理存储设备,提供了更灵活的存储管理方式。
2.1 LVM核心概念三层次
- 物理卷(PV):实际的磁盘或分区,通过pvcreate初始化
- 卷组(VG):由多个PV组成的存储池
- 逻辑卷(LV):从VG中划分出的逻辑存储单元,可动态调整大小
这种分层架构使得存储管理更加灵活,可以轻松实现存储空间的动态扩展和迁移。
2.2 LVM配置完整流程
以下是在新磁盘上配置LVM的完整步骤:
bash复制# 1. 创建物理卷
sudo pvcreate /dev/sdb1
# 2. 创建卷组
sudo vgcreate my_vg /dev/sdb1
# 3. 创建逻辑卷(创建10G大小的逻辑卷)
sudo lvcreate -L 10G -n my_lv my_vg
# 4. 格式化逻辑卷
sudo mkfs.ext4 /dev/my_vg/my_lv
# 5. 挂载使用
sudo mkdir /mnt/mydata
sudo mount /dev/my_vg/my_lv /mnt/mydata
2.3 LVM高级操作技巧
- 扩展逻辑卷:
bash复制# 先扩展LV大小
sudo lvextend -L +5G /dev/my_vg/my_lv
# 然后调整文件系统大小
sudo resize2fs /dev/my_vg/my_lv
- 迁移物理卷:
bash复制# 将数据从/dev/sdb1迁移到/dev/sdc1
sudo pvmove /dev/sdb1 /dev/sdc1
# 然后可以从VG中移除旧PV
sudo vgreduce my_vg /dev/sdb1
- 创建快照:
bash复制# 创建大小为1G的快照卷
sudo lvcreate -L 1G -s -n my_snapshot /dev/my_vg/my_lv
注意:LVM快照不是永久备份解决方案,主要用于临时状态保存,应定期将重要数据备份到其他介质。
3. 文件系统挂载与自动挂载配置
正确挂载文件系统是使用存储设备的关键步骤,而合理的自动挂载配置可以大大简化日常管理工作。
3.1 手动挂载与卸载
基本的挂载命令语法是:
bash复制sudo mount -t 文件系统类型 设备路径 挂载点
例如挂载一个ext4分区:
bash复制sudo mount -t ext4 /dev/sdb1 /mnt/mydata
卸载文件系统:
bash复制sudo umount /mnt/mydata
如果设备正在使用导致无法卸载,可以尝试:
bash复制# 查看哪些进程正在使用挂载点
sudo lsof /mnt/mydata
# 强制卸载(谨慎使用)
sudo umount -l /mnt/mydata
3.2 /etc/fstab文件详解
/etc/fstab文件定义了系统启动时自动挂载的文件系统。一个典型的条目如下:
code复制/dev/mapper/my_vg-my_lv /mnt/mydata ext4 defaults 0 2
各字段含义:
- 设备标识(可以使用UUID代替设备路径)
- 挂载点
- 文件系统类型
- 挂载选项
- dump备份标志(通常为0)
- fsck检查顺序(根分区应为1,其他通常为2)
获取UUID的方法:
bash复制sudo blkid /dev/sdb1
3.3 高级挂载选项
在/etc/fstab中可以使用多种挂载选项来优化性能或增加功能:
- defaults:默认选项(rw,suid,dev,exec,auto,nouser,async)
- noatime/nodiratime:减少访问时间更新,提升性能
- discard:启用TRIM功能(SSD建议启用)
- data=journal/ordered/writeback:控制ext4的日志模式
- uid/gid:指定默认所有者
例如,针对SSD优化的挂载选项:
code复制UUID=xxxx-xxxx /mnt/ssd ext4 defaults,noatime,discard 0 2
4. 文件系统搜索与维护技巧
高效的搜索和维护是Linux系统管理的重要组成部分,掌握这些技巧可以显著提升工作效率。
4.1 文件搜索工具比较
- find:最强大的文件搜索工具,支持多种条件组合
bash复制# 按名称搜索(区分大小写)
find /path -name "*.conf"
# 按大小搜索(大于10MB的文件)
find /path -size +10M
# 按修改时间搜索(7天内修改过的文件)
find /path -mtime -7
# 组合条件搜索(查找大于1MB的jpg文件)
find /path -name "*.jpg" -size +1M
- locate:基于数据库的快速搜索(需要定期更新数据库)
bash复制# 更新数据库
sudo updatedb
# 快速搜索
locate filename
- grep:内容搜索利器
bash复制# 在当前目录递归搜索包含"error"的文件
grep -r "error" .
4.2 文件系统维护命令
- 检查磁盘使用情况:
bash复制df -h # 查看各分区使用情况
du -sh * # 查看当前目录各文件/文件夹大小
- 文件系统检查与修复:
bash复制# 检查ext4文件系统
sudo fsck /dev/sda1
# 强制检查(通常在单用户模式下进行)
sudo fsck -f /dev/sda1
- 监控磁盘I/O:
bash复制# 实时监控磁盘I/O
sudo iotop
# 查看磁盘读写统计
sudo iostat -x 1
4.3 特殊文件系统处理
- 处理只读文件系统:
bash复制# 检查是否以只读方式挂载
mount | grep "ro,"
# 重新挂载为读写模式
sudo mount -o remount,rw /mount/point
- 修复损坏的NTFS/FAT文件系统:
bash复制# 使用ntfsfix修复NTFS
sudo ntfsfix /dev/sdb1
# 使用dosfsck修复FAT
sudo dosfsck -a /dev/sdb1
- 处理inode耗尽问题:
bash复制# 查看inode使用情况
df -i
# 查找包含大量小文件的目录
find /path -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
5. 实战:从分区到挂载的完整案例
让我们通过一个实际案例,将前面学到的知识串联起来。假设我们有一块新硬盘(/dev/sdb),需要将其配置为LVM并挂载到/data目录。
5.1 初始分区与LVM配置
bash复制# 1. 创建GPT分区表
sudo parted /dev/sdb mklabel gpt
# 2. 创建占用整个磁盘的分区
sudo parted /dev/sdb mkpart primary 0% 100%
# 3. 设置分区类型为LVM
sudo parted /dev/sdb set 1 lvm on
# 4. 创建物理卷
sudo pvcreate /dev/sdb1
# 5. 创建卷组
sudo vgcreate data_vg /dev/sdb1
# 6. 创建逻辑卷(使用全部可用空间)
sudo lvcreate -l 100%FREE -n data_lv data_vg
# 7. 格式化为XFS文件系统(适合大数据场景)
sudo mkfs.xfs /dev/data_vg/data_lv
5.2 配置自动挂载
首先获取文件系统的UUID:
bash复制sudo blkid /dev/data_vg/data_lv
然后在/etc/fstab中添加:
code复制UUID=your-uuid-here /data xfs defaults,noatime 0 2
创建挂载点并挂载:
bash复制sudo mkdir /data
sudo mount -a
5.3 后期扩展案例
当空间不足时,我们可以添加新硬盘(/dev/sdc)并扩展LVM:
bash复制# 1. 对新磁盘进行分区(步骤同上)
# 2. 将新分区加入现有卷组
sudo vgextend data_vg /dev/sdc1
# 3. 扩展逻辑卷
sudo lvextend -l +100%FREE /dev/data_vg/data_lv
# 4. 扩展文件系统(XFS在线扩展)
sudo xfs_growfs /data
对于ext4文件系统,扩展后需要运行:
bash复制sudo resize2fs /dev/data_vg/data_lv
6. 性能优化与故障排查
6.1 文件系统性能调优
- ext4调优参数:
bash复制# /etc/fstab中的优化选项
defaults,noatime,nodiratime,data=writeback,commit=60
- XFS调优:
bash复制# 创建时的优化参数
mkfs.xfs -f -i size=2048 -l size=128m,lazy-count=1 -d agcount=4 /dev/sdb1
- 调整I/O调度器:
bash复制# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 设置为deadline(传统硬盘)或none(SSD)
echo deadline | sudo tee /sys/block/sda/queue/scheduler
6.2 常见问题排查
- 无法卸载设备:
bash复制# 查看占用进程
sudo lsof +f -- /mount/point
# 强制卸载
sudo umount -l /mount/point
- 修复损坏的超级块:
bash复制# 查找备份超级块(ext系列)
sudo mke2fs -n /dev/sdb1
# 使用备份超级块修复
sudo fsck -b 32768 /dev/sdb1
- 处理文件系统只读错误:
bash复制# 检查dmesg日志
dmesg | grep -i error
# 尝试重新挂载
sudo mount -o remount,rw /mount/point
# 若无效,需在单用户模式下运行fsck
6.3 监控与分析工具
- iostat:监控磁盘I/O统计
bash复制iostat -x 1 # 显示详细统计,每秒刷新
- vmstat:系统整体性能监控
bash复制vmstat 1 # 每秒刷新
- dmesg:查看内核日志中的磁盘相关消息
bash复制dmesg | grep -i sd # 查看SCSI磁盘消息
- smartctl:检查磁盘健康状态
bash复制sudo smartctl -a /dev/sda
7. 进阶主题与最佳实践
7.1 多磁盘配置策略
- JBOD(Just a Bunch Of Disks):简单组合,无冗余
- RAID 0:条带化,提升性能但无冗余
- RAID 1:镜像,提供冗余但容量减半
- RAID 5/6:带奇偶校验的条带化,平衡性能与冗余
- RAID 10:镜像+条带化,高性能高冗余
在Linux中可以使用mdadm软件实现RAID:
bash复制# 创建RAID 1阵列
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
7.2 使用Btrfs的高级功能
Btrfs提供了许多现代文件系统功能:
- 子卷管理:
bash复制# 创建子卷
sudo btrfs subvolume create /mnt/data/subvol1
# 列出子卷
sudo btrfs subvolume list /mnt/data
- 快照功能:
bash复制# 创建快照
sudo btrfs subvolume snapshot /mnt/data /mnt/data/snapshot1
# 恢复快照
mv /mnt/data /mnt/data.old
mv /mnt/data/snapshot1 /mnt/data
- 透明压缩:
bash复制# 挂载时启用压缩
mount -o compress=zstd /dev/sdb1 /mnt/data
7.3 企业级存储方案考虑
- iSCSI配置:
bash复制# 目标端(存储服务器)
sudo targetcli
# 启动端
sudo iscsiadm -m discovery -t st -p 192.168.1.100
sudo iscsiadm -m node -T iqn.2023-01.com.example:storage -p 192.168.1.100 -l
- NFS共享:
bash复制# 服务器端/etc/exports配置
/data 192.168.1.0/24(rw,sync,no_subtree_check)
# 客户端挂载
mount -t nfs 192.168.1.100:/data /mnt/nfs
- LVM缓存:
bash复制# 创建缓存池
sudo lvcreate -L 10G -n cache_pool data_vg /dev/sdd
# 将缓存附加到逻辑卷
sudo lvconvert --type cache --cachepool data_vg/cache_pool data_vg/data_lv
8. 安全与权限管理
8.1 文件系统权限深入
Linux文件权限由三部分组成:
- 所有者权限
- 组权限
- 其他用户权限
每种权限包括:
- r (读取)
- w (写入)
- x (执行/进入目录)
查看权限:
bash复制ls -l filename
修改权限:
bash复制chmod u=rwx,g=rx,o= filename # 设置精确权限
chmod 750 filename # 使用数字表示法
8.2 特殊权限位
- SUID:以文件所有者身份执行
bash复制chmod u+s filename
- SGID:以文件所属组身份执行(目录下新建文件继承组)
bash复制chmod g+s directory
- Sticky bit:只有文件所有者才能删除/重命名
bash复制chmod +t directory
8.3 ACL高级权限控制
基本权限系统有时不够灵活,ACL(访问控制列表)提供了更精细的控制:
bash复制# 查看ACL
getfacl filename
# 设置ACL
setfacl -m u:username:rwx filename # 为用户添加权限
setfacl -m g:groupname:rx filename # 为组添加权限
setfacl -x u:username filename # 移除用户权限
8.4 文件系统加密
- eCryptfs:目录级加密
bash复制sudo apt install ecryptfs-utils
mount -t ecryptfs /secret /secret
- LUKS:全盘加密
bash复制# 创建加密分区
sudo cryptsetup luksFormat /dev/sdb1
# 打开加密分区
sudo cryptsetup open /dev/sdb1 secret_disk
# 格式化并使用
sudo mkfs.ext4 /dev/mapper/secret_disk
sudo mount /dev/mapper/secret_disk /mnt/secret
9. 容器与虚拟化环境中的存储
9.1 Docker存储驱动
Docker支持多种存储驱动:
- overlay2 (推荐)
- aufs
- devicemapper
- btrfs
- zfs
查看当前驱动:
bash复制docker info | grep "Storage Driver"
9.2 容器持久化存储方案
- 绑定挂载:
bash复制docker run -v /host/path:/container/path image
- 卷管理:
bash复制# 创建卷
docker volume create myvol
# 使用卷
docker run -v myvol:/container/path image
- tmpfs挂载:
bash复制docker run --tmpfs /container/path image
9.3 KVM虚拟化存储配置
- qcow2镜像创建:
bash复制qemu-img create -f qcow2 vm1.qcow2 20G
- LVM后端存储:
bash复制# 创建逻辑卷
lvcreate -L 50G -n vm1 vg0
# 使用virt-install创建VM
virt-install --disk path=/dev/vg0/vm1...
- NFS存储池:
bash复制virsh pool-define-as nfs_pool netfs --source-host=192.168.1.100 --source-path=/nfs/share
virsh pool-start nfs_pool
10. 自动化与脚本管理
10.1 自动化分区脚本示例
bash复制#!/bin/bash
# 自动分区并格式化为ext4
DISK=$1
MOUNT_POINT=$2
if [ -z "$DISK" ] || [ -z "$MOUNT_POINT" ]; then
echo "Usage: $0 /dev/sdX /mount/point"
exit 1
fi
# 创建分区
echo -e "n\np\n1\n\n\nw" | fdisk $DISK
# 格式化
mkfs.ext4 ${DISK}1
# 创建挂载点
mkdir -p $MOUNT_POINT
# 获取UUID
UUID=$(blkid -o value -s UUID ${DISK}1)
# 添加到fstab
echo "UUID=$UUID $MOUNT_POINT ext4 defaults 0 2" >> /etc/fstab
# 挂载
mount -a
echo "Partition created and mounted at $MOUNT_POINT"
10.2 LVM自动化管理脚本
bash复制#!/bin/bash
# 自动创建LVM卷组和逻辑卷
PV=$1
VG_NAME=$2
LV_NAME=$3
LV_SIZE=$4
MOUNT_POINT=$5
# 检查参数
if [ $# -ne 5 ]; then
echo "Usage: $0 /dev/sdX vg_name lv_name size(G) /mount/point"
exit 1
fi
# 创建物理卷
pvcreate $PV
# 创建卷组
vgcreate $VG_NAME $PV
# 创建逻辑卷
lvcreate -L ${LV_SIZE}G -n $LV_NAME $VG_NAME
# 格式化
mkfs.ext4 /dev/$VG_NAME/$LV_NAME
# 创建挂载点
mkdir -p $MOUNT_POINT
# 添加到fstab
echo "/dev/$VG_NAME/$LV_NAME $MOUNT_POINT ext4 defaults 0 2" >> /etc/fstab
# 挂载
mount -a
echo "LVM setup complete: $MOUNT_POINT"
10.3 文件系统监控脚本
bash复制#!/bin/bash
# 监控文件系统使用情况并发送警报
THRESHOLD=90
EMAIL="admin@example.com"
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output; do
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print $2 }' )
if [ $usep -ge $THRESHOLD ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as of $(date)" |
mail -s "Alert: Almost out of disk space $usep%" $EMAIL
fi
done
11. 性能基准测试
11.1 磁盘I/O性能测试工具
- dd:简单测试顺序读写
bash复制# 测试写入速度(1GB文件)
dd if=/dev/zero of=./testfile bs=1G count=1 oflag=direct
# 测试读取速度
dd if=./testfile of=/dev/null bs=1G count=1 iflag=direct
- fio:全面的I/O基准测试工具
bash复制# 随机读写测试
fio --name=randwrite --ioengine=libaio --iodepth=32 \
--rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=4 \
--runtime=60 --group_reporting
- iozone:文件系统性能测试
bash复制iozone -a -g 1G -i 0 -i 1 -i 2
11.2 测试不同文件系统性能
测试脚本示例:
bash复制#!/bin/bash
# 比较ext4、xfs、btrfs性能
FS_TYPES="ext4 xfs btrfs"
TEST_DIR="/mnt/test"
SIZE="1G"
for fs in $FS_TYPES; do
# 准备测试分区
mkfs.$fs /dev/sdb1 >/dev/null
mount /dev/sdb1 $TEST_DIR
# 测试顺序写
echo -n "$fs write: "
dd if=/dev/zero of=$TEST_DIR/testfile bs=$SIZE count=1 oflag=direct 2>&1 | grep copied
# 测试顺序读
echo -n "$fs read: "
dd if=$TEST_DIR/testfile of=/dev/null bs=$SIZE count=1 iflag=direct 2>&1 | grep copied
# 清理
umount $TEST_DIR
done
11.3 实际应用场景测试
数据库性能测试示例(使用sysbench):
bash复制# 准备测试数据
sysbench oltp_read_write --db-driver=mysql --mysql-host=localhost \
--mysql-user=root --mysql-password=password --mysql-db=test \
--tables=10 --table-size=100000 prepare
# 运行测试
sysbench oltp_read_write --db-driver=mysql --mysql-host=localhost \
--mysql-user=root --mysql-password=password --mysql-db=test \
--tables=10 --table-size=100000 --threads=8 --time=300 run
12. 系统备份与恢复策略
12.1 文件系统级别备份
- 使用tar进行全量备份:
bash复制# 创建备份(排除/proc /sys /dev等特殊目录)
sudo tar -cvpzf /backup/full_backup.tar.gz --exclude=/backup --exclude=/proc \
--exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp /
- 使用rsync进行增量备份:
bash复制# 初始完整备份
rsync -aAXv / /backup/full/
# 后续增量备份
rsync -aAXv --link-dest=/backup/full/ / /backup/incremental/$(date +%Y-%m-%d)
12.2 LVM快照备份
利用LVM快照创建一致的备份点:
bash复制# 创建快照(建议在低负载时进行)
lvcreate -L 5G -s -n root_snapshot /dev/vg0/root
# 挂载快照
mkdir /mnt/snapshot
mount /dev/vg0/root_snapshot /mnt/snapshot
# 备份快照内容
tar -cvpzf /backup/snapshot_backup.tar.gz -C /mnt/snapshot .
# 卸载并删除快照
umount /mnt/snapshot
lvremove /dev/vg0/root_snapshot
12.3 系统灾难恢复
- 创建可启动恢复镜像:
bash复制# 使用SystemRescueCd或类似工具
dd if=systemrescuecd.iso of=/dev/sdb bs=4M
- 从备份恢复系统:
bash复制# 挂载原系统分区
mount /dev/sda1 /mnt/root
# 恢复备份
tar -xvpzf /backup/full_backup.tar.gz -C /mnt/root --numeric-owner
# 重新安装引导加载程序
chroot /mnt/root /bin/bash
grub-install /dev/sda
update-grub
exit
- 验证恢复:
bash复制# 检查文件系统完整性
fsck /dev/sda1
# 检查重要配置文件
ls -l /mnt/root/etc/passwd /mnt/root/etc/fstab
13. 特殊场景处理
13.1 处理损坏的文件系统
当文件系统损坏无法挂载时:
- 使用fsck修复:
bash复制# 首先尝试卸载(如果已挂载)
umount /dev/sdb1
# 强制检查修复
fsck -y /dev/sdb1
- 使用testdisk恢复分区表:
bash复制sudo testdisk /dev/sdb
- 使用photorec恢复文件:
bash复制sudo photorec /dev/sdb1
13.2 处理磁盘I/O瓶颈
识别和解决磁盘I/O性能问题:
- 识别高I/O进程:
bash复制iotop
- 调整I/O调度器:
bash复制# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 设置为deadline(传统硬盘)
echo deadline > /sys/block/sda/queue/scheduler
# 或none(SSD/NVMe)
echo none > /sys/block/sda/queue/scheduler
- 限制进程I/O:
bash复制# 使用ionice设置优先级
ionice -c 2 -n 7 -p PID
13.3 处理磁盘空间耗尽
- 快速定位大文件:
bash复制# 查找大于100MB的文件
find / -type f -size +100M -exec ls -lh {} \;
# 按目录统计大小
du -h --max-depth=1 / | sort -h
- 清理日志文件:
bash复制# 清空大日志文件(不要直接删除)
truncate -s 0 /var/log/large.log
# 使用logrotate管理日志
logrotate -f /etc/logrotate.conf
- 处理已删除但未释放空间的文件:
bash复制# 查找被删除但仍被进程占用的文件
lsof | grep deleted
# 重启相关进程或系统以释放空间
14. 云环境中的存储管理
14.1 AWS EBS管理
- 创建并挂载EBS卷:
bash复制# 查找新附加的卷
lsblk
# 分区和格式化
sudo parted /dev/xvdf mklabel gpt
sudo parted /dev/xvdf mkpart primary 0% 100%
sudo mkfs.ext4 /dev/xvdf1
# 挂载
sudo mkdir /data
sudo mount /dev/xvdf1 /data
- 调整EBS卷大小:
bash复制# AWS控制台调整大小后,在Linux中扩展
sudo growpart /dev/xvdf 1
sudo resize2fs /dev/xvdf1
14.2 Azure磁盘管理
- 连接并格式化数据磁盘:
bash复制# 分区
sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
# 格式化
sudo mkfs.xfs /dev/sdc1
# 挂载
sudo mkdir /datadrive
sudo mount /dev/sdc1 /datadrive
- 配置自动挂载:
bash复制# 获取UUID
sudo blkid
# 添加到/etc/fstab
UUID=your-uuid /datadrive xfs defaults,nofail 0 2
14.3 Google Cloud持久化磁盘
- 挂载持久化磁盘:
bash复制# 格式化(如果需要)
sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
# 挂载
sudo mkdir -p /mnt/disks/mydisk
sudo mount -o discard,defaults /dev/sdb /mnt/disks/mydisk
- 自动挂载配置:
bash复制# 获取UUID
sudo blkid /dev/sdb
# 添加到/etc/fstab
UUID=your-uuid /mnt/disks/mydisk ext4 discard,defaults,nofail 0 2
15. 嵌入式系统存储优化
15.1 小型根文件系统构建
- 使用BusyBox创建最小系统:
bash复制# 下载并编译BusyBox
wget https://busybox.net/downloads/busybox-1.36.0.tar.bz2
tar -xf busybox-1.36.0.tar.bz2
cd busybox-1.36.0
make defconfig
make menuconfig # 选择静态编译
make -j4
make install
- 创建根文件系统结构:
bash复制mkdir -p rootfs/{bin,sbin,etc,proc,sys,usr/{bin,sbin},dev}
cp -a _install/* rootfs/
- 使用initramfs:
bash复制# 创建initramfs
cd rootfs
find . | cpio -H newc -o | gzip > ../initramfs.cpio.gz
15.2 Flash存储优化
- 减少写入次数:
bash复制# 挂载时使用noatime,nodiratime
mount -o noatime,nodiratime /dev/mtdblock0 /mnt
# 使用RAM磁盘存放临时文件
mount -t tmpfs tmpfs /var/tmp
- 使用JFFS2或UBIFS:
bash复制# 创建UBIFS镜像
mkfs.ubifs -r rootfs -m 2048 -e 126976 -c 2048 -o ubifs.img
- 均衡磨损:
bash复制# 启用UBIFS的磨损均衡
ubiupdatevol /dev/ubi0_0 -t
15.3 嵌入式LVM配置
- 精简版LVM配置:
bash复制# 使用--config减少内存占用
pvcreate --config 'devices { filter=["a|^/dev/mmcblk0p2$|","r|.*|"] }' /dev/mmcblk0p2
- 小型系统LVM示例:
bash复制# 创建小型PV/VG/LV
pvcreate /dev/mmcblk0p2
vgcreate -s 4M emb_vg /dev/mmcblk0p2
lvcreate -L 100M -n root_lv emb_vg
mkfs.ext4 /dev/emb_vg/root_lv
16. 性能监控与长期维护
16.1 长期性能趋势分析
- 使用sar收集系统统计:
bash复制# 安装sysstat
sudo apt install sysstat
# 启用数据收集
sudo sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat
sudo service sysstat restart
# 查看磁盘统计
sar -d -p 1 3
- 使用Prometheus+Grafana监控:
bash复制# node_exporter提供系统指标
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
# 启动node_exporter
./node_exporter
16.2 自动化维护脚本
- 自动扩展LVM脚本:
bash复制#!/bin/bash
# 监控LVM空间并在需要时自动扩展
THRESHOLD=80
VG="data_vg"
LV="data_lv"
EXTEND_SIZE="5G"
usage=$(df -h | grep "/dev/mapper/$VG-$LV" | awk '{print $5}' | cut -d'%' -f1)
if [ "$usage" -ge "$THRESHOLD" ]; then
# 检查VG是否有足够空间
